DeadTOm пре 1 недеља
родитељ
комит
8c43ab1c18
2 измењених фајлова са 80 додато и 0 уклоњено
  1. 6 0
      config.py
  2. 74 0
      owncastcom.py

+ 6 - 0
config.py

@@ -0,0 +1,6 @@
+log_file = ''
+user = ''  # The bot's XMPP account username
+passwd = ''  # The bot's XMPP account password
+auth_bearer = ''  # The bot's Owncast API token
+api_url = 'http://'  # Your Owncast API url
+approved_senders = []  # The list of XMPP accounts allowed to send messages to the bot

+ 74 - 0
owncastcom.py

@@ -0,0 +1,74 @@
+import config
+import logging
+from slixmpp import ClientXMPP
+import time
+import requests
+import json
+import sys
+import os
+
+logging.basicConfig(filename=config.log_file, level=logging.INFO)
+
+
+def get_now():  # This creates and returns a time stamp
+    now = str(time.strftime("%Y/%m/%d %H:%M:%S"))
+    return now
+
+
+def send_ownchat(msg):
+    msg_body = {'body': msg}
+    headers = {'Authorization': config.auth_bearer}
+    response = requests.post(f'{config.api_url}/api/integrations/chat/send', data=json.dumps(msg_body),
+                             headers=headers)
+    return response.json()
+
+
+class CommandBot(ClientXMPP):
+
+    def __init__(self, jid, password):
+        ClientXMPP.__init__(self, jid, password)
+        self.add_event_handler("session_start", self.session_start)
+        self.add_event_handler("message", self.message)
+        self.add_event_handler("disconnected", self.do_reconnect)
+
+    def session_start(self, event):
+        self.send_presence()
+        self.get_roster()
+
+    def do_reconnect(self, event):  # Try to reconnect if disconnected
+        logging.info('Disconnected. Reconnecting...')
+        time.sleep(1)
+        os.execv(__file__, sys.argv)
+        sys.exit()
+
+    def message(self, msg):
+        if msg['type'] in ('chat', 'normal'):
+            self.msg = msg
+            self.cmd = self.msg['body']  # Get the body out of the message
+            self.cmd = self.cmd.lower()  # Convert it to lower case to avoid problems looking up available commands
+            self.sender = self.msg['from']  # Get sender
+            self.sender = str(self.sender)  # Convert to string so split() can work with it
+            self.sender = self.sender.split('/')[0]  # Only save the information before the forward slash
+            time.sleep(1)
+            if self.sender in config.approved_senders:  # Check if the sender has permission to send commands
+                self.send = send_ownchat(self.msg['body'])
+                self.result = self.send
+                logging.info(f'Recieved response \"{self.result}\" from Owncast server.')
+            else:  # If not, say so
+                logging.info(f'{self.sender} sent a command, but is not in the approved senders list.')
+                self.msg.reply('Access denied. You are not on the list.').send()
+
+
+try:
+    if __name__ == '__main__':
+        xmpp = CommandBot(config.user, config.passwd)
+        xmpp.connect()
+        xmpp.process(forever=True)
+except KeyboardInterrupt:  # Catch ctrl-alt-del
+    print('\nExiting program...')
+    sys.exit()
+except Exception as error:  # Log/print all other errors
+    print(error)
+    logging.info(f'ERROR:{error}')
+    sys.exit()
+