Отправить личное сообщение всем, кто играет роль в раздоре - PullRequest
0 голосов
/ 01 февраля 2019

Я пытаюсь отправить личное сообщение всем в канале разногласий, если у них есть определенная роль.

Мне удается найти это:

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но я не понимаю, что такое бот.и когда я запускаю это, я получаю следующее сообщение об ошибке:

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

это messege:! message_role member Привет всем!

Если кто-то может объяснить мне проблему, которая будетбыть классным, большое спасибо.

1 Ответ

0 голосов
/ 02 февраля 2019

discord.ext.commands.Bot является частью расширения команд discord.py и подклассов discord.Client.

Согласно документации для discord.ext.commands.NoPrivateMessage ,

вызывается, когда операция не работает в контекстах личных сообщений.

Это потому, что вы пытаетесь использовать команду, которая использует RoleConverter через DM, где нет ролей.

Причина, по которой вы получаете исключение AttributeError: 'Message' object has no attribute 'server', заключается в том, что вы пытаетесь использовать Message.server , но вы используете ветвь перезаписи discord.py, где Сервер теперь Гильдия .
Message.server существует как атрибут ярлыка для Message.channel и Channel.server наасинхронная ветвь discord.py ( @ Patrick Haugh ).Соответственно, Message.guild существует как атрибут в ветви перезаписи.

Вы также используете метод для отправки сообщений, которые существуют только в асинхронной ветви.См. Подраздел Отправка сообщений раздела Миграция на v1.0 документации для ветви перезаписи .

Кроме того, pass_context=True больше не существует и больше не требуется дляветвь перезаписи .

...