Activité Discord À Reflété dans Slack Status.
Qui est l'affaire? C'est ...
discord.py Cette fois, nous utiliserons ** discord.py **, qui est la bibliothèque Python de l'API Discord.
De grands pionniers ont déjà écrit des articles sur l'acquisition de Token, alors veuillez vous y référer.
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):
...
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
Résultat d'exécution
KovaaK 2.0: The Meta
Sera.
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)
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, Ç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?
Je décrirai la méthode de mise en œuvre détaillée plus tard si j'en ai envie ... Tout simplement
post_slack_status ()
dans une boucle qui tourne toutes les minutes.
--Thread post_slack_status ()
et l'exécuter comme un thread séparé.
--Lorsque ʻon_member_update (befor, after) s'exécute, définissez l'indicateur de boucle sur
False, arrêtez le thread, réacquérir l'activité, puis relancez le thread de
post_slack_status () ʻà nouveau.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 ......... )
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