首页 > 解决方案 > 向在不和谐中扮演角色的每个人发送私人消息

问题描述

如果他们具有特定角色,我正在尝试向不和谐频道中的每个人发送私人消息。

我设法找到这个:

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

这是消息:!message_role member 大家好!

如果有人可以向我解释这个很棒的问题,非常感谢。

标签: pythondiscorddiscord.py

解决方案


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

根据discord.ext.commands.NoPrivateMessage的文档,它是

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

这是因为您正在尝试使用通过 DM 使用RoleConverter的命令,其中没有角色。

您收到AttributeError: 'Message' object has no attribute 'server'异常的原因是您尝试使用Message.server属性,但您使用的是 discord.py 的 rewrite 分支,其中Server 现在是 GuildMessage.server 在 discord.py ( @Patrick Haugh )
的异步分支上作为 Message.channel 和 Channel.server 的快捷属性存在。相应地,Message.guild作为 rewrite 分支上的属性存在。

您还使用一种方法来发送仅存在于异步分支上的消息。请参阅重写分支文档的迁移到 v1.0 部分的发送消息小节

此外,pass_context=True在 rewrite 分支上不再存在并且不再需要


推荐阅读