由于不和谐,我在python3中开发了一个小机器人。py插件,必须向Discord服务器中的所有用户发送私人消息。
@bot.event
async def on_message(message):
if message.content.startswith('!mmb'):
channel = message.channel
x = message.guild.members
text = 'Test'
for member in x:
print(member)
if member.bot == "True":
print(f"Message non envoyé à {member.name}.")
else :
await member.send(text)
print(f"Messages envoyé à {member.name}")
print("Tous les messages ont été envoyés.")
因此,我创建了一个服务器上所有用户的列表,然后我创建了一个循环,通过删除bot将上述消息发送给所有用户。问题在于,在此用户列表中,有些用户已禁用服务器上的私人消息,因此bot无法发送消息并生成错误:
Ignoring exception in on_message
Traceback (most recent call last):
File "C:\Users\antoi\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.8_qbz5n2kfra8p0\LocalCache\local-packages\Python38\site-packages\discord\client.py", line 312, in _run_event
await coro(*args, **kwargs)
File "./main.py", line 31, in on_message
await member.send(text)
File "C:\Users\antoi\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.8_qbz5n2kfra8p0\LocalCache\local-packages\Python38\site-packages\discord\abc.py", line 856, in send
data = await state.http.send_message(channel.id, content, tts=tts, embed=embed, nonce=nonce)
File "C:\Users\antoi\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.8_qbz5n2kfra8p0\LocalCache\local-packages\Python38\site-packages\discord\http.py", line 221, in request
raise Forbidden(r, data)
discord.errors.Forbidden: 403 Forbidden (error code: 50007): Cannot send messages to this user
所以我希望机器人继续列表,尽管有错误。因此,我们可以找到参数并删除那些禁用带有条件的私有消息的用户,或者忽略它产生的错误并继续执行循环。
不用告诉你,我自己没有找到解决办法。提前感谢您的回答。
PS=我是比利时人(会说法语),因此上述英语不应该是最佳的,我道歉。谢谢谷歌翻译(=
在这里,使用try/catch可以解决您的问题。正如有人在评论中指出的那样,它会引发一个禁止的错误,因此类似于这一点的东西会起作用,如果DMs被禁用,它会捕获错误并继续:
try:
await member.send(text)
print(f"Messages envoyé à {member.name}")
except discord.Forbidden:
print("User has DMs disabled.")
请注意,它还可以抛出HTTPExc0019错误,因此包含这可能也是一个好主意。
嘿, 我正在构建一个Discord机器人,以便使用Node进行一些练习。和不和谐。js。你可以用这个机器人来执行命令吗?音频,它将复制音频。 我想设置20秒后不播放任何东西的机器人离开语音频道。我用函数setTimeout()做到了,但是当我想听另一个音频时,机器人会在音频结束前离开频道。 问题是obv setTimeout(),但idk如何修复它。 这是我的密码。 如果你需要整个项目,它被上传到
我有以下一段代码: 我想过滤掉来自另外两个机器人的无意义的机器人信息。 然而,这会导致bot删除服务器上的每个用户的消息。 用户“臭墨水”的消息被删除了。
正如问题所述,我有一个机器人,我正在使用它向所有被邀请加入的行会发送特定频道的消息。首先,在我的控制实验中,这个功能在我用3台服务器做的控制实验中起作用,我用机器人需要的通道来中继我所有的消息。然后,当我的bot公开时,一些成员的服务器中没有此通道,这导致我的bot在执行我的测试/中继功能时显示。 我希望bot能够将我的中继消息发送到我指定的频道名称,并忽略其服务器中没有该频道的所有人,并继续将消
错误-大错误,所以准备车轮元数据:以状态“错误”结束错误:命令错误退出,退出状态1:命令:/app/.heroku/python/bin/python/app/.heroku/python/lib/python3.9/site-packages/pip/_vendor/pep517/_in_process.py prepare_metadata_for_build_wheel/tmp/tmpscn
QueryList遵循将业务与错误分离的原则, HTTP请求传输过程中如果出现的错误,QueryList将会抛出异常。 QueryList的HTTP客户端基于GuzzleHttp,它提供了丰富的HTTP异常类型,用户可以自行设计根据不同的异常类型做不同的处理。 如果你觉得麻烦,并不想每次都去处理HTTP异常,选择直接忽略,让程序继续运行下去,做法可以参考下面方式: 对内置的get()进行封装: u
Red Discord Bot 是一个完全模块化的机器人,意味着所有的功能和命令都可以根据你的喜好来启用/禁用,使其完全可定制。这是一个自托管的机器人,你需要托管和维护你自己的实例。你可以把 Red 变成一个管理机器人、音乐机器人、事务处理机器人等。 默认的模块集包括但不限于: 管理功能(踢人/禁言、管理日志、过滤器、聊天清理) 音乐功能(YouTube、SoundCloud、本地文件、播放列表、