Python 向参与不和的所有人发送私人消息

Python 向参与不和的所有人发送私人消息,python,discord,discord.py,Python,Discord,Discord.py,我试图在一个不和谐的频道向每个人发送一条私人信息,如果他们有特定的角色 我设法发现: from discord.ext import commands import discord TOKEN = 'xxx' bot = commands.Bot(command_prefix='!') @bot.command(pass_context=True) async def message_role(ctx, role: discord.Role, *, message): for me

我试图在一个不和谐的频道向每个人发送一条私人信息,如果他们有特定的角色

我设法发现:

from discord.ext import commands
import discord

TOKEN = 'xxx'

bot = commands.Bot(command_prefix='!')

@bot.command(pass_context=True)
async def message_role(ctx, role: discord.Role, *, message):
    for member in ctx.message.server.members:
        if role in member.roles:
            await bot.send_message(member, message)

bot.run(TOKEN)
我使用Client.x,但我不明白Bot是什么。是,当我运行此操作时,会收到以下错误消息:

PS D:\discord bots> py .\DMeveryone.py
Ignoring exception in command message_role:
Traceback (most recent call last):
  File "D:\Program Files (x86)\Microsoft Visual Studio\Shared\Python36_64\lib\site-packages\discord\ext\commands\bot.py", line 898, in invoke
    await ctx.command.invoke(ctx)
  File "D:\Program Files (x86)\Microsoft Visual Studio\Shared\Python36_64\lib\site-packages\discord\ext\commands\core.py", line 608, in invoke
    await self.prepare(ctx)
  File "D:\Program Files (x86)\Microsoft Visual Studio\Shared\Python36_64\lib\site-packages\discord\ext\commands\core.py", line 573, in prepare
    await self._parse_arguments(ctx)
  File "D:\Program Files (x86)\Microsoft Visual Studio\Shared\Python36_64\lib\site-packages\discord\ext\commands\core.py", line 491, in _parse_arguments
    transformed = await self.transform(ctx, param)
  File "D:\Program Files (x86)\Microsoft Visual Studio\Shared\Python36_64\lib\site-packages\discord\ext\commands\core.py", line 353, in transform
    return await self.do_conversion(ctx, converter, argument, param)
  File "D:\Program Files (x86)\Microsoft Visual Studio\Shared\Python36_64\lib\site-packages\discord\ext\commands\core.py", line 308, in do_conversion
    return await self._actual_conversion(ctx, converter, argument, param)
  File "D:\Program Files (x86)\Microsoft Visual Studio\Shared\Python36_64\lib\site-packages\discord\ext\commands\core.py", line 254, in _actual_conversion
    ret = await instance.convert(ctx, argument)
  File "D:\Program Files (x86)\Microsoft Visual Studio\Shared\Python36_64\lib\site-packages\discord\ext\commands\converter.py", line 320, in convert
    raise NoPrivateMessage()
discord.ext.commands.errors.NoPrivateMessage
这是博物馆:!大家好

如果有人能向我解释这个问题,那将是非常棒的,非常感谢。

是discord.py和discord.Client子类的命令扩展的一部分

根据的文档,它是

当操作在专用消息上下文中不起作用时引发

这是因为您正试图使用一个命令,该命令通过DMs使用,而DMs中没有角色

您得到一个
AttributeError:“Message”对象没有属性“server”
异常的原因是您试图使用该属性,但使用的是discord.py的重写分支,其中。
Message.server作为Message.channel和channel.server的快捷方式属性存在于discord.py()的异步分支上。相应地,作为重写分支上的属性存在

您还使用了一种方法来发送仅存在于异步分支上的消息。 看


另外,.

从我看到的情况来看,您得到的是
异常discord.ext.commands.NoPrivateMessage(message=None,*args)
这基本上是告诉您->当操作在私有消息上下文中不起作用时引发异常这不起作用?如果您从bot所在服务器的文本通道调用命令,而不是从私有消息上下文调用命令,则该命令有效Message@Tristo我已经试过了。我也收到了一个错误:discord.ext.commands.errors.CommandInvokeError:Command引发了一个异常:AttributeError:“Message”对象没有属性“server”@lucky_dandu这是未发布在此处的代码中的错误,但这意味着当您需要执行
message.channel.server
时,您正在执行
message.server
操作。您确定他们正在使用“重写”吗?他们有
等待bot.send_message
在上面的代码中。@PatrickHaugh是的,我指出了
raise NoPrivateMessage()
当前处于启用状态,与异常的回溯一样。然而,它甚至没有320行,而是在第151行,是的,在异步分支的第320行,它们的异常回溯显示在。