[PYTHON] Einführung in discord.py (2)

Einführung

Ich betreibe einen inoffiziellen Server für discord.py (obwohl einige Entwickler). Fragen werden auch hier akzeptiert. Sie können auch einen persönlichen Kanal erstellen und dort Unterstützung für ** Personen erhalten, die langfristige Unterstützung ** wünschen. Wenn Sie persönliche Unterstützung erhalten möchten, geben Sie bitte über die unten stehende Einladungs-URL und DM an "@ Sumidora # 8931" ein. https://discord.gg/KPp2Wsu ** Bitte stellen Sie hier auch Fragen zu diesem Artikel **

Über diesen Artikel

Dieser Artikel ist eine schrittweise Untersuchung von discord.py. Zuerst lernen Sie die grundlegende Schreibmethode und dann den fortgeschrittenen Inhalt. 【Serie】

Einführung in discord.py (1) Einführung in discord.py (2)

Hinweis

** Dieser Artikel ist für Leute, die sogar ein wenig Python können. ** ** ** Sie können es jedoch nur durch Kopieren verwenden. Danach können Sie es jedoch nicht mehr schreiben. Wenn Sie also mehr individuelle Funktionen erstellen möchten, Es wird empfohlen, mit Büchern, Paiza-Lernen, Punktinstallation, Progate und Lehrbuch der Universität Kyoto zu lernen. Ich werde. Das Buch, das ich empfehle, ist Shingo Tsujis [Python Startbook](https://www.amazon.co.jp/Python Startbook-Augmented Revised Edition-Tsuji-Shingo / dp / 4774196436 /).

Die Betriebsumgebung des Autors

Python 3.8.0 Mac OS Catalina 10.15.2 discord.py-1.3.2

Verwenden Sie verschiedene Ereignisse

Das letzte Mal habe ich vorgestellt, dass es in discord.py viele Ereignisse gibt. Zusätzlich zu den zuletzt verwendeten "on_ready" und "on_message" werden wir wichtige Ereignisse vorstellen. (Was in Klammern steht, ist ein Argument.) ** Eine ausführliche Erklärung wird zum Zeitpunkt des Erscheinens eingeführt **

Über das Schreiben

Schreiben wie List \ [discord.Reaction] bedeutet eine Liste, die discord.Reaction enthält.

Veranstaltungsname Inhalt Bemerkungen
on_message(message) Nachricht wurde gesendet
on_message_delete(message) Nachricht gelöscht Ich weiß nicht, wer es gelöscht hat.Es wird auch nicht aufgerufen, indem die Nachricht gelöscht wird, bevor der Bot startet.
on_message_edit(before, after) Nachricht aktualisiert Wird nicht durch Nachrichtenaktualisierung aufgerufen, bevor der Bot startet.
on_reaction_add(reaction, user) Die Reaktion war angebracht Wird nicht aufgerufen, indem der Nachricht hinzugefügt wird, bevor der Bot startet.
on_reaction_remove(reaction, user) Reaktion gelöscht Wird nicht durch Löschen einer Nachricht aufgerufen, bevor der Bot startet.
on_member_join(member) Der Benutzer hat den Server betreten
on_member_remove(member) Benutzer verlässt den Server
on_voice_state_update(member, before, after) Sprachstatus geändert Wird beim Betreten, Verlassen oder Stummschalten eines Sprachkanals aufgerufen

Hier ist als Beispiel der Code, der den Inhalt an den konfigurierten Kanal sendet, wenn die Nachricht gelöscht wird:

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}Nachricht wurde gelöscht:\n```\n{message.content}\n```")


client.run(TOKEN)

Ändern Sie die Servereinstellungen

Die Datei discord.py repräsentiert den Server in der Klasse discord.Guild. Durch den Erwerb über den Client können verschiedene Änderungen vorgenommen werden.

Was Sie in diesem Kapitel lernen sollten

Holen Sie sich den Server

Holen Sie sich von ID

Verwenden Sie die Funktionen Client.get_guild oder Client.fetch_guild. Verwenden Sie im Normalfall die Funktion get_guild.

# get_guild
guild = client.get_guild(GUILD_ID)

# fetch_guild
guild = await client.fetch_guild(GUILD_ID)

Holen Sie sich vom Namen

Verwenden Sie die Funktion get in discord.utils, um den Namen zu ermitteln.

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

** Bitte beachten Sie, dass nur der erste zurückgegeben wird, auch wenn er denselben Namen hat **

Ändern Sie die Servereinstellungen

Das Server-Setup ist sehr lang, daher zeige ich Ihnen nur das Haupt-Setup.

Umbenennen

Wenn Sie den Namen usw. in discord.Guild ändern möchten, verwenden Sie die Bearbeitungsfunktion.

#Fortsetzung oben
await guild.edit(name="Neuer Name")

Ändern Sie die Beschreibung

Ändern Sie die Beschreibung.

#Fortsetzung oben
await guild.edit(description="Dies ist eine beschreibende Notiz. Dies ist eine beschreibende Notiz. Dies ist eine beschreibende Notiz. Dies ist eine beschreibende Notiz")

Icon ändern

Sie können Bytes für das Symbol angeben.

#Fortsetzung oben

#Machen Sie eine lokale Datei zu einem Symbol
with open("test.png ", "rb") as f:
    await guild.edit(icon=f.getvalue())

Geben Sie einen Grund für die Änderung an

Diese Änderungen verbleiben im Systemprotokoll, Sie können jedoch den Grund für die Anzeige zu diesem Zeitpunkt festlegen.

#Fortsetzung oben

await guild.edit(name="Madomagi Skiraum", reason="Ich habe es in der Stimmung gemacht,Ich habe nicht nachgedacht")

Ändern Sie alles auf einmal

Alle oben genannten Änderungen können auf einmal vorgenommen werden.

#Fortsetzung oben

await guild.edit(name="Madomagi Skiraum", description="Ein Server, auf dem sich Leute versammeln, die Madomagi mögen.", reason="Ich habe es in der Stimmung gemacht,Ich habe nicht nachgedacht")

Kanaleinstellungen ändern

Die Hauptklassen, die Kanäle in discord.py darstellen, sind discord.CategoryChannel, discord.TextChannel, discord.VoiceChannel. Durch den Erwerb über den Kunden oder die Gilde können verschiedene Änderungen vorgenommen werden.

Was Sie in diesem Kapitel lernen sollten

Holen Sie sich den Kanal

Holen Sie sich von ID

Verwenden Sie die Funktionen Client.get_channel oder Client.fetch_channel, Guild.get_channel. Die Funktion get_channel wird normalerweise verwendet.

channel = guild.get_channel(CHANNEL_ID)

Holen Sie sich vom Namen

Verwenden Sie die Funktion get in discord.utils, um den Namen zu ermitteln. In diesem Fall müssen Sie auch auf die Art des Kanals achten. Verwenden Sie "guild.channels", "guild.text_channels", "guild.voice_channels" und "guild.categories" richtig.

Beim Erwerb aus dem Textkanal

Benutze guild.text_channels.

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

Beim Erfassen vom Sprachkanal

Benutze guild.voice_channels.

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

Beim Erwerb aus der Kategorie

Verwenden Sie "guild.categories".

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

Wenn man von allen kommt

Benutze guild.channels.

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

Kanaleinstellungen ändern

Die Kanaleinstellungen sind sehr lang, daher werde ich nur die wichtigsten anzeigen.

Textkanal

Umbenennen

Verwenden Sie den Namen.

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

Thema wechseln

Thema verwenden.

await channel.edit(topic="topictopictopictopictoping")

Den Ort wechseln

Position verwenden

await channel.edit(position=2)

Kategorie ändern

Kategorie verwenden.

#Kategorie einstellen
category_channel = client.get_channel(CATEGORY_CHANNEL_ID)
await channel.edit(category=category_channel)

#Kategorie entfernen
await channel.edit(category=None)

Ändern Sie alles auf einmal

Alle oben genannten Änderungen können auf einmal vorgenommen werden.

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

Ändern Sie die Positionseinstellung

Die discord.py-Klasse repräsentiert die Position. Indem du dies von der Gilde erhältst, kannst du verschiedene Änderungen vornehmen. ** Berechtigungsänderungen werden in einem späteren Kapitel vorgestellt **

Was Sie in diesem Kapitel lernen sollten

――Verschiedene Einstellmethoden für Positionen

Holen Sie sich eine Position

Holen Sie sich von ID

Verwenden Sie die Funktion discord.Guild.get_role.

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

Holen Sie sich vom Namen

Verwenden Sie die Funktion get in discord.utils, um den Namen zu ermitteln.

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

** Bitte beachten Sie, dass nur der erste zurückgegeben wird, auch wenn er denselben Namen hat **

Umbenennen

Verwenden Sie die Bearbeitungsfunktion, um den Namen, die Farbe usw. in discord.Role zu ändern.

#Fortsetzung oben

#Umbenennen
await role.edit(name="Neuer Name")

Farbe ändern

Verwenden Sie discord.Color, um die Farbe zu ändern. discord.Colour hat für jede Farbe eine Funktion, die Sie auch verwenden können.

#Fortsetzung oben

#Bei Verwendung von RGB
await role.edit(colour=discord.Colour.from_rgb(256, 256, 256))

#Bei Verwendung von hsv(H,S,Geben Sie jedem V einen Wert zwischen 0 und 1)
await role.edit(colour=discord.Colour.from_hsv(0, 0, 1))

#Bei Verwendung einer Funktion
await role.edit(colour=discord.Colour.blue())

Position ändern

Beim Ändern der Position muss der numerische Wert der Position in das Positionsargument eingegeben werden. Da 0 @jeder ist, müssen Sie 1 oder mehr auswählen. Es geht in der Reihenfolge von 1 nach oben.

#Fortsetzung oben

await role.edit(position=1)

Geben Sie einen Grund für die Änderung an

Diese Änderungen verbleiben im Systemprotokoll, Sie können jedoch den Grund für die Anzeige zu diesem Zeitpunkt festlegen.

#Fortsetzung oben

await role.edit(position=1, reason="Ich habe es in der Stimmung gemacht,Ich habe nicht nachgedacht")

Ändern Sie alles auf einmal

Alle oben genannten Änderungen können auf einmal vorgenommen werden.

await role.edit(name="Lasches Grün", colour=discord.Colour.green(), position=1, reason="Ich habe es in der Stimmung gemacht,Ich habe nicht nachgedacht")

Berechtigungen ändern

Studieren Sie in diesem Abschnitt

Klassen rund um die Berechtigungen von discord.py

Die Klassen um die Berechtigungen von discord.py sind discord.Permissions und discord.PermissionOverWrite. Jedes davon ist mit der Autorisierung der Zwietrachtposition und den Einstellungen pro Kanal verbunden.

In Bezug auf den Wert, der für jedes Element festgelegt werden kann, kann die Berechtigung nur ein- und ausgeschaltet werden, während PermissionOverWrite zusätzlich zu Ein und Aus auf "nicht festgelegt" gesetzt werden kann (falls nicht festgelegt, höhere Berechtigungseinstellung, z. B. wenn es sich um einen Textkanal handelt, zu dem es gehört Erben Sie die Einstellungen des einzustellenden Kategoriekanals.

Es gibt auch einen Unterschied zwischen den beiden, dass Berechtigungen alles überschreiben (außer dem, was Sie nicht angeben, wird geändert), während PermissionOverWrite nur das überschreibt, was Sie angeben.

# overwrite
overwrite = discord.PermissionOverWrite()
overwrite.read_messages = True
overwrite.manage_messages = False
overwrite.send_messages = None  #Keine kann mit Überschreiben eingestellt werden

# permissions
permissions = discord.Permissions()
permissions.read_messages = True
permissions.manage_messages = False
# permissions.send_messages = None #Keine kann nicht eingestellt werden

Ändern Sie die Autorität einer Position

In discord.py lautet die Position discord.Role. Zuerst musst du das von der Gilde bekommen.

Holen Sie sich von ID

Verwenden Sie die Funktion discord.Guild.get_role.

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

Holen Sie sich vom Namen

Verwenden Sie die Funktion get in discord.utils, um den Namen zu ermitteln.

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

** Bitte beachten Sie, dass nur der erste zurückgegeben wird, auch wenn er denselben Namen hat **

Holen Sie sich die Erlaubnis des Änderungsziels

Um die Berechtigungen zu ändern, müssen Sie eine neue discord.Permissions-Klasse erstellen. Verwenden Sie hier die Berechtigungen der einmal erworbenen Rolle, um unnötige Änderungen zu vermeiden.

guild = message.guild
role = discord.utils.get(guild.roles, name="everyone")
#Erhalten Sie Berechtigungen
permissions = role.permissions

Um den Wert von discord.Permissions zu ändern, müssen Sie Allow = True oder Prohibit = False in die Variable einfügen, die dem Namen der Berechtigung entspricht.

#Fortsetzung eine Ebene höher

# @Lass alle schlagen
permissions.mention_everyone = False

#Änderungsberechtigung für Emoji hinzufügen
permissions.manage_emojis = True

Erstellen Sie neue Berechtigungen

Wenn Sie eine neue erstellen möchten, können Sie sie erstellen, indem Sie "permissions = discord.Permissions ()" festlegen.

Veränderung

Um dies in discord.Role wiederzugeben, verwenden Sie die Funktion discord.Role.edit (** Co-Routine-Funktion **). Wie beim letzten Mal können Sie mit der Bearbeitungsfunktion den Namen, die Farbe, die getrennte Anzeige und die Position festlegen.

#Fortsetzung oben

await role.edit(permissions=permissions)

Kanalberechtigungen ändern

Ändern Sie die Kanalberechtigungen mit set_permissions.

Beim direkten Festlegen von Berechtigungen

Sie können die Berechtigungen eines Benutzers oder einer Position mit dem Befehl set_permissions ändern.

channel = client.get_channel(CHANNEL_ID)
#Holen Sie sich das Zielmitglied
member = channel.guild.get_member(MEMBER_ID)

#Veränderung
await channel.set_permissions(member, send_messages=False)

Bei Verwendung von PermissionOverWrite

Mit PermissionOverWrite können Sie die Übereinstimmung mit der Einstellung None = category festlegen.

channel = client.get_channel(CHANNEL_ID)
#Holen Sie sich die Zielposition
role = discord.utils.get(channel.guild.roles, name="everyone")

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

#Veränderung
await channel.set_permissions(role, overwrite=overwrite)

Erstellen Sie einen Kanal

Was Sie in diesem Kapitel lernen sollten

So erstellen Sie einen Textkanal

Verwenden Sie zum Erstellen eines Textkanals die Funktion discord.Guild.create_text_channel oder discord.CategoryChannel.create_text_channel. Wenn Sie "discord.CategoryChannel.create_text_channel" verwenden, gehört es automatisch zur übergeordneten Kategorie. In discord.Guild.create_text_channel müssen Sie es selbst einstellen. Sie können Berechtigungen auch zusammen festlegen, aber Sie können nur PermissionOverWrite verwenden. Beim Festlegen von Berechtigungen

{
Bestimmte Position oder Mitglied- :Entsprechende PermissionOverWrite,
    guild.me :Entsprechende PermissionOverWrite
}

Verwenden Sie es so.

# discord.Guild.create_text_Kanal verwenden
guild = client.get_guild(GUIILD_ID)
# @Jeder kann nicht sprechen, aber ich kann
overwrites = {guild.default_role: discord.PermissionOverWrite(send_messages=False),
              guild.me: discord.PermissionOverWrite(send_messages=True)
}
new_channel = await guild.create_text_channel(name="Beachten", overwrites=overwrites, topic="Beachtenを表示します。")
print(f"#{new_channel.name}geschaffen.")

Der Rückgabewert von create_text_channel ist der neu erstellte Kanal.

So erstellen Sie einen Sprachkanal

Es ist im Grunde dasselbe wie ein Textkanal, jedoch ohne Einstellungen für Themen und langsamen Modus.

# discord.Guild.create_voice_Kanal verwenden
category = client.get_channel(CATEGORY_ID)
await category.create_voice_channel(name="Chat Stimme")

So erstellen Sie eine Kategorie

Hier können nur der Name und die Berechtigungen festgelegt werden. Außerdem gibt es nur discord.Guild.create_category.

guild = client.get_guild(GUIILD_ID)
# @Ich kann nicht jeden sehen, aber ich kann sehen
overwrites = {guild.default_role: discord.PermissionOverWrite(read_messages=False),
              guild.me: discord.PermissionOverWrite(read_messages=True)
}
await guild.create_category(name="Für den Betrieb", overwrites=overwrites)

Am Ende

Wie war es bisher? Dieses Mal erklärte ich, wie man schreibt, indem ich es in die Verwendung erweiterter Ereignisse, das Ändern von Einstellungen und das Erstellen von Kanälen unterteilt. Im nächsten Artikel wird erläutert, wie Sie auf Eingaben warten und eine Verbindung zu einem Sprachkanal herstellen und Audio abspielen können. Na dann. Der nächste Artikel wird in gutem Glauben produziert.

Recommended Posts

Einführung in discord.py (2)
Einführung in discord.py (3) Verwenden von Stimme
Einführung in MQTT (Einführung)
Einführung in Scrapy (1)
Einführung in Scrapy (3)
Erste Schritte mit Supervisor
Einführung in Scrapy (2)
[Linux] Einführung in Linux
Einführung in discord.py (1. Tag) -Preparation for discord.py-
Einführung in Lightning Pytorch
Erste Schritte mit Web Scraping
Einführung in EV3 / MicroPython
Einführung in die Python-Sprache
Einführung in die TensorFlow-Bilderkennung
Einführung in OpenCV (Python) - (2)
Einführung in PyQt4 Teil 1
Einführung in die Abhängigkeitsinjektion
Einführung in Private Chainer
Einführung in das maschinelle Lernen
AOJ Einführung in die Programmierung Thema Nr. 1, Thema Nr. 2, Thema Nr. 3, Thema Nr. 4
Einführung in das elektronische Papiermodul
Einführung in den Wörterbuch-Suchalgorithmus
Einführung in die Monte-Carlo-Methode
[Lernmemorandum] Einführung in vim
Einführung in PyTorch (1) Automatische Differenzierung
opencv-python Einführung in die Bildverarbeitung
Einführung in Python Django (2) Win
Einführung in das Schreiben von Cython [Notizen]
Einführung in Private TensorFlow
Eine Einführung in das maschinelle Lernen
[Einführung in cx_Oracle] Übersicht über cx_Oracle
Eine super Einführung in Linux
Einführung
AOJ Einführung in die Programmierung Thema Nr. 7, Thema Nr. 8
Einführung in die Anomalieerkennung 1 Grundlagen
Einführung in RDB mit sqlalchemy Ⅰ
[Einführung in Systre] Fibonacci Retracement ♬
Einführung in die nichtlineare Optimierung (I)
Einführung in die serielle Kommunikation [Python]
AOJ Einführung in die Programmierung Thema Nr. 5, Thema Nr. 6
Einführung in Deep Learning ~ Lernregeln ~
[Einführung in Python] <Liste> [Bearbeiten: 22.02.2020]
Einführung in Python (Python-Version APG4b)
Eine Einführung in die Python-Programmierung
[Einführung in cx_Oracle] (8.) Version cx_Oracle 8.0
Einführung in die Bayes'sche Optimierung
Tiefe Stärkung des Lernens 1 Einführung in die Stärkung des Lernens
Super Einführung in das maschinelle Lernen
Einführung in Ansible Teil In'Inventory '
Serie: Einführung in den Inhalt von cx_Oracle
[Einführung] Verwendung von open3d
Einführung in Python For, While
Einführung in Deep Learning ~ Backpropagation ~
Einführung in Ansible Teil ④'Variable '
Einführung in den Befehl vi (Hinweis)
Einfache Einführung in Home Hack mit Raspberry Pi und discord.py