[PYTHON] Une histoire qui reflète l'activité Discord dans Slack Status

Aperçu

Activité Discord image.png À Reflété dans Slack Status. image.png

Qui est l'affaire? C'est ...

discord.py Cette fois, nous utiliserons ** discord.py **, qui est la bibliothèque Python de l'API Discord.

référence

De grands pionniers ont déjà écrit des articles sur l'acquisition de Token, alors veuillez vous y référer.

la mise en oeuvre

Fondamentalement, vous placez un bot sur un serveur Discord que vous avez créé vous-même, et ce bot obtient l'activité du membre serveur.

Le processus sera décrit dans chaque gestionnaire d'événements de discorde, Cette fois

--Lorsque le bot démarre --Lors de la mise à jour du profil du membre

Prenons l'activité.

Chaque gestionnaire d'événements se présente comme suit.

#Quand le bot démarre
@client.event
async def on_ready():
     ...
#Lors de la mise à jour du profil d'un membre
@client.event
async def on_member_update(before, after):
     ...

Obtenez une activité

Autant que j'ai lu la référence officielle, discord.Member A une activité utilisateur.

En d'autres termes, il suffit que chaque gestionnaire d'événements puisse obtenir Member. J'ai donc décidé d'utiliser Client.get_all_members ().

Cependant, puisque tous les membres participant au serveur seront acquis. Obtenez uniquement le Membre du membre spécifié à l'aide de la fonction discord.util.

member = discord.utils.get(client.get_all_members(), name='Nom sur Discord')
if member.activity != None:
    print(member.activity.name)

Si vous avez KovaaK en cours d'exécution image.png

Résultat d'exécution


KovaaK 2.0: The Meta

Sera.

Points à noter lors de la récupération de l'activité

discord.Member.activity a diverses activités Pour les jeux, ce qui précède fonctionne, mais les activités qui ne sont pas enregistrées avec Discord, comme jouer à Spotify, peuvent ne pas fonctionner.

Voir ci-dessous pour plus de détails.

Pour le moment, les membres de BaseActivity et Spotify ont tous name, alors ça va ... (peut-être)

Réécrire l'état de Slack

Vous pouvez le faire en envoyant une demande de publication à ʻusers.profile.set` dans l'API Slack.

Fondamentalement, cela peut être réalisé en passant le nom du profil que vous souhaitez mettre à jour en «nom» et le contenu du profil en «valeur».

response = requests.post('https://slack.com/api/users.profile.set', 
                       data={'token': 'Jeton Slack',
                       'name': 'status_text',
                       'value': 'test',
                       'user': 'ID utilisateur Slack', 
                       'pretty': '1'})

Si vous jetez ça, image.png Ça ressemble à ça.

En les mettant ensemble, ça ressemble à ça

import discord
import requests

DISCORD_TOKEN = '******'
SLACK_TOKEN = '******'

game = None

#Créer un objet pour se connecter à Discord
client = discord.Client()

#Obtenez le nom de l'activité du membre et définissez-le dans une variable
def set_game_name(member):
    global game
    if member.activity != None:
        game = member.activity.name + 'En jouant'
    else:
        game = 'Not Playing game.'

#Mettre à jour l'état de Slack
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'})

#Quand le bot démarre
@client.event
async def on_ready():
    member = discord.utils.get(client.get_all_members(), name='*****')
    set_game_name(member)
    post_slack_status()

#Lors de la mise à jour du profil d'un membre
@client.event
async def on_member_update(befor, after):
    set_game_name(after)
    post_slack_status()

#démarrage du bot
client.run(DISCORD_TOKEN)

Droite? N'est-ce pas facile?

Ami A "J'espère pouvoir passer n minutes"

Je décrirai la méthode de mise en œuvre détaillée plus tard si j'en ai envie ... Tout simplement

C'est comme ça. (Je pensais l'avoir écrit, mais que se passe-t-il si ʻon_member_update () s'exécute à nouveau en attendant la fin du thread dans ʻon_member_update () .... Le gestionnaire d'événements est gênant ......... )

Postscript (07/05/2020)

Il y avait un manque de compréhension des spécifications de ʻon_member_update () `. on_member_update()

Parce qu'il s'exécute lorsque les éléments suivants des membres sont mis à jour Courons seulement lorsque l'activité est mise à jour!

Recommended Posts

Une histoire qui reflète l'activité Discord dans Slack Status
Une histoire sur l'exploitation d'une instance GCP à partir de Discord
Une histoire sur un débutant Linux passant LPIC101 en une semaine
Une histoire sur la façon de spécifier un chemin relatif en python.
Une histoire de compétition avec un ami dans Othello AI Preparation
Une histoire sur la tentative d'implémentation de variables privées en Python.
Une histoire sur une tragédie qui se passe en échangeant des commandes dans le chat
Une histoire rafraîchissante sur Slice en Python
Une histoire de mauvaise humeur sur Slice en Python
Une histoire sur une erreur de construction dans une bibliothèque partagée qui fait référence à libusb
L'histoire de l'utilisation de la réduction de Python
[Google Photo & Slack Photo Bot] Une histoire sur la création d'un bot qui acquiert une photo dans Google Photo et l'envoie à Slack.
[Mémorandum] Une histoire sur l'essai du didacticiel OpenCV (reconnaissance faciale) dans un environnement Windows
Une histoire sur la création d'une chaîne anonyme avec Slack à partir de zéro connaissance
Une histoire sur un remodelage magique qui met Lubuntu dans un Chromebook
Une histoire reliant Slack et la feuille de calcul Google
Une histoire sur l'apprentissage automatique avec Kyasuket
Une histoire sur Python pop and append
Échapper à l'environnement virtuel de Python ~ Une histoire sur le fait d'être piégé dans un environnement virtuel que j'ai créé ~
Une histoire sur l'apprentissage automatique simple avec TensorFlow
Une histoire accro aux variables globales et à la portée de Go
Un mémo que j'ai écrit un tri de fusion en Python
L'histoire de vouloir afficher des annonces liées à des articles sur Jubatus
Analyse de données en Python: une note sur line_profiler
Une histoire sur l'implémentation d'un écran de connexion avec django
Une histoire sur l'exécution de Python sur PHP sur Heroku
Pensez à créer un environnement Python 3 dans un environnement Mac
Comment notifier les canaux Discord en Python
Une histoire remplie de valeurs absolues de numpy.ndarray
Une histoire sur la modification de Python et l'ajout de fonctions
Histoire de l'analyse de données par apprentissage automatique
Une histoire d'essais et d'erreurs essayant de créer un groupe d'utilisateurs dynamique dans Slack
Une histoire sur la tentative d'introduire Linter au milieu d'un projet Python (Flask)