Zwietracht in Python

Einführung

Ich werde anhand von Codebeispielen erklären, was ich beim Betrieb des Servers mit Discord implementiert habe. Die verwendete Datei discord.py ist die Umschreibversion.

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("")

Die Vorlage sieht so aus. Schreiben Sie den Prozess, den Sie implementieren möchten, zwischen print ('------') und client.run ("").

Geben Sie einem Neuling eine Rolle und senden Sie eine Nachricht

# ?Wenn Sie auf Join klicken, erhalten Sie eine Position mit dem Namen Mitglied
@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'''Herzlich willkommen{message.author.mention}Herr.
<#657524000993312768>Lesen Sie bitte
<#657105501036740608>Ich wäre Ihnen dankbar, wenn Sie schreiben könnten
'''

        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)

Dieser Prozess erwähnt den Absender der Nachricht und sendet eine Antwort, wenn der Textkanal als "Join" geschrieben ist. Durch Senden einer Antwort und Hinzufügen einer Rolle zu einem neuen Mitglied können Sie verhindern, dass Personen, die keinen? Join gesendet haben, andere Kanäle auf dem Server sehen.

1.png

Die einzige Möglichkeit, dies zu tun, besteht darin, den Systemnachrichtenkanal festzulegen Verbieten Sie @ jedem das Lesen von Nachrichten + erlauben Sie nur das Senden, und verbieten Sie @ jedem, Nachrichten mit anderen Text- und Sprachkanalberechtigungen zu lesen. Zu diesem Zeitpunkt ermöglicht die Autorität der Position des neu beigetretenen Mitglieds (@member hier) das Lesen der Nachricht + nur das Senden. Auf diese Weise wird nur der Systemnachrichtenkanal (#willcome here) als Textkanal für neu verbundene Mitglieder angezeigt. Neue Mitglieder können Text an den Nachrichtenkanal des Systems senden (#welcome), aber den Nachrichtenverlauf nicht sehen. (Sie können nicht sehen, was Sie selbst gesendet haben. Sie können es in der Benachrichtigungsspalte nur sehen, wenn Sie es erwähnen.)

1515.png

1513.png

1514.png

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

Bestimmen Sie, ob die Nachricht "Beitreten" und vom Bot ist, wenn der Absender der Nachricht keine Position hat (neue Personen, die den Server betreten, haben nur die Position "@jeder", sodass sie eine Position haben). Ich habe versucht, eine Nachricht zu senden.

reply = f'''Herzlich willkommen{message.author.mention}Herr.
<#657524000993312768>Lesen Sie bitte
<#657105501036740608>Ich wäre Ihnen dankbar, wenn Sie schreiben könnten
'''

Selbst wenn Sie #Welcome in den Text schreiben, fungiert dieser nicht als Hash-Tag (die Farbe des Textes ändert sich nicht). Wenn Sie also <# text channel ID> in den Text der Nachricht schreiben, die Sie senden möchten, können Sie mit der Hash-Tag-Funktion eine Zeichenfolge erstellen. Sie können es senden.

    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)

Dieser Codeteil ist ein Prozess zum Hinzufügen von Mitternachts- und Anfängerpositionen durch Senden von + Mitternacht und + Anfänger und zum Entfernen dieser Positionen durch Senden von -midnight und -novice. Mit den obigen Einstellungen für die Berechtigung für Textkanäle habe ich einen Textkanal erstellt, in dem nur Mitglieder mit der Anfängerposition angezeigt werden.

Gewähren Sie allen Mitgliedern Positionen

# +Wenn Sie auf Umfrage klicken, erhalten alle Mitglieder eine Umfrageposition.-Positionen mit Umfrage entfernen
    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)

Wenn jemand in diesem Prozess + Umfrage schreibt, erhalten alle Mitglieder außer Bots (Rythm, DISBOARD, Poll Bot) die Umfrageposition. Wir haben einen Textkanal erstellt, in dem nur der Textkanal #Survey Survey angezeigt wird, sodass nur Personen mit der Umfrageposition ihn während der Umfrage anzeigen können. Auf diese Weise können Sie die angezeigten Textkanäle nur dann ausblenden, wenn Sie sie benötigen. Dies vereinfacht die Liste der Textkanäle.

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]):

Hier wird beurteilt, ob es sich um einen Bot handelt, indem geprüft wird, ob der Name des Mitglieds bestimmte Zeichen enthält (in diesem Beispiel Rythm, DISBOARD, Poll Bot).

role = discord.utils.get(message.guild.roles, name='poll')
await message.guild.members[i].add_roles(role)
#Wenn Sie einem Mitglied eine Position zuweisen
await message.guild.members[i].remove_roles(role)
#Wenn Sie eine Position von einem Mitglied einnehmen

Dieser Prozess weist Mitgliedern Positionen zu oder entfernt sie.

Konversationsprotokoll löschen

# ?Geben Sie clean ein, um das Protokoll in dem von Ihnen eingegebenen Textkanal zu löschen
    if message.content == '?clean':
        if message.author.guild_permissions.administrator:
            await message.channel.purge()
            #await message.channel.send('Löschte das Protokoll im Kanal')
        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('Zum Löschen von Protokollen erforderliche Administratorrechte')

Dies ist der Code, der alle Konversationsprotokolle in dem Textkanal löscht, der "Bereinigen" (bis zu 100 gleichzeitig) gesendet hat, wenn der Serveradministrator (nur eine Krone auf jedem Server) "Bereinigen" eingibt.

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

Nur wenn die Nachricht hier für einen bestimmten Kanal gesendet wurde (Kanal-ID 657108629396389889), können Sie das Konversationsprotokoll löschen, auch wenn Sie nicht der Serveradministrator sind.

Recommended Posts

Zwietracht in Python
Quadtree in Python --2
Python in der Optimierung
CURL in Python
Metaprogrammierung mit Python
Python 3.3 mit Anaconda
Geokodierung in Python
SendKeys in Python
Metaanalyse in Python
Unittest in Python
Epoche in Python
Deutsch in Python
DCI in Python
Quicksort in Python
nCr in Python
N-Gramm in Python
Programmieren mit Python
Plink in Python
Konstante in Python
FizzBuzz in Python
SQLite in Python
Schritt AIC in Python
LINE-Bot [0] in Python
CSV in Python
Reverse Assembler mit Python
Reflexion in Python
Konstante in Python
nCr in Python.
Format in Python
Scons in Python 3
Puyopuyo in Python
Python in Virtualenv
PPAP in Python
Quad-Tree in Python
Reflexion in Python
Chemie mit Python
Hashbar in Python
DirectLiNGAM in Python
LiNGAM in Python
In Python reduzieren
In Python flach drücken
Sortierte Liste in Python
Täglicher AtCoder # 36 mit Python
Clustertext in Python
AtCoder # 2 jeden Tag mit Python
Täglicher AtCoder # 32 in Python
Täglicher AtCoder # 6 in Python
Täglicher AtCoder # 18 in Python
Bearbeiten Sie Schriftarten in Python
Dateioperationen in Python
Lesen Sie DXF mit Python
Täglicher AtCoder # 53 in Python
Tastenanschlag in Python
Verwenden Sie config.ini mit Python
Täglicher AtCoder # 33 in Python
Löse ABC168D in Python
Logistische Verteilung in Python
Täglicher AtCoder # 7 in Python