Discord en Python

introduction

J'expliquerai ce que j'ai implémenté lors de l'exploitation du serveur en utilisant Discord avec des exemples de code. Le discord.py utilisé est la version de réécriture.

import discord

client = discord.Client()
@client.event
async def on_ready():
    print('Logged in as')
    print(client.user.name)
    print(client.user.id)
    print('------')

client.run("")

Le modèle ressemble à ceci. Écrivez le processus que vous souhaitez implémenter entre print ('------') et client.run ("").

Donnez un rôle à un nouveau venu et envoyez un message

# ?Frapper join vous donnera un poste nommé membre
@client.event
async def on_message(message):
    if message.content == '?join' and len(message.author.roles) == 1:
        role = discord.utils.get(message.guild.roles, name='member')
        await message.author.add_roles(role)
        reply = f'''Bienvenue{message.author.mention}M.
<#657524000993312768>Lisez s'il vous plaît
<#657105501036740608>Je serais heureux si tu pouvais écrire
'''

        await message.channel.send(reply)
    elif message.content == '+midnight':
        role = discord.utils.get(message.guild.roles, name='midnight')
        await message.author.add_roles(role)
    elif message.content == '-midnight':
        role = discord.utils.get(message.guild.roles, name='midnight')
        await message.author.remove_roles(role)
    elif message.content == '+novice':
        role = discord.utils.get(message.guild.roles, name='novice')
        await message.author.add_roles(role)
    elif message.content == '-novice':
        role = discord.utils.get(message.guild.roles, name='novice')
        await message.author.remove_roles(role)

Ce processus mentionne l'expéditeur du message et envoie une réponse lorsque le canal de texte est écrit comme? Join. En envoyant une réponse et en ajoutant un rôle à un nouveau membre, vous pouvez empêcher les personnes qui n'ont pas envoyé de? Join de voir d'autres chaînes sur le serveur.

1.png

La seule façon de procéder est de définir le canal de message système Interdire à @everyone de lire des messages + autoriser uniquement l'envoi et interdire à @everyone de lire des messages avec d'autres autorisations de canal texte et vocal. A ce moment, l'autorité du poste de membre nouvellement rejoint (@member ici) permet de lire le message + seulement l'envoyer. Ce faisant, seul le canal de messagerie système (#welcome ici) sera affiché comme canal de texte pour les nouveaux membres. Les nouveaux membres peuvent envoyer du texte au canal de messagerie du système (#welcome), mais ne peuvent pas voir l'historique des messages. (Vous ne pouvez pas voir ce que vous avez envoyé vous-même. Vous ne pouvez le voir dans la colonne de notification que lorsque vous le mentionnez.)

1515.png

1513.png

1514.png

if message.content == '?join' and len(message.author.roles) == 1:

Déterminez si le message est? Rejoignez et du bot si l'expéditeur du message n'a pas de position (les nouvelles personnes qui entrent sur le serveur n'ont que la position @everyone, elles ont donc une position) J'ai essayé d'envoyer un message.

reply = f'''Bienvenue{message.author.mention}M.
<#657524000993312768>Lisez s'il vous plaît
<#657105501036740608>Je serais heureux si tu pouvais écrire
'''

Même si vous écrivez #Welcome dans le texte, il ne fonctionnera pas comme une balise de hachage (la couleur du texte ne changera pas), donc en écrivant <# ID de canal de texte> dans le texte du message que vous souhaitez envoyer, vous pouvez créer une chaîne de caractères avec la fonction de balise de hachage. Vous pouvez l'envoyer.

    await message.channel.send(reply)
elif message.content == '+midnight':
    role = discord.utils.get(message.guild.roles, name='midnight')
    await message.author.add_roles(role)
elif message.content == '-midnight':
    role = discord.utils.get(message.guild.roles, name='midnight')
    await message.author.remove_roles(role)
elif message.content == '+novice':
    role = discord.utils.get(message.guild.roles, name='novice')
    await message.author.add_roles(role)
elif message.content == '-novice':
    role = discord.utils.get(message.guild.roles, name='novice')
    await message.author.remove_roles(role)

Cette partie de code est un processus pour ajouter les positions minuit et novice en envoyant + minuit et + novice, et pour les supprimer en envoyant -midnight et -novice. En utilisant les paramètres d'autorisation de canal de texte ci-dessus, j'ai créé un canal de texte qui n'affiche que les membres avec la position novice.

Accorder des postes à tous les membres

# +Si vous appuyez sur sondage, tous les membres recevront une position de vote.-Supprimer des positions avec un sondage
    if message.content == '+poll':
        for i in range(len(message.guild.members)):
            if 'Rythm' in str(message.guild.members[i]) or 'DISBOARD' in str(message.guild.members[i]) or 'Poll Bot' in str(message.guild.members[i]):
                print('YES')
            else:
                print('NO')
                print(message.guild.members[i])

                role = discord.utils.get(message.guild.roles, name='poll')
                await message.guild.members[i].add_roles(role)

    if message.content == '-poll':
        for i in range(len(message.guild.members)):
            if 'Rythm' in str(message.guild.members[i]) or 'DISBOARD' in str(message.guild.members[i]) or 'Poll Bot' in str(message.guild.members[i]):
                print('YES')
            else:
                print('NO')
                print(message.guild.members[i])

                role = discord.utils.get(message.guild.roles, name='poll')
                await message.guild.members[i].remove_roles(role)

Quand quelqu'un écrit + sondage dans ce processus, tous les membres sauf les bots (Rythm, DISBOARD, Poll Bot) reçoivent la position du sondage. Nous avons créé un canal de texte qui n'affiche que le canal de texte appelé #Survey Survey afin que seules les personnes ayant la position de sondage puissent l'afficher pendant l'enquête. Cela vous permet de masquer les canaux de texte affichés sauf lorsque vous en avez besoin, ce qui simplifie la liste des canaux de texte.

if 'Rythm' in str(message.guild.members[i]) or 'DISBOARD' in str(message.guild.members[i]) or 'Poll Bot' in str(message.guild.members[i]):

Ici, il est jugé s'il s'agit d'un bot en vérifiant si le nom du membre contient des caractères spécifiques (Rythm, DISBOARD, Poll Bot dans cet exemple).

role = discord.utils.get(message.guild.roles, name='poll')
await message.guild.members[i].add_roles(role)
#Lors de l'attribution d'un poste à un membre
await message.guild.members[i].remove_roles(role)
#Lors de la prise de position d'un membre

Ce processus attribue ou supprime des postes aux membres.

Supprimer le journal des conversations

# ?Tapez clean pour effacer le journal dans le canal de texte que vous avez tapé
    if message.content == '?clean':
        if message.author.guild_permissions.administrator:
            await message.channel.purge()
            #await message.channel.send('Supprimé le journal dans le canal')
        elif message.channel.id == 657108629396389889:
            print("YES")
            print(message.channel.id)
            await message.channel.purge()
        else:
            print("NO")
            print(message.channel.id)
            await message.channel.send('Privilèges d'administrateur requis pour supprimer les journaux')

C'est le code qui supprime tous les journaux de conversation dans le canal de texte qui ont envoyé? Nettoyer (jusqu'à 100 à la fois) lorsque l'administrateur du serveur (un seul affichage de la couronne sur chaque serveur) tape? Nettoyer.

elif message.channel.id == 657108629396389889:
  print("YES")
  print(message.channel.id)
  await message.channel.purge()

Uniquement si le message a été envoyé ici pour un canal spécifique (ID de canal 65718629396389889), vous pouvez supprimer le journal des conversations même si vous n'êtes pas l'administrateur du serveur.

Recommended Posts

Discord en Python
Quadtree en Python --2
Python en optimisation
CURL en Python
Métaprogrammation avec Python
Python 3.3 avec Anaconda
Géocodage en python
SendKeys en Python
Méta-analyse en Python
Unittest en Python
Époque en Python
Allemand en Python
DCI en Python
tri rapide en python
nCr en python
N-Gram en Python
Programmation avec Python
Plink en Python
Constante en Python
FizzBuzz en Python
Sqlite en Python
Étape AIC en Python
LINE-Bot [0] en Python
CSV en Python
Assemblage inversé avec Python
Réflexion en Python
Constante en Python
nCr en Python.
format en python
Scons en Python 3
Puyopuyo en python
python dans virtualenv
PPAP en Python
Quad-tree en Python
Réflexion en Python
Chimie avec Python
Hashable en Python
DirectLiNGAM en Python
LiNGAM en Python
Aplatir en Python
Aplatir en python
Liste triée en Python
AtCoder # 36 quotidien avec Python
Texte de cluster en Python
AtCoder # 2 tous les jours avec Python
Daily AtCoder # 32 en Python
Daily AtCoder # 6 en Python
Daily AtCoder # 18 en Python
Modifier les polices en Python
Opérations sur les fichiers en Python
Lire DXF avec python
Daily AtCoder # 53 en Python
Séquence de touches en Python
Utilisez config.ini avec Python
Daily AtCoder # 33 en Python
Résoudre ABC168D en Python
Distribution logistique en Python
AtCoder # 7 tous les jours avec Python