Warum kann ich mit Python keine personalisierten Commands programmieren?
Ich wollte bei Python ein Bot mit personalisierten Commands schreiben. Aber immer wenn ich in Discord den Command "!test" ausführe passiert nichts.
import discord
from discord.ext import commands
intents = discord.Intents.default()
bot = commands.Bot(command_prefix='!', intents=intents)
token = ""
@bot.event
async def on_ready():
print(f"{'-'*40}\nDiscord Bot ist online als {bot.user.name}")
@bot.command()
async def test(ctx):
await ctx.send(ctx.author)
bot.run(token)
Weiß jemand was bei dem Code falsch ist und wie man es lösen könnte?
LG
3 Antworten
https://discordpy.readthedocs.io/en/stable/quickstart.html
Du kannst einfach mit on_message abfragen, ob der Befehl dem entspricht was du brauchst. Die Methode, die du da verwendest ist mir nicht bekannt (Wobei es gut möglich ist, dass sie funktionieren sollte). Ansonsten mach mal print("test command was entered") in deine test funktion rein, um zu schauen ob sie überhaupt getriggert wurde.
Hast du mal versucht, anstatt nur "bot.command()" mal den namen mit zu geben?z.B.
@bot.command(name='test')
Die Methode, die du da verwendest ist mir nicht bekannt (Wobei es gut möglich ist, dass sie funktionieren sollte).
Es ist die Methode und sollte eigentlich klappen (https://discordpy.readthedocs.io/en/stable/ext/commands/commands.html)
Du kannst einfach mit on_message abfragen, ob der Befehl dem entspricht was du brauchst.
Ich kenn zwar den Command und hab ihn auch früher immer verwendet (klappt auch), aber ich finde wenn man viele Commands hat wird es unordentlich
Warum denn unordentlich? Erstelle dir eine Klasse, in der du alle Funktionen für deine Commands sammelst. Dann machst du elif in on_message, dadurch hast du es immer noch halbwegs ordentlich. Vielleicht kannst du auch mit variablen arbeiten, so das es dann z.B. so aussieht:
if msg == Commands.TEST:
Commands.testCmd()
elif msg == Commands.HELLO_WORLD:
Commands.HelloWorld()
else:
# Wenn der Command nicht existiert
Was deine Methode angeht, hast du geschaut ob sie getriggert wird? Wenn sie getriggert wird, dann hat es was mit dem zurücksenden zu tun. Wenn nicht, hat es was mit dem command weg zu tun.
You must have access to the message content for the commands extension to function. This must be set both in the developer portal and within your code.
Failure to do this will result in your bot not responding to any of your commands.
Aus der Doku.
intents = discord.Intents.default()
https://discordpy.readthedocs.io/en/stable/api.html#discord.Intents.default
A factory method that creates a Intents with everything enabled except presences, members and message_content
intents = discord.Intents.default()
bot = commands.Bot(command_prefix='!', intents=intents)
token = ""
Hab ich doch eigentlich
Hallo Hanibal545!
Versuch erstmal in @bot.command() den Namen mit reinzunehmen und das ctx als ctx:Context zu schreiben (so funktionierts bei mir)
@bot.command(name="test")
async def test(ctx:Context):
await ctx.send(ctx.author)
Hab ich auch schon probiert aber die Funktion wurde nicht getriggert