[PYTHON] Kenntnisse beim Erstellen eines Bots mit discord.py

Ich habe einen Clubbat-Management-Bot vor dem Verbinden erstellt, also habe ich das bemerkt. https://github.com/izmktr/yukarisan

Ereignisse on_ready

on_ready wird aufgerufen, wenn eine Verbindung zu Zwietracht hergestellt wird Auch scheint es unregelmäßig von der Zwietracht getrennt zu sein, Es wird auch aufgerufen, wenn Sie die Verbindung automatisch wiederherstellen.

Hier scheint es gut, die Informationen, die Sie intern haben, mit den Daten von discord.py zu kombinieren.

import discord
from discord.ext import tasks
from typing import List, Dict, Optional

#guild_ID mit interner Klasse verknüpfen
guildhash: Optional[Dict[int, GuildData]] = None

@client.event
def on_ready():
global guildhash

if guildhash is None:
#Lastverarbeitung
    guildhash = {}

for g in client.guilds:
    gdata = guildhash.get(g.id)
    if gdata is None:
        gdata = GuildData()
        guildhash[g.id] = gdata
    gdata.guild = g

Verarbeitung, die die Nachricht begleitet

Tritt beim Hinzufügen / Entfernen von Reaktionen auf, Es ist on_reaction_add, on_reaction_remove, kann aber nicht aufgerufen werden. Im Allgemeinen antwortet eine Nachricht etwa 15 Minuten nach dem Posten möglicherweise nicht. (Ich denke, es hängt von der Aktivität des Servers ab) Wahrscheinlich habe ich das Gefühl, dass on_message_delete in diesem Fall nicht fliegt.

Da max_messages 1000 ist, dachte ich, dass es durch Erhöhen vermieden werden könnte, Ich könnte es nicht vermeiden, selbst wenn ich 100000 so setzen würde. (Auf der Suche nach Wissen in diesem Bereich)

#bedeutungslos?
client = discord.Client(max_messages = 100000)

Sie können on_raw_reaction_add und on_raw_reaction_remove verwenden, um sicherzustellen, dass Sie fliegen. Speichern Sie die Nachrichteninformationen mit on_message und verwenden Sie on_raw_reaction_ ~ Es wäre schön, den Prozess zu lösen.

Außerdem wird es in der Reihenfolge on_raw_reaction_add → on_reaction_add aufgerufen. Wenn on_reaction_add hierher fliegt, dachte ich, es wäre on_raw_reaction_add, wenn es nicht fliegen würde. Dieser Vorgang scheint problematisch zu sein, da die Reihenfolge umgekehrt ist.

Privater Chat

Sie können einen privaten Chat mit dem Bot führen, indem Sie eine Nachricht an den Bot senden. Wenn Sie Entwicklungsbefehle verwenden möchten, verwenden Sie den privaten Chat Sie können arbeiten, ohne die Protokolle um Sie herum zu sehen.

@client.event
async def on_message(message):
    #Ignorieren Sie, wenn der Absender der Nachricht Bot ist
    if message.author.bot:
        return

    #Normale Nachricht
    if message.channel.type == discord.ChannelType.text:
        return

    # 1:1 Nachricht
    if message.channel.type == discord.ChannelType.private:
        return

Das Problem ist, dass sich der Nachrichtentyp von dem einer normalen Nachricht unterscheidet Es fehlen also Klassenvariablen und Klassenfunktionen.

Da es in privaten Nachrichten keine Gilde gibt, Sie müssen die Gilde in Ihrer privaten Nachricht angeben.

Wenn Sie es so gestalten, dass es diesen Unterschied aufnimmt und die Verarbeitung für verschiedene Befehle erstellt Es ist eine Überlegung, dass es bequem gewesen wäre.

Recommended Posts

Kenntnisse beim Erstellen eines Bots mit discord.py
Die Geschichte, wie man mit discord.py einen Fragenkasten-Bot erstellt
Ein Memorandum bei der Verwendung von schöner Suppe
Eine süchtig machende Geschichte bei der Verwendung von Tensorflow unter Android
Eine persönlich verwendete Vorlage zum Erstellen von Discord BOT in Python (Notizen)
Ein Memorandum bei der Herstellung einer Überwachungskamera mit Raspeye
Zusammenfassung bei Verwendung von Fabric
Vorsichtsmaßnahmen bei der Verwendung von Chainer
Erstellen Sie einen Slack Bot
Bei Verwendung von JUMAN ++ mit PyKNP ist ein Wertefehler aufgetreten
Ein Hinweis beim Erstellen eines gerichteten Diagramms mit Graphviz in Python
Erstellen Sie mithilfe der Twitter-Streaming-API einen Echtzeit-Bot für die automatische Antwort
Als ich einen Discord Bot gemacht habe, haben meine Klassenkameraden meinen Computer zerstört
Probleme bei der Verwendung von Elasticsearch als Datenquelle in Redash
Verwenden Sie bei Verwendung einer Eigenschaft eine Klasse, die ein Objekt erbt (Klasse neuen Stils).
Lassen Sie uns einen LINE-Bot mit verschiedenen Diensten erstellen [ngrok edition]