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 **
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)
** 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 /).
Python 3.8.0 Mac OS Catalina 10.15.2 discord.py-1.3.2
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 **
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)
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.
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)
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 **
La configuration du serveur est très longue, je ne vous montrerai donc que la principale.
Si vous souhaitez changer le nom, etc. dans discord.Guild, utilisez la fonction d'édition.
#Suite ci-dessus
await guild.edit(name="Nouveau nom")
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")
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())
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")
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")
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.
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)
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
.
Utilisez guild.text_channels
.
channel = discord.utils.get(guild.text_channels, name="Nom")
Utilisez guild.voice_channels
.
channel = discord.utils.get(guild.voice_channels, name="Nom")
Utilisez guild.categories
.
channel = discord.utils.get(guild.categories, name="Nom")
Utilisez guild.channels
.
channel = discord.utils.get(guild.channels, name="Nom")
Les paramètres des canaux sont très longs, je ne montrerai donc que les principaux.
Nom d'utilisation.
await channel.edit(name="New Name")
Utilisez le sujet.
await channel.edit(topic="topictopictopictopictoping")
utiliser la position
await channel.edit(position=2)
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)
Tous les changements mentionnés ci-dessus peuvent être effectués en une seule fois.
await channel.edit(name="Remarquer", topic="運営からのRemarquerを載せます.", category=None)
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 **
――Diverses méthodes de réglage des positions
Utilisez la fonction discord.Guild.get_role.
guild = message.guild
role = guild.get_role(ROLE_ID)
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 **
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")
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())
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)
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")
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")
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
Dans discord.py, la position est discord.Role. Tout d'abord, vous devez l'obtenir de la guilde.
Utilisez la fonction discord.Guild.get_role.
guild = message.guild
role = guild.get_role(ROLE_ID)
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 **
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
Si vous voulez en créer un nouveau, vous pouvez le créer en définissant permissions = discord.Permissions ()
.
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)
Modifiez les autorisations de canal à l'aide de set_permissions.
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)
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)
--Comment créer une chaîne
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éé.
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")
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)
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