[PYTHON] Connaissance lors de la création d'un bot en utilisant discord.py

J'ai créé un bot de gestion de clubbat pré-connecté, alors j'ai remarqué cela. https://github.com/izmktr/yukarisan

Événements on_ready

on_ready est appelé lors de la connexion à discord En outre, il semble être déconnecté de la discorde de manière irrégulière, Il sera également appelé lorsque vous vous reconnecterez automatiquement.

Ici, il semble bon de combiner les informations dont vous disposez en interne avec les données de discord.py.

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

#guild_Lier l'ID avec la classe interne
guildhash: Optional[Dict[int, GuildData]] = None

@client.event
def on_ready():
global guildhash

if guildhash is None:
#Traitement des charges
    guildhash = {}

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

Traitement qui accompagne le message

Se produit lors de l'ajout / suppression de réactions, C'est on_reaction_add, on_reaction_remove, mais il ne peut pas être appelé. En général, un message environ 15 minutes après sa publication peut ne pas répondre. (Je pense que cela dépend de l'activité du serveur) Probablement, j'ai l'impression que on_message_delete ne vole pas lorsque cela se produit.

Puisque max_messages vaut 1000, j'ai pensé que cela pouvait être évité en l'augmentant, Je ne pourrais pas l'éviter même si j'en mets 100000 comme ça. (À la recherche de connaissances dans ce domaine)

#n'a aucun sens?
client = discord.Client(max_messages = 100000)

Vous pouvez utiliser on_raw_reaction_add et on_raw_reaction_remove pour vous assurer de voler. Enregistrez les informations du message avec on_message et utilisez on_raw_reaction_ ~ Ce serait bien de résoudre le processus.

De plus, il est appelé dans l'ordre on_raw_reaction_add → on_reaction_add. Si on_reaction_add vole ici, je pensais que ce serait on_raw_reaction_add s'il ne volait pas, Ce processus semble gênant car l'ordre est inversé.

Discussion privée

Vous pouvez avoir une discussion privée avec le bot en envoyant un message au bot. Si vous souhaitez utiliser des commandes de développement, utilisez le chat privé Vous pouvez travailler sans voir les journaux autour de vous.

@client.event
async def on_message(message):
    #Ignorer si l'expéditeur du message est Bot
    if message.author.bot:
        return

    #Message normal
    if message.channel.type == discord.ChannelType.text:
        return

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

Le problème est que le type de message est différent de celui d'un message normal Il manque donc des variables de classe et des fonctions de classe.

De plus, comme il n'y a pas de guilde dans les messages privés, Vous devez spécifier la guilde dans votre message privé.

Si vous le concevez pour absorber cette différence et créer un traitement pour diverses commandes C'est le reflet que cela aurait été pratique.

Recommended Posts

Connaissance lors de la création d'un bot en utilisant discord.py
L'histoire de la création d'un bot de boîte à questions avec discord.py
Un mémorandum lors de l'utilisation d'une belle soupe
Une histoire addictive lors de l'utilisation de tensorflow sur Android
Un modèle personnellement utilisé pour créer Discord BOT en Python (Notes)
Un mémorandum lors de la réalisation d'une caméra de surveillance avec Raspeye
Résumé lors de l'utilisation de Fabric
Précautions lors de l'utilisation de Chainer
Créer un bot slack
J'ai eu une erreur de valeur lors de l'utilisation de JUMAN ++ avec PyKNP
Une note lors de la création d'un graphe dirigé à l'aide de Graphviz en Python
Créez un robot de réponse automatique en temps réel à l'aide de l'API Twitter Streaming
Quand j'ai créé un Discord Bot, mes camarades de classe ont détruit mon ordinateur
Problèmes lors de l'utilisation d'Elasticsearch comme source de données dans Redash
Lorsque vous utilisez la propriété, utilisez une classe qui hérite d'un objet (classe de style nouveau)
Créons un bot LINE en utilisant divers services [ngrok edition]