Zwietracht Aktivität Zu Reflektiert im Slack Status.
Wer ist der Deal? Das ist ...
discord.py Dieses Mal verwenden wir ** discord.py **, die Python-Bibliothek der Discord-API.
Große Pioniere haben bereits Artikel über die Übernahme von Token geschrieben.
Grundsätzlich platzieren Sie einen Bot auf einem von Ihnen selbst erstellten Discord-Server, und dieser Bot erhält die Aktivität des Servermitglieds.
Der Prozess wird in jedem Event-Handler der Zwietracht beschrieben. Diesmal
Lassen Sie uns die Aktivität bekommen.
Jeder Ereignishandler ist wie folgt.
#Wenn der Bot startet
@client.event
async def on_ready():
...
#Beim Aktualisieren des Profils eines Mitglieds
@client.event
async def on_member_update(before, after):
...
Soweit ich die offizielle Referenz gelesen habe, discord.Member Hat Benutzeraktivität.
Mit anderen Worten, es reicht aus, wenn jeder Ereignishandler "Mitglied" erhalten kann. Also habe ich mich für "Client.get_all_members ()" entschieden.
Da jedoch alle am Server teilnehmenden Mitglieder erworben werden. Holen Sie sich nur das "Mitglied" des angegebenen Mitglieds mit der Funktion "discord.util".
member = discord.utils.get(client.get_all_members(), name='Name auf Zwietracht')
if member.activity != None:
print(member.activity.name)
Wenn Sie KovaaK laufen lassen
Ausführungsergebnis
KovaaK 2.0: The Meta
Wird sein.
discord.Member.activity
hat verschiedene Aktivitäten
Bei Spielen funktioniert das oben Genannte, aber Aktivitäten, die nicht bei Discord registriert sind, wie z. B. das Spielen von Spotify, funktionieren möglicherweise nicht.
Siehe unten für Details.
Derzeit haben die Mitglieder von "BaseActivity" und "Spotify" alle "Name", also ist es okay ... (vielleicht)
Sie können dies tun, indem Sie eine Post-Anfrage an die Slack-API "users.profile.set" senden.
Grundsätzlich kann dies realisiert werden, indem der zu aktualisierende Profilname an "Name" und der Inhalt des Profils an "Wert" übergeben werden.
response = requests.post('https://slack.com/api/users.profile.set',
data={'token': 'Slack Token',
'name': 'status_text',
'value': 'test',
'user': 'Slack User ID',
'pretty': '1'})
Wenn Sie dies werfen, Es sieht aus wie das.
import discord
import requests
DISCORD_TOKEN = '******'
SLACK_TOKEN = '******'
game = None
#Erstellen Sie ein Objekt, um eine Verbindung zu Discord herzustellen
client = discord.Client()
#Rufen Sie den Namen der Aktivität vom Mitglied ab und legen Sie ihn in einer Variablen fest
def set_game_name(member):
global game
if member.activity != None:
game = member.activity.name + 'Spielen'
else:
game = 'Not Playing game.'
#Aktualisieren Sie den Slack-Status
def post_slack_status():
global game
response = request.post('https://slack.com/api/users.profile.set',
data={
'token': SLACK_TOKEN,
'profile': '{ "status_text":"' + game + '",
"status_emoji": ":nick:" }',
'user': '*****',
'pretty': '1'})
#Wenn der Bot startet
@client.event
async def on_ready():
member = discord.utils.get(client.get_all_members(), name='*****')
set_game_name(member)
post_slack_status()
#Beim Aktualisieren des Profils eines Mitglieds
@client.event
async def on_member_update(befor, after):
set_game_name(after)
post_slack_status()
#Bot starten
client.run(DISCORD_TOKEN)
Richtig? Ist es nicht einfach
Ich werde die detaillierte Implementierungsmethode später beschreiben, wenn ich Lust dazu habe ... Einfach gesagt
post_slack_status ()
und führe es als separaten Thread aus.
--Wenn on_member_update (vor, nach)
ausgeführt wird, setzen Sie das Schleifenflag auf False
, beenden Sie den Thread, rufen Sie die Aktivität erneut ab und führen Sie den Thread von post_slack_status ()
erneut aus.Es ist so. (Ich dachte, ich hätte es geschrieben, aber was ist, wenn "on_member_update ()" erneut ausgeführt wird, während auf das Ende des Threads in "on_member_update ()" gewartet wird? )
Es mangelte an Verständnis für die Spezifikationen von "on_member_update ()". on_member_update()
Weil es ausgeführt wird, wenn die folgenden Mitglieder aktualisiert werden Lassen Sie uns nur ausführen, wenn die Aktivität aktualisiert wird!
Recommended Posts