Verified Commit 7bab5c4a authored by Quentin Duchemin's avatar Quentin Duchemin
Browse files

Add some dirty scripts

parent ca3ca9d6
## Masquer les canaux de groupe et les canaux privés
Ce script (à l'arrache, pas comme les beaux scripts de Kyâne) permet juste de masquer tous les canaux privés et les conversations de groupe d'un utilisateur.
Cas d'usage : beaucoup de canaux accumulés au fil des années et flemme de spammer la croix dans l'interface.
Les canaux ne sont évidemment pas supprimés.
Pour faire fonctionner le script il suffit de renseigner les identifiants directement dans le code.
Ce script utilise l'API v4. On remarquera que la gestion de l'affichage des canaux privés est un peu ésotérique : il faut passer à l'API le nom du canal, amputé des underscores de l'identifiant de l'utilisateur dont on souhaite nettoyer les canaux. Le nom d'un canal privé est habituellement formé comme suit : <id_me>__<id_other>. Ici, on passera seulement <id_other> à l'API.
#!/usr/bin/env python
import requests
baseUrl = 'https://team.picasoft.net/api/v4/'
def get_auth():
return { 'Authorization': 'Bearer ' + token }
r = requests.post(
baseUrl + 'users/login',
json = {
'login_id': '',
'password': ''
})
token = r.headers['Token']
me = requests.post(
baseUrl + 'users/usernames',
json = [ 'quentinduchemin' ],
headers = get_auth()
).json()[0]
teams = requests.get(
baseUrl + 'users/{}/teams'.format(me['id']),
headers = get_auth()
).json()
chans = requests.get(
baseUrl + '/users/{0}/teams/{1}/channels'.format(me['id'], teams[0]['id']),
headers = get_auth()
).json()
for chan in chans:
t = chan['type']
if t == 'D' or t == 'G':
r = requests.put(
baseUrl + 'users/{}/preferences'.format(me['id']),
json = [{
'user_id': me['id'],
'category': 'direct_channel_show' if t == 'D' else 'group_channel_show',
'name': chan['name'].replace(me['id'], '').replace('__', ''),
'value': 'false'
}],
headers = get_auth()
)
print('Removed {}'.format(chan['name'].replace(me['id'], '').replace('__', '')))
## Envoyer un message privé aux personnes "actives"
Ce script (à l'arrache, pas comme les beaux scripts de Kyâne) permet d'envoyer un message privé depuis un compte arbitraire à toutes les personnes s'étant connectées au moins une fois depuis une date donnée.
Cas d'usage : annoncer quelque chose d'important sur le Mattermost, sans pouvoir utiliser la bannière d'annonce qui est réservée à la version entreprise.
Attention : les messages ne peuvent pas être envoyés depuis un bot, mais le sont directement depuis le compte mentionné.
Pour faire fonctionner le script il suffit de renseigner les identifiants directement dans le code.
Ce script utilise l'API v4 et a besoin d'un compte avec les privilèges d'administrateur pour fonctionner.
#!/usr/bin/env python
import requests
import time
import datetime
message = ''
username = ''
oldTime = time.mktime(datetime.datetime.strptime("01/08/2018", "%d/%m/%Y").timetuple()) * 1000
baseUrl = 'https://team.picasoft.net/api/v4/'
def get_auth():
return { 'Authorization': 'Bearer ' + token }
r = requests.post(
baseUrl + 'users/login',
json = {
'login_id': username,
'password': ''
})
token = r.headers['Token']
all_users = []
i = 0
while True:
users = requests.get(
baseUrl + 'users',
params = { 'per_page': '200', 'page': str(i) },
headers = get_auth()
).json()
if users == []:
break
for user in users:
all_users.append(user)
i = i + 1
me = requests.post(
baseUrl + 'users/usernames',
json = [ username ],
headers = get_auth()
).json()[0]
for user in all_users:
sessions = requests.get(
baseUrl + 'users/' + user['id'] + '/sessions',
headers = get_auth()
).json()
for session in sessions:
if int(oldTime) < int(session['last_activity_at']):
r = requests.post(
baseUrl + 'channels/direct',
json = [ user['id'], me['id'] ],
headers = get_auth()
)
r = requests.post(
baseUrl + 'posts',
json = {
'channel_id': r.json()['id'],
'message': '### Salut ' + user['username'] + ' ! :D \n' + message,
},
headers = get_auth()
)
print('Message sent to ' + user['username'])
break
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment