[PYTHON] Introduction à discord.py (2)

introduction

Je lance un serveur non officiel pour discord.py (bien que certains développeurs). Les questions sont également acceptées ici. Vous pouvez également créer une chaîne personnelle et obtenir une assistance pour ** les personnes qui souhaitent une assistance à long terme **. Si vous souhaitez recevoir une assistance personnalisée, veuillez entrer à partir de l'url d'invitation ci-dessous et DM à «@ Sumidora # 8931». https://discord.gg/KPp2Wsu ** Veuillez également poser des questions sur cet article ici **

À propos de cet article

Cet article est une étude étape par étape de discord.py. Vous apprendrez d'abord la méthode d'écriture de base, puis vous apprendrez le contenu avancé. 【séries】

Présentation de discord.py (1) Présentation de discord.py (2)

Mise en garde

** Cet article est destiné aux personnes qui peuvent même faire un peu de Python. ** ** Cependant, vous pouvez l'utiliser simplement en le copiant, mais vous ne pourrez plus l'écrire après cela, donc si vous souhaitez créer plus de fonctions individuelles, Il est recommandé d'étudier en utilisant des livres, l'apprentissage de paiza, l'installation de points, Progate et Manuel de l'Université de Kyoto. Je vais. Le livre que je recommande est le [Python Startbook] de Shingo Tsuji (https://www.amazon.co.jp/Python Startbook-Augmented Revised Edition-Tsuji-Shingo / dp / 4774196436 /).

L'environnement d'exploitation de l'auteur

Python 3.8.0 Mac OS Catalina 10.15.2 discord.py-1.3.2

Utiliser divers événements

La dernière fois, j'ai annoncé qu'il y avait de nombreux événements dans discord.py. En plus des ʻon_ready et ʻon_message utilisés la dernière fois, nous présenterons des événements majeurs. (Ce qui est écrit entre parenthèses est un argument.) ** Une explication détaillée sera introduite au moment de la comparution **

Sur la façon d'écrire

Ecrire comme List \ [discord.Reaction] signifie une liste qui contient discord.Reaction.

Nom de l'événement Contenu Remarques
on_message(message) Le message a été envoyé
on_message_delete(message) Message supprimé Je ne sais pas qui l'a supprimé.En outre, il n'est pas appelé en supprimant le message avant le démarrage du bot.
on_message_edit(before, after) Message mis à jour Non appelé par la mise à jour du message avant le démarrage du bot.
on_reaction_add(reaction, user) La réaction était attachée Non appelé en ajoutant au message avant le démarrage du bot.
on_reaction_remove(reaction, user) Réaction supprimée Non appelé en supprimant le message avant le démarrage du bot.
on_member_join(member) L'utilisateur est entré dans le serveur
on_member_remove(member) L'utilisateur quitte le serveur
on_voice_state_update(member, before, after) L'état de la voix a changé Appelé lors de l'entrée, de la sortie ou de la mise en sourdine d'un canal vocal

A titre d'exemple, voici le code qui envoie le contenu au canal configuré lorsque le message est supprimé:

import discord
client = discord.Client()


@client.event
async def on_message_delete(message):
    channel = client.get_channel(DEBUG_CHANNEL_ID)
    await channel.send(f"{message.author.name}Le message a été supprimé:\n```\n{message.content}\n```")


client.run(TOKEN)

Modifier les paramètres du serveur

Discord.py représente le serveur dans la classe discord.Guild. En acquérant cela à l'aide du client, diverses modifications peuvent être apportées.

Quoi apprendre dans ce chapitre

Obtenez le serveur

Obtenir de l'identifiant

Utilisez les fonctions Client.get_guild ou Client.fetch_guild. Dans le cas normal, utilisez la fonction get_guild.

# get_guild
guild = client.get_guild(GUILD_ID)

# fetch_guild
guild = await client.fetch_guild(GUILD_ID)

Obtenir du nom

Pour l'obtenir à partir du nom, utilisez la fonction get dans discord.utils.

guild = discord.utils.get(client.guilds, name="Nom")

** Veuillez noter que cela ne renverra que le premier même s'il porte le même nom **

Modifier les paramètres du serveur

La configuration du serveur est très longue, je ne vous montrerai donc que la principale.

Renommer

Si vous souhaitez changer le nom, etc. dans discord.Guild, utilisez la fonction d'édition.

#Suite ci-dessus
await guild.edit(name="Nouveau nom")

Changer la description

Changez la description.

#Suite ci-dessus
await guild.edit(description="Ceci est une note descriptive Ceci est une note descriptive Ceci est une note descriptive Ceci est une note descriptive")

icône de changement

Vous pouvez spécifier des octets pour l'icône.

#Suite ci-dessus

#Faire d'un fichier local une icône
with open("test.png ", "rb") as f:
    await guild.edit(icon=f.getvalue())

Donnez une raison au changement

Ces modifications restent dans le journal système, mais vous pouvez définir la raison de leur affichage à ce moment-là.

#Suite ci-dessus

await guild.edit(name="Ski Room Madomagi", reason="Je l'ai fait dans l'ambiance,Je ne reflétais pas")

Tout changer à la fois

Tous les changements mentionnés ci-dessus peuvent être effectués en une seule fois.

#Suite ci-dessus

await guild.edit(name="Ski Room Madomagi", description="Un serveur où se rassemblent les gens qui aiment Madomagi.", reason="Je l'ai fait dans l'ambiance,Je ne reflétais pas")

Modifier les paramètres de la chaîne

Les principales classes qui représentent les canaux dans discord.py sont discord.CategoryChannel, discord.TextChannel, discord.VoiceChannel. En acquérant cela en utilisant Client ou Guild, diverses modifications peuvent être apportées.

Quoi apprendre dans ce chapitre

Obtenez la chaîne

Obtenir de l'identifiant

Utilisez la fonction Client.get_channel ou les fonctions Client.fetch_channel, Guild.get_channel. La fonction get_channel est généralement utilisée.

channel = guild.get_channel(CHANNEL_ID)

Obtenir du nom

Pour l'obtenir à partir du nom, utilisez la fonction get dans discord.utils. Dans ce cas, vous devez également faire attention au type de canal. Utilisez correctement guild.channels, guild.text_channels, guild.voice_channels, guild.categories.

Lors de l'acquisition à partir du canal de texte

Utilisez guild.text_channels.

channel = discord.utils.get(guild.text_channels, name="Nom")

Lors de l'acquisition à partir du canal vocal

Utilisez guild.voice_channels.

channel = discord.utils.get(guild.voice_channels, name="Nom")

Lors de l'acquisition de la catégorie

Utilisez guild.categories.

channel = discord.utils.get(guild.categories, name="Nom")

En obtenant de tout

Utilisez guild.channels.

channel = discord.utils.get(guild.channels, name="Nom")

Modifier les paramètres de la chaîne

Les paramètres des canaux sont très longs, je ne montrerai donc que les principaux.

Canal de texte

Renommer

Nom d'utilisation.

await channel.edit(name="New Name")

Changer de sujet

Utilisez le sujet.

await channel.edit(topic="topictopictopictopictoping")

Changer de lieu

utiliser la position

await channel.edit(position=2)

Changer de catégorie

Utilisez la catégorie.

#Définir la catégorie
category_channel = client.get_channel(CATEGORY_CHANNEL_ID)
await channel.edit(category=category_channel)

#Supprimer la catégorie
await channel.edit(category=None)

Tout changer à la fois

Tous les changements mentionnés ci-dessus peuvent être effectués en une seule fois.

await channel.edit(name="Remarquer", topic="運営からのRemarquerを載せます.", category=None)

Changer le réglage de la position

C'est la classe discord.Role qui représente la position dans discord.py. En obtenant cela de la guilde, vous pouvez apporter divers changements. ** Les modifications d'autorisation seront introduites dans un chapitre ultérieur **

Quoi apprendre dans ce chapitre

――Diverses méthodes de réglage des positions

Obtenez un poste

Obtenir de l'identifiant

Utilisez la fonction discord.Guild.get_role.

guild = message.guild
role = guild.get_role(ROLE_ID)

Obtenir du nom

Pour l'obtenir à partir du nom, utilisez la fonction get dans discord.utils.

guild = message.guild
role = discord.utils.get(guild.roles, name="Nom")

** Veuillez noter que cela ne renverra que le premier même s'il porte le même nom **

Renommer

Utilisez la fonction d'édition pour changer le nom, la couleur, etc. dans Discord.Role.

#Suite ci-dessus

#Renommer
await role.edit(name="Nouveau nom")

Changer de couleur

Utilisez discord.Color pour changer la couleur. discord.Colour a une fonction pour chaque couleur, et vous pouvez également l'utiliser.

#Suite ci-dessus

#Lors de l'utilisation de RVB
await role.edit(colour=discord.Colour.from_rgb(256, 256, 256))

#Lors de l'utilisation de hsv(H,S,Donnez à chaque V une valeur comprise entre 0 et 1)
await role.edit(colour=discord.Colour.from_hsv(0, 0, 1))

#Lors de l'utilisation d'une fonction
await role.edit(colour=discord.Colour.blue())

Changer de position

Lors du changement de position, il est nécessaire de mettre la valeur numérique de la position dans l'argument de position. Puisque 0 est @everyone, vous devez en choisir 1 ou plus. Il monte dans l'ordre de 1.

#Suite ci-dessus

await role.edit(position=1)

Donnez une raison au changement

Ces modifications restent dans le journal système, mais vous pouvez définir la raison de leur affichage à ce moment-là.

#Suite ci-dessus

await role.edit(position=1, reason="Je l'ai fait dans l'ambiance,Je ne reflétais pas")

Tout changer à la fois

Tous les changements mentionnés ci-dessus peuvent être effectués en une seule fois.

await role.edit(name="Verdoyant", colour=discord.Colour.green(), position=1, reason="Je l'ai fait dans l'ambiance,Je ne reflétais pas")

Modifier les autorisations

Étudiez dans cette section

Classes autour des permissions de discord.py

Les classes autour des autorisations de discord.py sont discord.Permissions et discord.PermissionOverWrite. Chacun de ces éléments est lié à l'autorisation de la position de discorde et des paramètres par canal.

Pour les valeurs qui peuvent être définies pour chaque élément, Permission peut uniquement être activée et désactivée, tandis que PermissionOverWrite peut être "non défini" en plus de activé et désactivé (s'il n'est pas défini, des paramètres d'autorisation plus élevés, par exemple, s'il s'agit d'un canal de texte, appartiennent Hériter des paramètres du canal de catégorie à définir).

En outre, il existe une différence entre les deux: Permissions écrase tout (sauf ce que vous ne spécifiez pas sera changé), tandis que PermissionOverWrite écrase uniquement ce que vous spécifiez.

# overwrite
overwrite = discord.PermissionOverWrite()
overwrite.read_messages = True
overwrite.manage_messages = False
overwrite.send_messages = None  #Aucun ne peut être défini avec écrasement

# permissions
permissions = discord.Permissions()
permissions.read_messages = True
permissions.manage_messages = False
# permissions.send_messages = None #Aucun ne peut être défini

Changer l'autorité d'un poste

Dans discord.py, la position est discord.Role. Tout d'abord, vous devez l'obtenir de la guilde.

Obtenir de l'identifiant

Utilisez la fonction discord.Guild.get_role.

guild = message.guild
role = guild.get_role(ROLE_ID)

Obtenir du nom

Pour l'obtenir à partir du nom, utilisez la fonction get dans discord.utils.

guild = message.guild
role = discord.utils.get(guild.roles, name="Nom")

** Veuillez noter que cela ne renverra que le premier même s'il porte le même nom **

Obtenez l'autorisation de la destination de changement

Pour modifier les autorisations, vous devez créer une nouvelle classe discord.Permissions. Ici, utilisez les autorisations du rôle une fois obtenues pour éviter des modifications inutiles.

guild = message.guild
role = discord.utils.get(guild.roles, name="everyone")
#Obtenez des autorisations
permissions = role.permissions

Pour modifier la valeur de discord.Permissions, vous devez mettre Allow = True ou Prohibit = False dans la variable correspondant au nom de l'autorisation.

#Continué un niveau au-dessus

# @Faire battre tout le monde
permissions.mention_everyone = False

#Ajouter une autorisation de modification pour les emoji
permissions.manage_emojis = True

Créer de nouvelles autorisations

Si vous voulez en créer un nouveau, vous pouvez le créer en définissant permissions = discord.Permissions ().

changement

Pour refléter cela dans discord.Role, utilisez la fonction discord.Role.edit (** fonction co-routine **) Comme je l'ai fait la dernière fois, avec la fonction d'édition, vous pouvez définir le nom, la couleur, s'il est affiché séparément de tout le monde et la position.

#Suite ci-dessus

await role.edit(permissions=permissions)

Modifier les autorisations de la chaîne

Modifiez les autorisations de canal à l'aide de set_permissions.

Lors de la définition directe des autorisations

Vous pouvez modifier les autorisations d'un utilisateur ou d'un poste à l'aide de la commande set_permissions.

channel = client.get_channel(CHANNEL_ID)
#Obtenez le membre cible
member = channel.guild.get_member(MEMBER_ID)

#changement
await channel.set_permissions(member, send_messages=False)

Lors de l'utilisation de PermissionOverWrite

Vous pouvez utiliser PermissionOverWrite pour définir la conformité sur le paramètre Aucun = catégorie.

channel = client.get_channel(CHANNEL_ID)
#Obtenez la position cible
role = discord.utils.get(channel.guild.roles, name="everyone")

overwrite = discord.PermissionOverWrite()
overwrite.send_messages = False
overwrite.read_messages = None

#changement
await channel.set_permissions(role, overwrite=overwrite)

Créer une chaîne

Quoi apprendre dans ce chapitre

--Comment créer une chaîne

Comment créer un canal de texte

Pour créer un canal de texte, utilisez la fonction discord.Guild.create_text_channel ou discord.CategoryChannel.create_text_channel. Si vous utilisez discord.CategoryChannel.create_text_channel, il appartiendra automatiquement à la catégorie parente. Dans discord.Guild.create_text_channel, vous devez le définir vous-même. Vous pouvez également définir des autorisations ensemble, mais vous ne pouvez utiliser que PermissionOverWrite. Lors de la définition des autorisations

{
Poste ou membre désigné- :PermissionOverWrite correspondante,
    guild.me :PermissionOverWrite correspondante
}

Utilisez-le comme ça.

# discord.Guild.create_text_utiliser le canal
guild = client.get_guild(GUIILD_ID)
# @Tout le monde ne peut pas parler, mais je peux
overwrites = {guild.default_role: discord.PermissionOverWrite(send_messages=False),
              guild.me: discord.PermissionOverWrite(send_messages=True)
}
new_channel = await guild.create_text_channel(name="Remarquer", overwrites=overwrites, topic="Remarquerを表示します。")
print(f"#{new_channel.name}est créé.")

La valeur de retour de create_text_channel est le canal nouvellement créé.

Comment créer un canal vocal

C'est fondamentalement la même chose qu'un canal de texte, mais sans sujet ni paramètres de mode lent.

# discord.Guild.create_voice_utiliser le canal
category = client.get_channel(CATEGORY_ID)
await category.create_voice_channel(name="Chat vocal")

Comment créer une catégorie

Seuls le nom et les autorisations peuvent être définis ici. De plus, il n'y a que discord.Guild.create_category.

guild = client.get_guild(GUIILD_ID)
# @Je ne peux pas voir tout le monde, mais je peux voir
overwrites = {guild.default_role: discord.PermissionOverWrite(read_messages=False),
              guild.me: discord.PermissionOverWrite(read_messages=True)
}
await guild.create_category(name="Pour l'opération", overwrites=overwrites)

À la fin

Comment était-ce si loin? Cette fois, j'ai expliqué comment écrire en le divisant entre comment utiliser les événements avancés, comment modifier les paramètres et comment créer des canaux. Dans le prochain article, nous verrons comment attendre une entrée et comment se connecter à un canal vocal et lire de l'audio. Eh bien. Le prochain article est produit de bonne foi.

Recommended Posts

Introduction à discord.py (2)
Introduction à discord.py (3) Utilisation de la voix
Introduction à MQTT (Introduction)
Introduction à Scrapy (1)
Introduction à Scrapy (3)
Premiers pas avec Supervisor
Introduction à Scrapy (2)
[Linux] Introduction à Linux
Introduction à discord.py (1er jour) -Préparation pour discord.py-
Introduction à Lightning Pytorch
Premiers pas avec le Web Scraping
Introduction à EV3 / MicroPython
Introduction au langage Python
Introduction à la reconnaissance d'image TensorFlow
Introduction à OpenCV (python) - (2)
Introduction à PyQt4 Partie 1
Introduction à l'injection de dépendances
Introduction à Private Chainer
Introduction à l'apprentissage automatique
AOJ Introduction à la programmation Sujet 1, Sujet 2, Sujet 3, Sujet 4
Introduction au module de papier électronique
Introduction à l'algorithme de recherche de dictionnaire
Introduction à la méthode Monte Carlo
[Mémorandum d'apprentissage] Introduction à vim
Introduction à PyTorch (1) Différenciation automatique
opencv-python Introduction au traitement d'image
Introduction à Python Django (2) Win
Introduction à l'écriture de Cython [Notes]
Introduction à Private TensorFlow
Une introduction à l'apprentissage automatique
[Introduction à cx_Oracle] Présentation de cx_Oracle
Une super introduction à Linux
introduction
AOJ Introduction à la programmation Sujet n ° 7, Sujet n ° 8
Introduction à la détection des anomalies 1 principes de base
Introduction à RDB avec sqlalchemy Ⅰ
[Introduction au système] Retracement de Fibonacci ♬
Introduction à l'optimisation non linéaire (I)
Introduction à la communication série [Python]
AOJ Introduction à la programmation Sujet n ° 5, Sujet n ° 6
Introduction au Deep Learning ~ Règles d'apprentissage ~
[Introduction à Python] <liste> [modifier le 22/02/2020]
Introduction à Python (version Python APG4b)
Une introduction à la programmation Python
[Introduction à cx_Oracle] (8e) version de cx_Oracle 8.0
Introduction à l'optimisation bayésienne
Apprentissage par renforcement profond 1 Introduction au renforcement de l'apprentissage
Super introduction à l'apprentissage automatique
Introduction à Ansible Part «Inventaire»
Série: Introduction à cx_Oracle Contents
[Introduction] Comment utiliser open3d
Introduction à Python pour, pendant
Introduction au Deep Learning ~ Rétropropagation ~
Introduction à Ansible Part ④'Variable '
Introduction à la commande vi (Remarque)
Introduction facile au piratage domestique avec Raspberry Pi et discord.py