Почему бот Discord не распознает команды? - PullRequest
1 голос
/ 01 мая 2020

Я создаю бота для сервера покемонов и пытаюсь создать команду, которая передаст роль «Gym Leader» другому пользователю. Я пытаюсь использовать команду и команду test, но на сервере и в оболочке нет ответа.

import os
import discord
from dotenv import load_dotenv
from discord.ext import commands
from discord.utils import get

bot = commands.Bot(command_prefix='b!', case_insensitive=True)

load_dotenv()
TOKEN = os.getenv('DISCORD_TOKEN')

client = discord.Client()

@client.event #works
async def on_ready():
    print(f'{client.user.name} has connected to Discord!')
    channel = client.get_channel(697500755766018098)

@client.event #works
async def on_member_join(member):
    await member.create_dm()
    await member.dm_channel.send(
        f'Hi {member.name}, welcome to Pokémon Beast Ball!\n\nThis server utilizes Pokecord and Mewbot.\n\nSay \'pkhelp\' in the server to learn about Pokecord commands.\nSay \';help\' in the server to learn about Mewbot commands.'
    )

@bot.command() #doesn't work
async def test(ctx):
    print("test recieved")
    await ctx.send(ctx)

@bot.command(pass_context=True) #this is the command that really needs help
async def newleader(ctx: discord.User=None):
  print("command recieved")
  if not user:
    await ctx.send("Invalid")
    print("1")
  else:
    role = discord.utils.get(ctx.guild.roles, name="Gym Leader")
    role2 = discord.utils.get(ctx.guild.roles, name="Purple UniTurtle Man")
    if role in ctx.author.roles or role2 in ctx.author.roles:
        print("2")
        await ctx.send(f'A new Gym Leader has been appointed')
        await user.add_roles(role)
        await bot.remove_roles(ctx.author, role)
    else:
        print("3")
        await ctx.send("You do not have permission to use this command")

client.run(TOKEN)

Ответы [ 2 ]

0 голосов
/ 01 мая 2020

Вы смешиваете bot и client, и ваш client = discord.Client() наступает на ваше заявление bot = commands.Bot(...). Поскольку вы хотите выполнять команды и события, вы используете только оператор commands.Bot(...).

Удалите оператор client = discord.Client() и измените ваши @client.event декораторы на @bot.event.

Также, если вы хотите сослаться на контекст команды в вашей тестовой команде, обновите его с помощью параметра ctx async def test(ctx):.

Это поможет вам начать использовать команды, и теперь будет работать ввод b1test.

Обратите внимание, что case_insensitive=True в объявлении команд относится к имени команды, а не к ней. префикс.

0 голосов
/ 01 мая 2020

Вы проверили:

  • подключение к боту → создайте событие "on_connect" (не совсем то же самое, что и "on_ready"), чтобы увидеть, успешно ли ваш бот подключился к вашему серверу (до получения данных от диссонанс). Если нет, попробуйте снова добавить своего бота на сервер и проверить, все ли токены являются товарами.
  • права бота (если у вашего бота есть право писать в канале, читать сообщения из каналов, управлять ролями) → если ваш бот не может читать сообщения, он не может читать команды!
  • приоритет роли (вы не можете управлять ролями выше своих) → go для «настроек сервера»> «роли»> поставить роль бота выше роли «Gym Leader» (или в верхней части списка, если вам все равно).
...