当前位置: 首页 > 知识库问答 >
问题:

忽略python3中bot与discord一起生成的错误。派克

金兴朝
2023-03-14

由于不和谐,我在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=我是比利时人(会说法语),因此上述英语不应该是最佳的,我道歉。谢谢谷歌翻译(=

共有1个答案

魏岳
2023-03-14

在这里,使用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、本地文件、播放列表、