[PYTHON] Eine Geschichte, die die Discord-Aktivität im Slack-Status widerspiegelt

Überblick

Zwietracht Aktivität image.png Zu Reflektiert im Slack Status. image.png

Wer ist der Deal? Das ist ...

discord.py Dieses Mal verwenden wir ** discord.py **, die Python-Bibliothek der Discord-API.

Referenz

Große Pioniere haben bereits Artikel über die Übernahme von Token geschrieben.

Implementierung

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

Holen Sie sich Aktivität

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 image.png

Ausführungsergebnis


KovaaK 2.0: The Meta

Wird sein.

Punkte, die beim Abrufen von Aktivitäten zu beachten sind

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)

Slack-Status neu schreiben

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, image.png Es sieht aus wie das.

Wenn man diese zusammensetzt, sieht es so aus

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

Freund A "Ich hoffe, ich kann n Minuten vergehen lassen"

Ich werde die detaillierte Implementierungsmethode später beschreiben, wenn ich Lust dazu habe ... Einfach gesagt

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? )

Nachtrag (2020/05/07)

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

Eine Geschichte, die die Discord-Aktivität im Slack-Status widerspiegelt
Eine Geschichte über den Betrieb einer GCP-Instanz von Discord
Eine Geschichte über einen Linux-Anfänger, der in einer Woche LPIC101 bestanden hat
Eine Geschichte darüber, wie man einen relativen Pfad in Python angibt.
Eine Geschichte über den Wettbewerb mit einem Freund in Othello AI Preparation
Eine Geschichte über den Versuch, private Variablen in Python zu implementieren.
Eine Geschichte über eine Tragödie, die durch den Austausch von Befehlen im Chat verursacht wurde
Eine erfrischende Geschichte über Slice in Python
Eine launische Geschichte über Slice in Python
Eine Geschichte über einen Erstellungsfehler in einer gemeinsam genutzten Bibliothek, die auf libusb verweist
Die Geschichte der Verwendung von Python reduziert
[Google Photo & Slack Photo Bot] Eine Geschichte über das Erstellen eines Bots, der ein Foto in Google Photo erfasst und an Slack sendet.
[Memorandum] Eine Geschichte über das Ausprobieren des OpenCV-Tutorials (Gesichtserkennung) in einer Windows-Umgebung
Eine Geschichte über das Erstellen eines anonymen Kanals mit Slack aus null Wissen
Eine Geschichte über einen magischen Umbau, der Lubuntu in ein Chromebook bringt
Eine Geschichte, die Slack und Google Spreadsheet verbindet
Eine Geschichte über maschinelles Lernen mit Kyasuket
Eine Geschichte über Python Pop und Append
Flucht aus Pythons virtueller Umgebung ~ Eine Geschichte über das Fangen in einer von mir erstellten virtuellen Umgebung ~
Eine Geschichte über einfaches maschinelles Lernen mit TensorFlow
Eine Geschichte, die von Go's globalen Variablen und ihrem Umfang abhängig ist
Ein Memo, das ich in Python zusammengeführt habe
Die Geschichte, Artikel-verknüpfte Anzeigen auf Jubatus anzeigen zu wollen
Datenanalyse in Python: Ein Hinweis zu line_profiler
Eine Geschichte über die Implementierung eines Anmeldebildschirms mit Django
Eine Geschichte über das Ausführen von Python auf PHP auf Heroku
Denken Sie daran, eine Python 3-Umgebung in einer Mac-Umgebung zu erstellen
So benachrichtigen Sie Discord-Kanäle in Python
Eine Geschichte voller absoluter Werte von numpy.ndarray
Eine Geschichte über das Ändern von Python und das Hinzufügen von Funktionen
Geschichte rund um die Datenanalyse durch maschinelles Lernen
Eine Geschichte von Versuch und Irrtum beim Versuch, eine dynamische Benutzergruppe in Slack zu erstellen
Eine Geschichte über den Versuch, Linter mitten in einem Python (Flask) -Projekt vorzustellen