Python discord NonType Error?
Ich habe einen Error in meinem Code:
async def on_submit(self, interaction2: discord.Interaction):
response = await sendRequests(str(self.username), str(self.email), str(self.password))
if response == "email":
await interaction2.response.send_message("Incorrect email format", ephemeral=True)
return
if response == "password":
await interaction2.response.send_message("Incorrect password format. The password must meet these requirements: \nOne Uppercase letter \nOne lowercase letter \nOne number\n A special character ", ephemeral=True)
return
if response == "maintenance":
await interaction2.response.send_message("The system is currently under maintenance. Please look in #news for more infos.", ephemeral=True)
query = "INSERT INTO users VALUES (?, ?, ?, ?)"
main.cursor.execute(query, (interaction2.user.id, str(self.username), str(self.email), str(self.password)))
main.database.commit()
await interaction2.response.send_message("You are now in the registration process. This can take up to one hour.", ephemeral=True)
channel = main.bot.get_channel(1309925591146958933)
await channel.send("make a recaptcha, registration from user : " + str(interaction2.user.name) + " with id: " + str(interaction2.user.id))
Error:
[2024-11-23 19:32:43] [ERROR ] discord.ui.modal: Ignoring exception in modal <RegisterModal timeout=None children=3>:
Traceback (most recent call last):
File ".venv\Lib\site-packages\discord\ui\modal.py", line 189, in _scheduled_task
await self.on_submit(interaction)
File "TestButton.py", line 41, in on_submit
await channel.send("make a recaptcha, registration from user : " + str(interaction2.user.name) + " with id: " + str(interaction2.user.id))
^^^^^^^^^^^^
AttributeError: 'NoneType' object has no attribute 'send'
2 Antworten
Der Fehler, den du bekommst, weil der Kanal, den du mit
main.bot.get_channel(1309925591146958933)
abzurufen versuchst, nicht existiert oder der Bot nicht die Berechtigung hat, darauf zuzugreifen. Wenn der Kanal vorhanden ist und die ID korrekt ist, könnte es am Caching des Bots liegen.Du kannst die ID des Kanals in den Devtools überprüfen oder den Bot auf einen Kanal an der passenden Stelle in der Hierarchie ziehen.
Die spezifische Fehlermeldung, die du erhältst, besagt, dass kein Objekt vorhanden ist, auf dem die
send
-Methode aufgerufen werden kann. Das aufrufbare Objekt ist in diesem Fall channel
.Stelle sicher, dass der Bot die richtige Kanal-ID abruft und er die erforderlichen Berechtigungen für diesen Kanal hat.
Ich habe es bereits mit einer anderen ChannelID probiert und es funktioniert trotzdem nicht. Der Bot hat Administrator also sollte es an den Brechtigungen auch nicht liegen. Könntest du mir genauer erklären was du mit "Caching des Bots" meinst?
Dein Entwurfsfehler besteht darin, daß Du eine Rückgabe nutzt, ohne sie zuvor zu prüfen.
channel = main.bot.get_channel(1309925591146958933)
await channel.send("make a recaptcha, registration from user : " + str(interaction2.user.name) + " with id: " + str(interaction2.user.id))
channel wird auf die Rückgabe von get_channel() gesetzt, die offenbar None ist. Und wenn man die Dokumentation liest, dann steht da eindeutig drin, daß die Rückgabe None ist, wenn nicht auffindbar.
Dann schau doch mal in die Logs, ob sich daraus Informationen über das Problem ergeben.
Sorry, ich bin neu im Bot coden. Welche logs meinst du?
Ja, der bot findet diesen channel nicht. Aber wie behebe ich das?