Files
QVolution2019.2/sleeper_agents_aom_engine/reporter/incoming/receiver.py
2021-09-12 22:16:11 -06:00

53 lines
2.0 KiB
Python
Executable File

import slack
import os
import re
import ssl as ssl_lib
import certifi
from message import SlackMessage
class SlackReceiver() :
def __init__(self, token, log, callback) :
self.token = token
self.ssl_context = ssl_lib.create_default_context(cafile=certifi.where())
self.callback = callback
self.log = log
def start(self) :
self.rtm_client = slack.RTMClient(token=self.token, ssl=self.ssl_context)
@slack.RTMClient.run_on(event="message")
def receive(**payload) :
msg = self.parse(payload)
if msg is not None:
self.receive(msg)
print("Starting")
self.rtm_client.start()
def parse(self, payload) :
self.log.debug("slack message received: {}".format(payload))
if 'data' in payload and 'bot_id' in payload['data'] and payload['data']['bot_id'] == 'BNYAX72BB':
# it's the bot's response, ignore it
return None
if 'data' in payload and 'user' in payload['data'] and payload['data']['user'] == 'UNS0QKMMY':
# it's the bot uploading files, ignore it
return None
if 'data' in payload and (
('text' in payload['data'] and '<@UNS0QKMMY>' not in payload['data']['text'])
and ('channel' in payload['data'] and not payload['data']['channel'].startswith('DP'))
):
# message in a channel and the bot wasn't pinged, or was not a direct message - ignore
self.log.debug("received message, but I wasn't pinged or DM'ed")
return None
if 'data' in payload and 'text' in payload['data'] and '<@UNS0QKMMY>' in payload['data']['text']:
# remove the ping text
payload['data']['text'] = re.sub('\\<@UNS0QKMMY\\>', '', payload['data']['text'])
return SlackMessage(payload)
def receive(self, msg) :
text = msg.text.split()
channel = msg.channel
ID = text[0] if len(text) > 0 else None
interval = text[1] if len(text) > 1 else None
step = text[2] if len(text) > 2 else None
self.callback(channel, ID, interval, step)