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)
3 Réponses :
Avez-vous vérifié :
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.
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.