Discord Bot nu răspunde la comenzi (Python) (Programare, Python, Comandă, Discord, Bots)

Carcerector a intrebat.

Tocmai m-am apucat să scriu roboți de discordie. În timp ce încercam să urmez instrucțiunile și tutorialele online, robotul meu nu ar răspunde la comenzi. A răspuns perfect la on_message(), dar indiferent ce încerc nu răspunde la comenzi. Sunt sigur că este ceva simplu, dar aș aprecia ajutorul.

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

bot = commands.Bot(command_prefix='$')
TOKEN = '<token-here>'

@bot.event
async def on_ready():
    print(f'Bot connected as {bot.user}')
    
@bot.event
async def on_message(message):
    if message.content == 'test':
        await message.channel.send('Testing 1 2 3')
        
@bot.command(name='go')
async def dosomething(ctx):
    print("command called") #Tried putting this in help in debugging
    await message.channel.send("I did something")


        
bot.run(TOKEN)

Imagine cu mine solicitând robotul și rezultatele

2 răspunsuri
Shock9616

Ok. În primul rând, singura declarație de import de care ai nevoie în partea de sus este from discord.ext import commands. Celelalte două nu sunt necesare.

În al doilea rând, am încercat și eu să mă joc cu codul tău și am constatat că on_message() pare să interfereze cu comenzile, așa că scoaterea acesteia ar trebui să ajute.

În al treilea rând, am aflat acest lucru doar atunci când am duplicat unul dintre roboții mei de lucru și am schimbat încet tot codul până când a fost identic cu al tău. Dintr-un motiv oarecare, lui Python nu i-a plăcut când am copiat și lipit codul tău. Nu am mai văzut așa ceva până acum, așa că, sincer, nu știu ce să spun în afară de faptul că codul dvs. este corect și ar trebui să funcționeze atâta timp cât luați on_message() funcția.

Iată codul final pe care l-am făcut să funcționeze:

from discord.ext import commands

bot = commands.Bot(command_prefix="$")
TOKEN = "<token-here>"


@bot.event
async def on_ready():
    print(f'Bot connected as {bot.user}')


@bot.command()
async def dosomething(ctx):
    await ctx.send("I did something")

bot.run(TOKEN)

După cum puteți vedea, singurele lucruri pe care le-am schimbat față de codul dvs. sunt că am eliminat importurile redundante din partea de sus și am șters funcția on_message() funcție. La mine funcționează perfect așa, așa că v-aș sugera să îl introduceți din nou așa într-un fișier nou și să vedeți dacă funcționează.

Dacă nu funcționează, atunci următoarea mea presupunere ar fi că există o problemă cu instalarea lui discord.py așa că ați putea încerca să o dezinstalați și apoi să o reinstalați.

Dacă nimic din toate acestea nu vă ajută, anunțați-mă și voi vedea dacă vă pot ajuta să găsiți altceva care ar putea fi cauza problemei.

Comentarii

  • Vă mulțumesc foarte mult! Am încercat și am reușit să funcționeze. –  > Por Carcerector.
  • Minunat! Mă bucur că am putut ajuta! Ați putea să marcați răspunsul ca fiind corect atunci, vă rog? –  > Por Shock9616.
Jacob

Am făcut aceeași greșeală la început.

@bot.event
async def on_message(message):
    if message.content == 'test':
        await message.channel.send('Testing 1 2 3')

Această funcție suprapune evenimentul on_message astfel încât să nu fie trimis niciodată la bot.command()

Pentru a remedia problema trebuie doar să adăugați await bot.process_commands(message) la sfârșitul funcției on_message:

async def on_message(message):
    if message.content == 'test':
        await message.channel.send('Testing 1 2 3')
    await bot.process_commands(message)

Nu am testat încă, dar asta ar trebui să rezolve problema.