我正在努力学习如何通过discord创建discord机器人。py,并希望添加一项功能,每当其他用户加入bot当前所在的语音频道时,bot就会发送一条消息。我不知道如何使用事件处理程序本身,也不太了解他们的文档来使用它。
from discord.ext.commands import Bot
client = Bot(command_prefix="!")
@client.event
async def on_voice_state_update(before, after):
await client.say("Howdy")
根据我对文档的有限理解,每当用户静音、耳聋、离开或加入通道时,都应该使用事件处理程序。
然而,即使我试图让它识别这些操作,它也会给我一条错误消息:
Ignoring exception in on_voice_state_update
Traceback (most recent call last):
File "C:\Users\Sam\PycharmProjects\FunBotProject\venv\lib\site-packages\discord\client.py", line 307, in _run_event
yield from getattr(self, event)(*args, **kwargs)
File "C:/Users/Sam/PycharmProjects/FunBotProject/my_bot2.py", line 63, in on_voice_state_update
await client.say("Xd ")
File "C:\Users\Sam\PycharmProjects\FunBotProject\venv\lib\site-packages\discord\ext\commands\bot.py", line 309, in _augmented_msg
msg = yield from coro
File "C:\Users\Sam\PycharmProjects\FunBotProject\venv\lib\site-packages\discord\client.py", line 1145, in send_message
channel_id, guild_id = yield from self._resolve_destination(destination)
File "C:\Users\Sam\PycharmProjects\FunBotProject\venv\lib\site-packages\discord\client.py", line 289, in _resolve_destination
raise InvalidArgument(fmt.format(destination))
discord.errors.InvalidArgument: Destination must be Channel, PrivateChannel, User, or Object. Received NoneType
客户端。say
只能在命令内部使用,不能在事件内部使用。请参阅此处的文档。
我能用机器人吗。除了命令之外,在其他地方说什么?
不,它们只在命令内部工作,这是因为魔法的工作方式。
这是有意义的,因为命令将始终从文本通道调用,这意味着来自bot的响应可以发送到同一通道。
在您的情况下,当用户加入语音频道时,bot不知道向哪个文本频道发送“Howdy”。
要解决这个问题,请使用client.send_message
而不是client.say
。在下面的示例代码中,每次触发on_voice_state_update
事件时,“Howdy”都会发送到“一般”文本通道。
from discord.ext.commands import Bot
client = Bot(command_prefix="!")
@client.event
async def on_voice_state_update(before, after):
if before.voice.voice_channel is None and after.voice.voice_channel is not None:
for channel in before.server.channels:
if channel.name == 'general':
await client.send_message(channel, "Howdy")
2020年工作的版本。请不要说我的代码在发送的消息方面表现不同。
from discord.ext.commands import Bot
bot = commands.Bot(command_prefix='!')
@bot.event
async def on_voice_state_update(member, before, after):
if before.channel is None and after.channel is not None:
if after.channel.id == [YOUR_CHANNEL_ID]:
await member.guild.system_channel.send("Alarm!")
我只是想做一个简单的方法,让我的不和谐机器人加入一个频道。我已经看了多个线程,其中一些已经过时,因为它们是在discord.py迁移到v1.0之前。我已经使用type()和dir()来检查通道是什么类型,并查看它有什么方法。我将其与discord.py的API进行了比较,我发现一个问题是dir()创建了一个名为的字段,但是API显示对象有一个名为方法。感谢所有的帮助!:)
所以我尝试制作一个机器人,当有人加入我的discord服务器的语音通道时,它可以通知我的线路组。问题是,我的朋友经常通过反复离开和加入语音频道来玩我的机器人,如果有人加入语音频道,我的机器人会在我的通话组中发送垃圾邮件。所以,如果用户已经离开语音频道5分钟并再次加入语音频道,我需要帮助使我的机器人只通知我的线路组
我正在做一个简单的不和谐机器人,node.js.我让它运行并响应,但我不能召唤它到语音频道这是我使用的代码 它总是转到“加入语音频道”消息,即使我在语音频道。
我正在尝试将我的discord机器人连接到语音通道,但它不工作。 没有任何错误或任何事情,当我这样做时什么都不会发生!加入我的不和频道。 这是我的代码。我试图寻找一些教程,但大多数似乎已经过时了。 有人能帮我吗? 编辑:
问题内容: 我有一个字段,我想在其中应用的变体。 该字段与ajax调用绑定在一起,当用户更改输入时,服务器端将处理数据,但是,我不想太频繁地进行调用。 假设用户要输入一个真正的字符串,我希望仅在用户完成将要键入的单词后才能进行呼叫。不过,我不想使用诸如模糊之类的事件。有什么比实现更好的方法呢? 问题答案: 使用在角> 1.3 没有-在标记中: 在您的后备控制器/范围内 然后,您将仅在1000ms不
这是很新的。我一直在阅读readthedocs API参考资料以了解不和谐。这对我来说没什么意义。到目前为止我有 我们的目标是让机器人加入带有的用户加入的语音频道,但我在让机器人加入频道时遇到了麻烦。