Python 3.x 忽略python3中机器人使用discord.py生成的错误

Python 3.x 忽略python3中机器人使用discord.py生成的错误,python-3.x,discord,bots,discord.py,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' fo

多亏了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将上述消息发送给所有用户。 问题在于,在此用户列表中,有些用户已禁用服务器上的私人消息,因此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 Translate(

使用try/catch可以在此处解决您的问题。正如有人在评论中指出的,它会引发一个禁止的错误,因此类似于此的方法可以奏效,如果DMs被禁用,它会捕获错误并继续:

try:
    await member.send(text)
    print(f"Messages envoyé à {member.name}")
except discord.Forbidden:
    print("User has DMs disabled.")
请注意,它还可能引发HTTPException错误,因此包含该错误也可能是一个好主意。

它会引发您可以捕获的错误。您还可以使用并先发制人地检查您是否有权限。