Timeout von Buttons & Select Menüs entfernen [discord.py]
Hi, ich wollte letztens Buttons, Select Menüs etc. erstellen, die permanent (auch nach einem Bot-Neustart) nutzbar sind (also kein Timeout haben).
timeout=None
scheint es nicht alleine getan zu haben, weswegen ich aktuell die ID der Nachricht speichere und so das Ganze praktisch neu lade.
Hat da jemand einen besseren Weg oder passt das so halbwegs?18 Replies
Soweit ich weiß erlaubt die API das nicht, weil das über eine session shard läuft (nicht 100% sicher)
deshalb muss man eigentlich immer bei einem bot neustart die UIs (also buttons etc) bei den nachrichten via edit neu hinzufügen - genau wie du es machst
https://canary.discord.com/channels/616655040614236160/1330888540363554889/1330920176279093359
Passt auch für die Situation.
Gib deinem
View
einfach eine custom_id
und frag diese bei dem on_interaction
Event ab, dann funktioniert es auch nach Bot-Restarts.
Sagst du das ist lost?
Viel zu kompliziert, das was ich sagte sind nichtmal ne Handvoll Zeilen Code. Von dem was du geschickt hast ist auch zum größten Teil Bad practise. Im den on ready Event soll auch so gut wie nichts passieren normalerweise.
Probier mal was ich dir schrieb und baller den ganzen Kasten da raus.
Bin Grad aber auch am Handy. Bei Fragen bin ich maybe morgen sonst noch da
Meinst du das so?
Die Zeile hier hab ich mir aus einer Dokumentation geschnappt, die Bedingung scheint aber nie erfüllt zu sein:
Ja. Aber kleiner Tipp, du solltest
except
nicht einfach so trocken verwenden, Python weist dich in der Regel auch darauf hin, das das bad-practise ist mit einer Warnung die "too broad exception" heißt oder so. Du solltest dort nur Fehler eintragen, die auch wirklich passieren können, z.b. HTTPException oder sowas.
Du kannst den ersten Check dort einf entfernen und ersetzen mit "custom_id" in interaction.data
interaction.data ist quasi die "rohe" Antwort von Discord, in Form einer JSON.So in etwa?
"Test" ist da, weil der Check immernoch nicht erfüllt ist
Ne, du sollst es so ersetzen:
if "custom_id" in interaction.data and interaction.custom_id == "verification_button"
Bei deinem Beispiel ist es kein Wunder das es nicht erfüllt ist, da er so überprüft ob "interaction.data" ein Attribut besitzt das verification_button heißt, aber du suchst ja quasi nach custom_id.Oh, my bad
Immernoch keine Reaction
Zeig mal dein Code
Du könntest auch mal das print Test direkt unter
async def
schreiben, um zu überprüfen ob das Event überhaupt ausgelöst wurde.Das Event wird ausgelöst.
So wird der Button erstellt
mach mal print interaction.data
und print interaction.custom_id
Zeig mal deinen aktuellen Code von dem Event
Du bist dir sicher das der Code nicht ausgelöst wird?
Vllt stimmt ja nur was mit deinem Rest-Code nicht, aber er geht in den if-check rein
Jup, so wars - hab den Fehler gefunden :)
›
✅
- Antwort akzeptiert: Der Ersteller dieser Frage hat deine Antwort akzeptiert (+25 Karma)