忽略由python3中的机器人通过discord.py

时间:2020-07-28 13:59:26

标签: python-3.x discord bots discord.py

由于使用了discord.py插件,我必须使用python3开发一个小型机器人,该插件必须向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将上述消息发送给所有用户。 问题是,在此用户列表中,有些人在服务器上禁用了私人消息,因此漫游器无法发送消息并生成错误:

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 =我是比利时人(说法语),因此上述英语不应该是最佳选择,我深表歉意。 谢谢Google翻译(=

1 个答案:

答案 0 :(得分:1)

使用try / catch可以在这里解决您的问题。正如某人在评论中指出的那样,它会引发一个禁止的错误,因此可以执行一些类似的操作,在该错误中捕获错误并在禁用DM的情况下继续前进:

try:
    await member.send(text)
    print(f"Messages envoyé à {member.name}")
except discord.Forbidden:
    print("User has DMs disabled.")

请注意,它也可能引发HTTPException错误,所以包括它也是一个好主意。