Send message to discord when stream starts
authorGeorgios Atheridis <georgios@atheridis.org>
Sat, 21 Jan 2023 12:48:26 +0000 (12:48 +0000)
committerGeorgios Atheridis <georgios@atheridis.org>
Sat, 21 Jan 2023 12:48:26 +0000 (12:48 +0000)
ihaspeks/main.py
ihaspeks/scripts/discord_start_stream.py [new file with mode: 0644]
ihaspeks/tools/smart_start_stream_time.py

index f4116e11d310a1a33517fa10089f3be10680b550..66d5398e85a11ed2f39e50b7f03619ae07e92ce1 100644 (file)
@@ -13,6 +13,8 @@ import scripts.alwase
 import scripts.chatting
 import scripts.chat
 import scripts.crylaugh
+import scripts.clean_queue
+import scripts.discord_start_stream
 import database_manager
 import analyze_auto_message
 import time
@@ -30,6 +32,8 @@ reload(scripts.alwase)
 reload(scripts.chatting)
 reload(scripts.chat)
 reload(scripts.crylaugh)
+reload(scripts.clean_queue)
+reload(scripts.discord_start_stream)
 reload(database_manager)
 reload(analyze_auto_message)
 
@@ -116,10 +120,13 @@ def start(bot: Bot, message: Message, stop_event: Event):
         i += wait
         started = tools.smart_start_stream_time.update_start_stream_timestamp()
         if started == "START":
+            scripts.clean_queue.clean_queue()
+            scripts.discord_start_stream.announce()
             bot.send_privmsg(
                 message.channel, "/announce Stream has started, you can now use ?join"
             )
         elif started == "END":
+            scripts.clean_queue.clean_queue()
             bot.send_privmsg(message.channel, "Stream has ended")
         if i >= 30:
             analyze_auto_message.do_auto_message(bot, message, auto_message_modules)
diff --git a/ihaspeks/scripts/discord_start_stream.py b/ihaspeks/scripts/discord_start_stream.py
new file mode 100644 (file)
index 0000000..f7549fc
--- /dev/null
@@ -0,0 +1,73 @@
+import os
+import requests
+import logging
+import datetime
+import ttv_api.users
+import ttv_api.channel
+
+logger = logging.getLogger(__name__)
+
+STREAMER_PATH = os.path.abspath(os.path.join(__file__, "../.."))
+logger.debug(f"STREAMER_PATH set to: {STREAMER_PATH}")
+SCRIPTS_PATH = os.path.dirname(os.path.realpath(__file__))
+logger.debug(f"TOOLS_PATH set to: {SCRIPTS_PATH}")
+PATH = os.path.join(SCRIPTS_PATH, "..")
+logger.debug(f"PATH set to: {PATH}")
+
+STREAMER_LOGIN = os.path.split(STREAMER_PATH)[1]
+logger.debug(f"streamer_login set to: {STREAMER_LOGIN}")
+
+
+DISCORD_API = os.getenv("DISCORD_API")
+
+PEKS_CHANNEL_ID = 1048026874145681508
+
+def announce():
+    user = ttv_api.users.get_users(user_logins=[STREAMER_LOGIN])
+    if not user:
+        return
+    user = user[0]
+
+    channel = ttv_api.channel.get_channels(user.user_id)
+    if not channel:
+        return
+    channel = channel[0]
+
+    message = {
+      "content": "@everyone Peks is alive!!",
+      "embeds": [
+        {
+          "title": channel.title,
+          "description": user.description,
+          "url": f"https://twitch.tv/{STREAMER_LOGIN}",
+          "color": 13612884,
+          "author": {
+            "name": "Peks is now live!",
+            "url": f"https://twitch.tv/{STREAMER_LOGIN}",
+            "icon_url": user.profile_image_url,
+          },
+          "footer": {
+            "text": "rugo is amazing"
+          },
+          "timestamp": datetime.datetime.now(datetime.timezone.utc).replace(tzinfo=None).isoformat() + 'Z',
+          "thumbnail": {
+            "url": user.profile_image_url
+          }
+        }
+      ],
+    }
+
+    try:
+        response = requests.post(
+            f"https://discord.com/api/v10/channels/{PEKS_CHANNEL_ID}/messages",
+            headers={
+                "Authorization": f"Bot {DISCORD_API}",
+                "Content-Type": "application/json",
+            },
+            json=message,
+        )
+    except Exception as e:
+        logger.exception(e)
+        return
+    if response.status_code != 200:
+        logger.error(response.json)
index a2307790f66b78cd1708c9092023dc357ed39d4d..0eeb45c037df43778f2b10c52be8140bc7f8f837 100644 (file)
@@ -25,16 +25,6 @@ CHECK_STREAMTIME_CD = 5 * 60
 MAX_OFF_STREAM_MARGIN = 60 * 60
 
 
-def end_stream():
-    logger.info(f"{STREAMER_LOGIN} has ended their stream")
-    clean_queue.clean_queue()
-
-
-def start_stream():
-    logger.info(f"{STREAMER_LOGIN} has started their stream")
-    clean_queue.clean_queue()
-
-
 def start_stream_timestamp() -> Optional[int]:
     conn = sqlite3.connect(os.path.join(PATH, "database.db"))
     c = conn.cursor()
@@ -110,7 +100,7 @@ def update_start_stream_timestamp() -> Optional[str]:
         conn.commit()
         conn.close()
         # TODO add hook, streamer ended stream
-        end_stream()
+        logger.info(f"{STREAMER_LOGIN} has ended their stream")
         return "END"
 
     if not fetched:
@@ -126,7 +116,7 @@ def update_start_stream_timestamp() -> Optional[str]:
         )
         conn.commit()
         conn.close()
-        start_stream()
+        logger.info(f"{STREAMER_LOGIN} has started their stream")
         return "START"
 
     start_stream_ts, last_checked = fetched