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 **
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)
** 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 /).
Python 3.8.0 Mac OS Catalina 10.15.2 discord.py-1.3.2
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 **
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)
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.
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)
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 **
Das Server-Setup ist sehr lang, daher zeige ich Ihnen nur das Haupt-Setup.
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.
#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")
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())
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")
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")
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.
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)
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.
Benutze guild.text_channels
.
channel = discord.utils.get(guild.text_channels, name="Name")
Benutze guild.voice_channels
.
channel = discord.utils.get(guild.voice_channels, name="Name")
Verwenden Sie "guild.categories".
channel = discord.utils.get(guild.categories, name="Name")
Benutze guild.channels
.
channel = discord.utils.get(guild.channels, name="Name")
Die Kanaleinstellungen sind sehr lang, daher werde ich nur die wichtigsten anzeigen.
Verwenden Sie den Namen.
await channel.edit(name="New Name")
Thema verwenden.
await channel.edit(topic="topictopictopictopictoping")
Position verwenden
await channel.edit(position=2)
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)
Alle oben genannten Änderungen können auf einmal vorgenommen werden.
await channel.edit(name="Beachten", topic="運営からのBeachtenを載せます.", category=None)
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 **
――Verschiedene Einstellmethoden für Positionen
Verwenden Sie die Funktion discord.Guild.get_role.
guild = message.guild
role = guild.get_role(ROLE_ID)
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 **
Verwenden Sie die Bearbeitungsfunktion, um den Namen, die Farbe usw. in discord.Role zu ändern.
#Fortsetzung oben
#Umbenennen
await role.edit(name="Neuer Name")
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())
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)
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")
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")
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
In discord.py lautet die Position discord.Role. Zuerst musst du das von der Gilde bekommen.
Verwenden Sie die Funktion discord.Guild.get_role.
guild = message.guild
role = guild.get_role(ROLE_ID)
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 **
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
Wenn Sie eine neue erstellen möchten, können Sie sie erstellen, indem Sie "permissions = discord.Permissions ()" festlegen.
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)
Ändern Sie die Kanalberechtigungen mit set_permissions.
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)
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)
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.
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")
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)
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