所以如果我有一个像这样的长命令:
@bot.command(pass_context=True)
async def longCommand(ctx):
#typing status
sleep(10)
bot.say("Done!")
Run Code Online (Sandbox Code Playgroud)
不幸的是,在文档或此处没有找到任何内容。
我正在使用 discord.py 库在 Python 3.6 中开发 Discord 机器人,并且在尝试从我创建的线程向特定通道发送消息时遇到问题。
基本上,我有一些线程监视网站,并且我想调用一个函数(我正在传递给线程),当我注意到网站上的更改时,该函数将消息发送到一个特定的频道。
我最初尝试在client.send_message()没有 async/await 的情况下直接调用但它根本不起作用,所以我编写了发送消息的 async/await 函数(测试它并且它有效)但是我再次从线程调用它时遇到问题,所以我结束了将机器人客户端传递给我的线程并调用self.bot_client.loop.create_task(self.sendmsgfunction(msg)). 这是可行的,但与机器人使用常规@bot.event功能回复消息所需的时间相比,它非常慢(发送消息大约需要 15 秒,而且这可能不是正确的发送方式)。
我已经尝试使用 asyncio 创建一个事件循环,然后调用该函数,但最终还是出现了错误。
有任何想法吗?
我想要一个代码来显示某人在语音通道中的完整时间,但我不知道如何启动和停止计数器。
@bot.event
async def on_voice_state_update(before, after):
if after.voice.voice_channel:
timestrr = time.strftime("%d.%m.%Y-%H:%M:%S")
voicezeit(after.id, timestrr)
#here should a timer start
else:
#and here should the timer stop
Run Code Online (Sandbox Code Playgroud)
我真的不知道该怎么做,所以我真的很感激每一个帮助。
我正在尝试将 PIL Image 对象发送到不和谐聊天(尽管我不想保存文件)我有一个函数可以从互联网上收集图像,将它们垂直连接在一起,然后返回一个 PIL Image 对象。
下面的代码从我本地机器上的 PIL Image 对象创建一个文件图像,然后将其发送到 Discord 聊天。我不想经常在我的机器上重新创建和保存文件图像。如何只发送 PIL Image 对象,而不必每次发送请求时都保存图像?
from PIL import Image
from io import BytesIO
import requests
import discord
# Initializes Discord Client
client = discord.Client()
# List of market indexes
indexes = [
'https://finviz.com/image.ashx?dow',
'https://finviz.com/image.ashx?nasdaq',
'https://finviz.com/image.ashx?sp500'
]
# Returns a vertical image of market indexes
def create_image():
im = []
for index in indexes:
response = requests.get(index)
im.append(Image.open(BytesIO(response.content)))
dst = Image.new('RGB', (im[0].width, im[0].height + im[1].height + im[2].height))
dst.paste(im[0], (0, 0)) …Run Code Online (Sandbox Code Playgroud) 我开始使用discord.py(不是discord.ext命令,只有import discord)。最近做了一个频道,频道名称显示公会成员人数,每次有人加入或离开都会更新。这是我的代码:
import discord
client = discord.Client()
@client.event
async def on_ready():
print("Bot is ready")
@client.event
async def on_member_join(member):
channel = client.get_channel('channel id here')
await channel.edit(name = 'Member count: {}'.format(channel.guild.member_count()))
@client.event
async def on_member_leave(member):
channel = client.get_channel('channel id here')
await channel.edit(name = 'Member count: {}'.format(channel.guild.member_count()))
client.run('my token here')
Run Code Online (Sandbox Code Playgroud)
我还添加了client.on_message命令,以便机器人可以将该名称编辑为我输入的任何内容。
@client.event
async def on_message(message)
if message.content == 'rename channel':
channel = client.get_channel('channel id here')
await channel.edit(name = 'TEST')
Run Code Online (Sandbox Code Playgroud)
现在,在添加了一些用于调试的打印后,我发现了这一点on_member_join()并且on_member_leave()从未被调用,但是当我键入命令时,机器人会编辑通道的名称。那是一个语音频道,显示成员数量。没有任何错误。我读错了 API …
我是编程新手。我试图让我的不和谐机器人打开命令提示符以确认它可以运行,但我收到此错误:
File "C:\Users\---\AppData\Local\Programs\Python\Python38-32\lib\asyncio\proactor_events.py", line 116, in __del__
self.close()
File "C:\Users\---\AppData\Local\Programs\Python\Python38-32\lib\asyncio\proactor_events.py", line 108, in close
self._loop.call_soon(self._call_connection_lost, None)
File "C:\Users\---\AppData\Local\Programs\Python\Python38-32\lib\asyncio\base_events.py", line 719, in call_soon
self._check_closed()
File "C:\Users\---\AppData\Local\Programs\Python\Python38-32\lib\asyncio\base_events.py", line 508, in _check_closed
raise RuntimeError('Event loop is closed')
RuntimeError: Event loop is closed
[Finished in 0.871s]
Run Code Online (Sandbox Code Playgroud)
代码:
import discord
from discord.ext import commands
client=commands.Bot(command_prefix = '.')
@client.event
async def on_ready():
print('ok')
client.run(token)
Run Code Online (Sandbox Code Playgroud)
导致此错误的原因是什么,我该如何解决?
编辑:经过一些测试,我相信“client.run(token)”是导致“事件循环关闭”的原因,不知道为什么。
我正在编写一个 Discord 机器人,我想在其中执行命令!quote,它将从具有 id 的特定频道quotesID(可能是也可能不是!quote已发送的不同频道)中拉出一条随机消息。我一直在查看Discord.js的文档,但我找不到通过其 ID获取TextChannel然后使用 TextChannels.messages函数从而获取MessageManager和消息集合的方法。
我知道我可以使用公会msg.guild(msg触发器在哪里!quote)或获得 tex
我是 JavaScript 和 Discord.js 的新手,所以任何信息都有帮助。(我使用的是 Discord.js 版本 12.2.0)
所以最近我收到了标题中的错误。我不确定是什么导致了这个问题,大约一周前它随机停止了机器人的工作。我已经完成了谷歌搜索,但仍然没有找到解决这个问题的正确方法。我已在完整错误的粘贴箱下方链接以及我当前使用的不和谐机器人的链接。我已经与该机器人的开发人员交谈过,目前正在使用它的人没有任何问题。这似乎是我这边的问题。如果有人可以帮助我解决这个问题,我将不胜感激。
https://github.com/yannickgloster/discord-10man
OSError: [WinError 121] The semaphore timeout period has expired
Run Code Online (Sandbox Code Playgroud)
我正在设计一个 discord.js 代码,它将显示成员的消息和语音统计信息,根据它的排行榜可能会导致奖品。
通常,我的图表以某种方式应该看起来像这些图表:
(上图分别是discord服务器的语音和消息统计)
但是当我输入命令时,它会显示这些无色图形:(不是关于它的设计,而是关于它的颜色)
在这两个图之间,没有代码差异,没有 node.js 版本更改,没有平台更改等。
我已经在这个项目上工作了很长时间,但一个月左右后,我仍然找不到我的代码有任何错误。也许我错过了什么。有人可以帮我吗?谢谢。
一般统计命令:
const { Client, Message, MessageEmbed, MessageAttachment } = require("discord.js");
const Stat = require("../../Models/Database/Stat");
const tm = require("../../Managers/TimeManager");
const moment = require("moment");
require("moment-duration-format");
const cm = require("../../Managers/ChartManager");
/**
* @param {Client} client
* @param {Message} message
* @param {Array<String>} args
*/
module.exports.execute = async(client, message, args) => {
let victim = message.mentions.users.first() || client.users.cache.get(args[0]) || message.author;
let embed = new MessageEmbed()
.setAuthor(victim.username, victim.avatarURL({ dynamic: true }))
.setFooter("?statistik bilgileri");
let data …Run Code Online (Sandbox Code Playgroud) 目前我使用的是最新版本的Discord.js (v13.1.0)。
我希望能够检测某条消息是否是 DM。我尝试创建一个messageCreate事件并执行 if 语句来检查该通道是否是 DM
client.on('messageCreate', message => {
if (message.channel.type == 'DM') {
console.log('Dm recieved!')
}
})
Run Code Online (Sandbox Code Playgroud)
由于某种原因,这不起作用。所以我不知道会发生什么。
这是我的intents:
[Intents.FLAGS.GUILDS, Intents.FLAGS.GUILD_MESSAGES, Intents.FLAGS.GUILD_MESSAGE_REACTIONS, Intents.FLAGS.DIRECT_MESSAGES]
顺便说一句,该事件确实有效:
client.on('messageCreate', message => {
console.log('Event')
}
Run Code Online (Sandbox Code Playgroud) discord ×10
discord.py ×6
python ×5
discord.js ×3
javascript ×3
python-3.x ×3
node.js ×2
chart.js ×1