1
votes

Pourquoi le robot Discord ne reconnaît-il pas les commandes?

Je crée un bot pour un serveur pokemon, et j'essaye de créer une commande qui donnera le rôle 'Gym Leader' à un autre utilisateur. J'essaie d'utiliser la commande et d'utiliser la commande test, mais il n'y a pas de réponse dans le serveur ni dans le shell.

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)


0 commentaires

3 Réponses :


0
votes

Avez-vous vérifié :

  • connexion au bot → faites un événement "on_connect" (pas exactement le même que "on_ready") pour voir si votre bot se connecte avec succès à votre serveur (avant de recevoir les données de discord). Sinon, essayez à nouveau d'ajouter votre bot à votre serveur et vérifiez si tous les jetons sont des biens.
  • autorisations de bot (si votre bot a le droit d'écrire dans le canal, lire les messages des canaux, gérer les rôles) → si votre bot ne peut pas lire les messages, il ne peut pas lire les commandes!
  • priorité du rôle (vous ne pouvez pas gérer des rôles plus élevés que les vôtres) → allez dans "paramètres du serveur"> "rôles"> mettez votre rôle de bot au-dessus du rôle 'Gym Leader' (ou en haut de la liste si vous ne vous souciez pas ).

0 commentaires

0
votes

Vous client = discord.Client() bot et client et votre client = discord.Client() marche sur votre bot = commands.Bot(...) . Puisque vous voulez faire des commandes et des événements, vous n'utilisez que l' commands.Bot(...) .

Retirez le client = discord.Client() déclaration et changer votre @client.event décorateurs @bot.event .

Aussi, si vous souhaitez référencer le contexte de commande dans votre commande de test, mettez-le à jour avec le paramètre ctx async def test(ctx):

Cela vous permettra de commencer à utiliser vos commandes et la saisie de b1test fonctionnera désormais.

Veuillez noter que case_insensitive=True sur la déclaration des commandes fait référence au nom de la commande et non au préfixe.


0 commentaires

0
votes

Le problème n'est pas vraiment ce que suggère la réponse choisie. Il n'y a probablement aucune raison d'utiliser les deux commands.Bot et discord.Client mais l'utilisation des deux ne conduira pas à ce problème.

Le problème est que vous exécutez uniquement le client , pas le bot . Vous devez également exécuter l'instance de bot si vous souhaitez qu'elle fonctionne.

Si vous n'essayez pas de faire quelque chose de spécifique, utiliser simplement le bot ou le client suffira de toute façon, de sorte qu'une partie de la réponse sélectionnée a été utile pour éviter au moins le problème.


0 commentaires