Discord Bot - AttributeError: у объекта «Клиент» нет атрибута «команды» - PullRequest
0 голосов
/ 30 мая 2019

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

Я попытался решить проблемубезрезультатно, это включает в себя поиск, чтение документации и, конечно же, пробу нового кода.


import discord
import asyncio 
from discord.ext import commands
from discord.ext.commands import Bot

TOKEN = [REDACTED]



# client = discord.Client()

client = Bot("!")

@client.event
async def on_message(message):
    # we do not want the bot to reply to itself
    if message.author == client.user:
        return

    if message.content.startswith('!hello'):
        @client.command(pass_context=True)
        async def broadcast(ctx, *, msg):
                for server in bot.guilds:
                    for channel in server.channels:
                        try:
                            await channel.send(msg)
                        except Exception:
                            continue
                        else:
                            break

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

Пример:! Привет Привет, это объявление!

Должно ли появиться сообщение «Привет», которое будет транслироваться на каждом существующем сервере.

РЕДАКТИРОВАТЬ: после некоторой помощиУ меня все еще есть проблема!Теперь ошибка заключается в том, что даже после выполнения команды ничего не появляется, и если я повторю ее снова, появится сообщение об ошибке: «Передача команд уже зарегистрирована».

1 Ответ

1 голос
/ 30 мая 2019

Зачем вам использовать client.command внутри client.event, как это?

Просто используйте команду вместо:

@client.command(pass_context=True)
async def hello(ctx, *, msg):
    for server in client.servers:
        for channel in server.channels:
            try:
                await client.send_message(channel, msg)
            except Exception:
                continue
            else:
                break

Это отправит сообщение на Первый канал в гильдии, где бот имеет разрешение на отправку сообщений.

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

@client.command()
async def hello(ctx, *, msg):
    for server in bot.guilds:
        for channel in server.channels:
            try:
                await channel.send(msg)
            except Exception:
                continue
            else:
                break

Редактировать: согласно комментарию Патрика ваша конкретная ошибка указывает на то, что вы используете Client вместо Bot, если это так, просто используйте @bot.command вместо.

...