renamed skgyorugo to ihaspeks
authorGeorgios Atheridis <georgios@atheridis.org>
Mon, 16 Jan 2023 04:22:16 +0000 (04:22 +0000)
committerGeorgios Atheridis <georgios@atheridis.org>
Mon, 16 Jan 2023 04:31:23 +0000 (04:31 +0000)
146 files changed:
ihaspeks/README.md [new file with mode: 0644]
ihaspeks/analyze_auto_message.py [new file with mode: 0644]
ihaspeks/analyze_command.py [new file with mode: 0644]
ihaspeks/auto_messages/.jokes.py [new file with mode: 0644]
ihaspeks/auto_messages/give_permission.py [new file with mode: 0644]
ihaspeks/auto_messages/hello1.py [new file with mode: 0644]
ihaspeks/auto_messages/hello2.py [new file with mode: 0644]
ihaspeks/auto_messages/hello3.py [new file with mode: 0644]
ihaspeks/auto_messages/latege.py [new file with mode: 0644]
ihaspeks/auto_messages/queuehelp.py [new file with mode: 0644]
ihaspeks/auto_messages/update_queue.py [new file with mode: 0644]
ihaspeks/auto_messages/youtube.py [new file with mode: 0644]
ihaspeks/commands/.info.py [new file with mode: 0644]
ihaspeks/commands/9ball.py [new file with mode: 0644]
ihaspeks/commands/Q.py [new file with mode: 0644]
ihaspeks/commands/accept_share.py [new file with mode: 0644]
ihaspeks/commands/addaccount.py [new file with mode: 0644]
ihaspeks/commands/addcommand.py [new file with mode: 0644]
ihaspeks/commands/cannon.py [new file with mode: 0644]
ihaspeks/commands/cleanqueue.py [new file with mode: 0644]
ihaspeks/commands/coin.py [new file with mode: 0644]
ihaspeks/commands/commands.py [new file with mode: 0644]
ihaspeks/commands/deadge.py [new file with mode: 0644]
ihaspeks/commands/delete.py [new file with mode: 0644]
ihaspeks/commands/editcommand.py [new file with mode: 0644]
ihaspeks/commands/emotes.py [new file with mode: 0644]
ihaspeks/commands/forcehere.py [new file with mode: 0644]
ihaspeks/commands/forcejoin.py [new file with mode: 0644]
ihaspeks/commands/forceleave.py [new file with mode: 0644]
ihaspeks/commands/forcenothere.py [new file with mode: 0644]
ihaspeks/commands/here.py [new file with mode: 0644]
ihaspeks/commands/join.py [new file with mode: 0644]
ihaspeks/commands/joke.py [new file with mode: 0644]
ihaspeks/commands/latege.py [new file with mode: 0644]
ihaspeks/commands/leave.py [new file with mode: 0644]
ihaspeks/commands/movedown.py [new file with mode: 0644]
ihaspeks/commands/moveup.py [new file with mode: 0644]
ihaspeks/commands/newteams.py [new file with mode: 0644]
ihaspeks/commands/nothere.py [new file with mode: 0644]
ihaspeks/commands/opgg.py [new file with mode: 0644]
ihaspeks/commands/penta.py [new file with mode: 0644]
ihaspeks/commands/quadra.py [new file with mode: 0644]
ihaspeks/commands/removecommand.py [new file with mode: 0644]
ihaspeks/commands/scam.py [new file with mode: 0644]
ihaspeks/commands/spam.py [new file with mode: 0644]
ihaspeks/commands/t.py [new file with mode: 0644]
ihaspeks/commands/teams.py [new file with mode: 0644]
ihaspeks/commands/teamsize.py [new file with mode: 0644]
ihaspeks/commands/truth.py [new file with mode: 0644]
ihaspeks/commands/uwu.py [new file with mode: 0644]
ihaspeks/commands/youtube.py [new file with mode: 0644]
ihaspeks/database_manager.py [new file with mode: 0644]
ihaspeks/lol_api/__init__.py [new file with mode: 0644]
ihaspeks/lol_api/match_v5.py [new file with mode: 0644]
ihaspeks/lol_api/spectator_v4.py [new file with mode: 0644]
ihaspeks/lol_api/summoner_v4.py [new file with mode: 0644]
ihaspeks/main.py [new file with mode: 0644]
ihaspeks/requirements.txt [new file with mode: 0644]
ihaspeks/scripts/alwase.py [new file with mode: 0644]
ihaspeks/scripts/chat.py [new file with mode: 0644]
ihaspeks/scripts/chatting.py [new file with mode: 0644]
ihaspeks/scripts/clean_queue.py [new file with mode: 0644]
ihaspeks/scripts/clip_server.py [new file with mode: 0644]
ihaspeks/scripts/crylaugh.py [new file with mode: 0644]
ihaspeks/scripts/translator.py [new file with mode: 0644]
ihaspeks/scripts/unit_converter.py [new file with mode: 0644]
ihaspeks/tools/permissions.py [new file with mode: 0644]
ihaspeks/tools/raid.py [new file with mode: 0644]
ihaspeks/tools/smart_privmsg.py [new file with mode: 0644]
ihaspeks/tools/smart_start_stream_time.py [new file with mode: 0644]
ihaspeks/variable_manager/parser.py [new file with mode: 0644]
ihaspeks/yt_api/__init__.py [new file with mode: 0644]
ihaspeks/yt_api/videos.py [new file with mode: 0644]
skgyorugo/README.md [deleted file]
skgyorugo/analyze_auto_message.py [deleted file]
skgyorugo/analyze_command.py [deleted file]
skgyorugo/auto_messages/.jokes.py [deleted file]
skgyorugo/auto_messages/give_permission.py [deleted file]
skgyorugo/auto_messages/hello1.py [deleted file]
skgyorugo/auto_messages/hello2.py [deleted file]
skgyorugo/auto_messages/hello3.py [deleted file]
skgyorugo/auto_messages/latege.py [deleted file]
skgyorugo/auto_messages/queuehelp.py [deleted file]
skgyorugo/auto_messages/update_queue.py [deleted file]
skgyorugo/auto_messages/youtube.py [deleted file]
skgyorugo/commands/.info.py [deleted file]
skgyorugo/commands/9ball.py [deleted file]
skgyorugo/commands/Q.py [deleted file]
skgyorugo/commands/accept_share.py [deleted file]
skgyorugo/commands/addaccount.py [deleted file]
skgyorugo/commands/addcommand.py [deleted file]
skgyorugo/commands/cannon.py [deleted file]
skgyorugo/commands/cleanqueue.py [deleted file]
skgyorugo/commands/coin.py [deleted file]
skgyorugo/commands/commands.py [deleted file]
skgyorugo/commands/deadge.py [deleted file]
skgyorugo/commands/delete.py [deleted file]
skgyorugo/commands/editcommand.py [deleted file]
skgyorugo/commands/emotes.py [deleted file]
skgyorugo/commands/forcehere.py [deleted file]
skgyorugo/commands/forcejoin.py [deleted file]
skgyorugo/commands/forceleave.py [deleted file]
skgyorugo/commands/forcenothere.py [deleted file]
skgyorugo/commands/here.py [deleted file]
skgyorugo/commands/join.py [deleted file]
skgyorugo/commands/joke.py [deleted file]
skgyorugo/commands/latege.py [deleted file]
skgyorugo/commands/leave.py [deleted file]
skgyorugo/commands/movedown.py [deleted file]
skgyorugo/commands/moveup.py [deleted file]
skgyorugo/commands/newteams.py [deleted file]
skgyorugo/commands/nothere.py [deleted file]
skgyorugo/commands/opgg.py [deleted file]
skgyorugo/commands/penta.py [deleted file]
skgyorugo/commands/quadra.py [deleted file]
skgyorugo/commands/removecommand.py [deleted file]
skgyorugo/commands/scam.py [deleted file]
skgyorugo/commands/spam.py [deleted file]
skgyorugo/commands/t.py [deleted file]
skgyorugo/commands/teams.py [deleted file]
skgyorugo/commands/teamsize.py [deleted file]
skgyorugo/commands/truth.py [deleted file]
skgyorugo/commands/uwu.py [deleted file]
skgyorugo/commands/youtube.py [deleted file]
skgyorugo/database_manager.py [deleted file]
skgyorugo/lol_api/__init__.py [deleted file]
skgyorugo/lol_api/match_v5.py [deleted file]
skgyorugo/lol_api/spectator_v4.py [deleted file]
skgyorugo/lol_api/summoner_v4.py [deleted file]
skgyorugo/main.py [deleted file]
skgyorugo/requirements.txt [deleted file]
skgyorugo/scripts/alwase.py [deleted file]
skgyorugo/scripts/chat.py [deleted file]
skgyorugo/scripts/chatting.py [deleted file]
skgyorugo/scripts/clean_queue.py [deleted file]
skgyorugo/scripts/clip_server.py [deleted file]
skgyorugo/scripts/crylaugh.py [deleted file]
skgyorugo/scripts/translator.py [deleted file]
skgyorugo/scripts/unit_converter.py [deleted file]
skgyorugo/tools/permissions.py [deleted file]
skgyorugo/tools/raid.py [deleted file]
skgyorugo/tools/smart_privmsg.py [deleted file]
skgyorugo/tools/smart_start_stream_time.py [deleted file]
skgyorugo/variable_manager/parser.py [deleted file]
skgyorugo/yt_api/__init__.py [deleted file]
skgyorugo/yt_api/videos.py [deleted file]

diff --git a/ihaspeks/README.md b/ihaspeks/README.md
new file mode 100644 (file)
index 0000000..ba627b3
--- /dev/null
@@ -0,0 +1,37 @@
+### TODO
+
+- [x] youtube api
+- [x] raid / host shoutout
+- [x] latege (command and auto), could look through auto schedule
+- [ ] basic math polish notation
+- [x] translator
+- [x] (?t a replied message / database in memory of messages)
+- [ ] followage command
+- [ ] commands in groups
+- [ ] quote adder / remover / getter
+- [ ] reminder (timer)
+- [x] inch to cm
+- [ ] license --- opensource --- info
+- [ ] streamer time
+- [ ] list maker (who's up for flex)
+- [ ] variable counter with cross-command functionality
+- [ ] random variable getter from db {random.quote}
+- [ ] specific word in message {message.0}, {message.1}, etc.
+- [ ] replied variable {reply.nick} {reply.message} {reply.message.0}
+- [ ] sub sellout bot
+- [ ] schedule
+- [ ] which LoL account are you playing on? (maybe add rank)
+
+## Basic Commands
+- [x] int
+- [x] bald
+- [ ] milk pasta
+- [x] make spam always output max length
+- [x] tea
+- [x] coffee
+- [ ] smelly
+- [x] coin
+- [ ] permissions
+- [x] jam
+- [x] screamlads
+- [x] supporters
diff --git a/ihaspeks/analyze_auto_message.py b/ihaspeks/analyze_auto_message.py
new file mode 100644 (file)
index 0000000..aa8ef11
--- /dev/null
@@ -0,0 +1,79 @@
+from aptbot.bot import Bot, Message, Commands
+import os
+import sqlite3
+import time
+import tools.smart_privmsg
+import tools.smart_start_stream_time
+import logging
+from importlib import reload
+
+reload(tools.smart_privmsg)
+reload(tools.smart_start_stream_time)
+
+logger = logging.getLogger(__name__)
+
+PATH = os.path.dirname(os.path.realpath(__file__))
+logger.debug(f"analyze_auto_message PATH set to: {PATH}")
+
+
+def do_auto_message(bot: Bot, message: Message, auto_message_modules: dict):
+    start_stream_ts = tools.smart_start_stream_time.start_stream_timestamp()
+    if not start_stream_ts:
+        return
+
+    conn = sqlite3.connect(os.path.join(PATH, "database.db"))
+    c = conn.cursor()
+
+    c.execute(
+        """
+        SELECT
+            name,
+            cooldown,
+            end_time,
+            last_used,
+            value
+        FROM
+            auto_messages
+        LEFT JOIN auto_message_values USING (name)
+        ORDER BY
+            last_used ASC
+        """
+    )
+    while True:
+        fetched = c.fetchone()
+        if not fetched:
+            break
+
+        name, cooldown, end_time, last_used, value = fetched
+        if time.time() < last_used + cooldown:
+            continue
+        if time.time() > start_stream_ts + end_time and end_time != 0:
+            continue
+        if value:
+            tools.smart_privmsg.send(bot, message, value)
+        else:
+            try:
+                auto_message_modules[name].main(bot, message)
+            except KeyError:
+                c.execute(
+                    """
+                        DELETE FROM
+                            auto_messages
+                        WHERE
+                            name = ?
+                    """,
+                    (name,),
+                )
+                conn.commit()
+                continue
+
+        c.execute(
+            "UPDATE auto_messages SET last_used = ? WHERE name = ?",
+            (
+                int(time.time()),
+                name,
+            ),
+        )
+        conn.commit()
+        break
+    conn.close()
diff --git a/ihaspeks/analyze_command.py b/ihaspeks/analyze_command.py
new file mode 100644 (file)
index 0000000..76ba314
--- /dev/null
@@ -0,0 +1,115 @@
+import os
+import random
+import sqlite3
+import tools.permissions
+import tools.smart_privmsg
+import logging
+from aptbot.bot import Bot, Message, Commands
+
+logger = logging.getLogger(__name__)
+
+PATH = os.path.dirname(os.path.realpath(__file__))
+logger.debug(f"PATH set to: {PATH}")
+
+
+def do_command(bot: Bot, message: Message, command_modules: dict):
+    db_name_database = "database.db"
+    conn = sqlite3.connect(os.path.join(PATH, db_name_database))
+    c = conn.cursor()
+    logger.info(f"connected to database {db_name_database}")
+
+    try:
+        replied_message = message.tags["reply-parent-msg-body"]
+    except KeyError:
+        replied_message = None
+
+    if replied_message:
+        command = message.value.split(" ")[1]
+    else:
+        command = message.value.split(" ")[0]
+    prefix = command[0]
+    command = command[1:]
+    user_id = message.tags["user-id"]
+    message_timestamp = int(message.tags["tmi-sent-ts"]) // 1000
+    user_perm = tools.permissions.get_permission_from_id(user_id)
+
+    c.execute(
+        """
+        SELECT
+            commands.command,
+            value,
+            commands.user_cooldown,
+            commands.global_cooldown,
+            CASE 
+                WHEN ? <= 10 THEN
+                    0
+                WHEN cooldowns.user_cooldown >= (commands.last_used + commands.global_cooldown) THEN
+                    cooldowns.user_cooldown
+                ELSE
+                    (commands.last_used + commands.global_cooldown)
+            END AS avail_time
+
+        FROM
+            commands
+        LEFT JOIN command_values USING (command)
+        LEFT JOIN cooldowns ON
+        (
+            cooldowns.command = commands.command
+            AND cooldowns.user_id = ?
+        )
+        WHERE
+            commands.command = ?
+            AND prefix = ?
+            AND permission >= ?
+        """,
+        (
+            user_perm,
+            user_id,
+            command,
+            prefix,
+            user_perm,
+        ),
+    )
+    fetched = c.fetchall()
+    if not fetched:
+        conn.close()
+        return
+
+    (
+        _,
+        value,
+        command_user_cooldown,
+        command_global_cooldown,
+        avail_time,
+    ) = random.choice(fetched)
+
+    if message_timestamp < avail_time:
+        bot.send_privmsg(
+            message.channel,
+            f"The command '{prefix}{command}' is on cooldown. \
+            Please wait {int(avail_time - message_timestamp) + 1} seconds.",
+        )
+        conn.close()
+        return
+
+    c.execute(
+        "REPLACE INTO cooldowns VALUES (?, ?, ?)",
+        (
+            user_id,
+            command,
+            command_user_cooldown + message_timestamp,
+        ),
+    )
+    c.execute(
+        "UPDATE commands SET last_used = ? WHERE command = ?",
+        (
+            message_timestamp,
+            command,
+        ),
+    )
+    conn.commit()
+    conn.close()
+    if value is None:
+        command_modules[command].main(bot, message)
+    else:
+        tools.smart_privmsg.send(bot, message, value)
diff --git a/ihaspeks/auto_messages/.jokes.py b/ihaspeks/auto_messages/.jokes.py
new file mode 100644 (file)
index 0000000..a972958
--- /dev/null
@@ -0,0 +1,26 @@
+from aptbot.bot import Message, Commands, Bot
+import tools.smart_privmsg
+import urllib3
+import json
+
+COOLDOWN = 30 * 60
+END_TIME = 0
+
+header = {
+    "Accept": "application/json",
+    "User-Agent": "For my twitch bot [MurphyAI] on https://twitch.tv/ihaspeks",
+}
+
+
+def main(bot: Bot, message: Message):
+    http = urllib3.PoolManager()
+    r = http.request("GET", "https://icanhazdadjoke.com", headers=header)
+    if r.status != 200:
+        tools.smart_privmsg.send(bot, message, f"Couldn't get a joke Sadge")
+        return
+
+    data = json.loads(r.data.decode("utf-8"))
+    joke = data["joke"].replace("\r\n", " ")
+    tools.smart_privmsg.send(
+        bot, message, f"{joke} ||| Get more jokes by typing ?joke"
+    )
diff --git a/ihaspeks/auto_messages/give_permission.py b/ihaspeks/auto_messages/give_permission.py
new file mode 100644 (file)
index 0000000..2347876
--- /dev/null
@@ -0,0 +1,15 @@
+from aptbot.bot import Message, Commands, Bot
+
+COOLDOWN = 120 * 60
+END_TIME = 0
+
+
+def main(bot: Bot, message: Message):
+    msg = "I collect data and occasionally post interesting statistics on peks' discord. "
+    msg += "The type of data you should expect to see is 'Chat frequency', 'Most used emotes', "
+    msg += "'Most active time and day', 'Reply graphs', etc. "
+    bot.send_privmsg(message.channel, msg)
+
+    msg = "If you are okay with these stats being publicly available with your name, "
+    msg += "please type ?accept_share to let me know. "
+    bot.send_privmsg(message.channel, msg)
diff --git a/ihaspeks/auto_messages/hello1.py b/ihaspeks/auto_messages/hello1.py
new file mode 100644 (file)
index 0000000..c10fadd
--- /dev/null
@@ -0,0 +1,9 @@
+from aptbot.bot import Message, Commands, Bot
+
+COOLDOWN = 9 * 60
+END_TIME = 0.5 * 60 * 60
+
+
+def main(bot: Bot, message: Message):
+    msg = "peepoWave"
+    bot.send_privmsg(message.channel, msg)
diff --git a/ihaspeks/auto_messages/hello2.py b/ihaspeks/auto_messages/hello2.py
new file mode 100644 (file)
index 0000000..f886261
--- /dev/null
@@ -0,0 +1,9 @@
+from aptbot.bot import Message, Commands, Bot
+
+COOLDOWN = 20 * 60
+END_TIME = 0
+
+
+def main(bot: Bot, message: Message):
+    msg = "Wanna ask 9ball a question and get an answer? use: ?9ball <question>"
+    bot.send_privmsg(message.channel, msg)
diff --git a/ihaspeks/auto_messages/hello3.py b/ihaspeks/auto_messages/hello3.py
new file mode 100644 (file)
index 0000000..5f5a65d
--- /dev/null
@@ -0,0 +1,9 @@
+from aptbot.bot import Message, Commands, Bot
+
+COOLDOWN = 30 * 60
+END_TIME = 1 * 60 * 60
+
+
+def main(bot: Bot, message: Message):
+    msg = "I'm a cute lil' wolf UwU and you're all cute lil' chatters OwO"
+    bot.send_privmsg(message.channel, msg)
diff --git a/ihaspeks/auto_messages/latege.py b/ihaspeks/auto_messages/latege.py
new file mode 100644 (file)
index 0000000..3011a2d
--- /dev/null
@@ -0,0 +1,30 @@
+from aptbot.bot import Message, Commands, Bot
+import datetime as dt
+from datetime import datetime
+import tools.smart_start_stream_time
+
+COOLDOWN = 180
+END_TIME = COOLDOWN * 5
+
+STREAM_SCHEDULE = dt.time(18, 30)
+
+
+def main(bot: Bot, message: Message):
+    start_stream_ts = tools.smart_start_stream_time.start_stream_timestamp()
+    if not start_stream_ts:
+        return
+    start_stream_dt = datetime.utcfromtimestamp(start_stream_ts)
+    stream_schedule_dt = datetime.combine(datetime.now(), STREAM_SCHEDULE)
+    latege_amount = (start_stream_dt - stream_schedule_dt).total_seconds()
+    if latege_amount > 45 * 60:
+        msg = f"{message.channel} is so Latege he might as well have not \
+            streamed today. At least he's early for tomorrow COPIUM . \
+            {message.channel} is Latege by {latege_amount} seconds Madge"
+    elif latege_amount > 0:
+        msg = f"{message.channel} is Latege by {latege_amount} seconds again Madge"
+    elif latege_amount == 0:
+        msg = f"Amazing!!! {message.channel} is EXACTLY on time today POGGERS"
+    else:
+        msg = f"UNBELIEVABLE!!!!! {message.channel} is EARLY by {-latege_amount} seconds!!!!\
+        Something very wrong is going on in this world monkaW"
+    bot.send_privmsg(message.channel, "/announce " + msg)
diff --git a/ihaspeks/auto_messages/queuehelp.py b/ihaspeks/auto_messages/queuehelp.py
new file mode 100644 (file)
index 0000000..04394df
--- /dev/null
@@ -0,0 +1,9 @@
+from aptbot.bot import Message, Commands, Bot
+
+COOLDOWN = 48 * 60
+END_TIME = 2.5 * 60 * 60
+
+
+def main(bot: Bot, message: Message):
+    msg = "IF YOU WANT TO PLAY WITH PEKS TYPE: ?join ------------------------------------------------------------------------------- You can find more info here: https://i.imgur.com/mv89SMr.png"
+    bot.send_privmsg(message.channel, msg)
diff --git a/ihaspeks/auto_messages/update_queue.py b/ihaspeks/auto_messages/update_queue.py
new file mode 100644 (file)
index 0000000..e7da3f9
--- /dev/null
@@ -0,0 +1,41 @@
+import os
+import sqlite3
+import time
+from aptbot.bot import Message, Commands, Bot
+
+COOLDOWN = 60
+END_TIME = 0
+
+PATH = os.path.dirname(os.path.realpath(__file__))
+PATH = os.path.join(PATH, "..")
+
+
+def main(bot: Bot, message: Message):
+    conn = sqlite3.connect(os.path.join(PATH, "lol_data.db"))
+    c = conn.cursor()
+
+    tables = ["lol_queue", "ow"]
+
+    for table in tables:
+        c.execute(
+            f"""
+            UPDATE
+                {table}
+            SET
+                last_available = ?,
+                time_remaining = time_remaining - (? - last_available)
+            WHERE
+                available = 0;
+            """,
+            (
+                int(time.time()),
+                int(time.time()),
+            ),
+        )
+        c.execute(f"DELETE FROM {table} WHERE time_remaining < 0;")
+        if c.rowcount:
+            bot.send_privmsg(message.channel, f"/announce {c.rowcount} user{'s were' if c.rowcount > 1 else ' was'} just removed from {table if table != 'lol_queue' else 'lol'} queue.")
+
+    conn.commit()
+
+    conn.close()
diff --git a/ihaspeks/auto_messages/youtube.py b/ihaspeks/auto_messages/youtube.py
new file mode 100644 (file)
index 0000000..63c3112
--- /dev/null
@@ -0,0 +1,17 @@
+from aptbot.bot import Message, Commands, Bot
+import yt_api.videos
+
+COOLDOWN = 42 * 60
+END_TIME = 0
+
+CHANNEL_ID = "UCQ7C3NUKY6TSkURdUdVoYFw"
+
+
+def main(bot: Bot, message: Message):
+    video = yt_api.videos.get_newest_video(CHANNEL_ID)
+    if video:
+        video_link = f"https://www.youtube.com/watch?v={video.video_id}"
+        msg = f'Watch Peks\' latest video "{video.video_name}" here: {video_link}'
+    else:
+        msg = f"Check out my youtube channel here -> https://www.youtube.com/channel/{CHANNEL_ID}"
+    bot.send_privmsg(message.channel, msg)
diff --git a/ihaspeks/commands/.info.py b/ihaspeks/commands/.info.py
new file mode 100644 (file)
index 0000000..516d02d
--- /dev/null
@@ -0,0 +1,18 @@
+from aptbot.bot import Message, Commands, Bot
+import tools.smart_start_stream_time
+
+PERMISSION = 99
+PREFIX = "?"
+DESCRIPTION = ""
+USER_COOLDOWN = 5
+GLOBAL_COOLDOWN = 2
+
+
+def main(bot: Bot, message: Message):
+    start_stream_ts = tools.smart_start_stream_time.start_stream_timestamp()
+    if not start_stream_ts:
+        msg = r"The Sponsor is World of Warships, which is a historical strategy online combat PC game. It looks very 5Head but i will conquer elmoFire so imma be testing it out. If u want to join in with us, try it urself, or if you just want to help me out Gladge u can sign up with my link: https://strms.net/warships_ihaspeks you get a fair few bonuses for using mah link too ihaspeBased and after u have won your first game and bought ur first ship ill get a notification on stream peksJAM"
+    else:
+        msg = r"Peks is live so he can awnser that KEKW but here is the link just in case BASED https://strms.net/warships_ihaspeks"
+    tools.smart_privmsg.send_safe(bot, message.channel, msg)
+
diff --git a/ihaspeks/commands/9ball.py b/ihaspeks/commands/9ball.py
new file mode 100644 (file)
index 0000000..cc8d056
--- /dev/null
@@ -0,0 +1,48 @@
+from aptbot.bot import Message, Commands, Bot
+import os
+import tools.smart_privmsg
+import openai
+from openai.error import RateLimitError
+
+PERMISSION = 99
+PREFIX = "?"
+DESCRIPTION = ""
+USER_COOLDOWN = 40
+GLOBAL_COOLDOWN = 20
+
+openai.api_key = os.getenv("OPENAI_API")
+
+def main(bot: Bot, message: Message):
+    replied_message = message.tags.get("reply-parent-msg-body", None)
+    if replied_message:
+        msg = replied_message
+        replied_msg_id = message.tags["reply-parent-msg-id"]
+    else:
+        msg = " ".join(message.value.split(" ")[1:])
+        replied_msg_id = message.tags['id']
+
+
+    try:
+        response = openai.Completion.create(
+            # model="davinci:ft-personal:9ball-2022-12-05-08-37-36",
+            model="davinci:ft-personal-2022-12-06-10-03-18",
+            prompt=f"9ball is an 8ball. 9ball answers your questions reluctantly with sarcastic and unhelpful responses.\n{message.nick}: {msg}\n\n###\n\n",
+            temperature=1,
+            max_tokens=60,
+            top_p=0.3,
+            frequency_penalty=0.5,
+            presence_penalty=0.0,
+            stop=[" END"],
+        )
+    except RateLimitError:
+        tools.smart_privmsg.send_safe(bot, message.channel, "UwU Sowwy. The sevwews awe ovewloaded :( Twy again in a few minutes OwO", reply=replied_msg_id)
+
+    print(response)
+    if response:
+        msg = response["choices"][0]["text"]
+        # msg = msg[:msg.find("#")]
+    else:
+        msg = "Sadge nothing was returned"
+
+    tools.smart_privmsg.send_safe(bot, message.channel, msg, reply=replied_msg_id)
+    # bot.send_privmsg(message.channel, msg, reply=replied_msg_id)
diff --git a/ihaspeks/commands/Q.py b/ihaspeks/commands/Q.py
new file mode 100644 (file)
index 0000000..897c07e
--- /dev/null
@@ -0,0 +1,165 @@
+from aptbot.bot import Message, Commands, Bot
+import os
+import logging
+import ttv_api.users
+import sqlite3
+import tools.smart_privmsg
+import random
+import shlex
+
+logger = logging.getLogger(__name__)
+
+PERMISSION = 99
+PREFIX = "?"
+DESCRIPTION = r"Check who's currently in queue."
+USER_COOLDOWN = 30
+GLOBAL_COOLDOWN = 15
+
+PATH = os.path.dirname(os.path.realpath(__file__))
+PATH = os.path.join(PATH, "..")
+
+def check_queue(bot: Bot, message: Message, table: str):
+    if random.random() < 0.02:
+        q = [
+            "https://imgur.com/d5qGioI",
+            "https://imgur.com/oaMmxXI",
+            "https://imgur.com/4btWipx",
+            "https://imgur.com/VvvD8d8",
+            "https://imgur.com/v7oflTv",
+            "https://imgur.com/MSnBNDz",
+            "https://imgur.com/x2pPkvw",
+            "https://imgur.com/xZgFcYG",
+        ]
+        msg = (
+            "You wanted to see the queue, but instead you got visited by the Q. monkaW "
+        )
+        msg += random.choice(q)
+        tools.smart_privmsg.send(
+            bot,
+            message,
+            msg,
+            reply=message.tags["id"],
+        )
+        return
+    conn = sqlite3.connect(os.path.join(PATH, "lol_data.db"))
+    c = conn.cursor()
+
+    c.execute(
+        f"""
+        SELECT twitch_id, priority_queue FROM {table} WHERE available = 1 ORDER BY position ASC;
+        """
+    )
+    fetched = c.fetchall()
+    queue = [x[0] for x in fetched]
+    twitch = ttv_api.users.get_users(user_ids=queue)
+
+    if not twitch:
+        bot.send_privmsg(
+            message.channel,
+            "There was an issue fetching twitch data. Sadge",
+            reply=message.tags["id"],
+        )
+        conn.close()
+        return
+    queue_users = []
+    for twitch_id in queue:
+        for twitch_user in twitch:
+            if int(twitch_user.user_id) == int(twitch_id):
+                queue_users.append(twitch_user)
+                break
+        else:
+            bot.send_privmsg(
+                message.channel,
+                f"There was an issue fetching data from the user with id {twitch_id}. They won't be in the list. This is a very weird problem to have occured. Sadge",
+                reply=message.tags["id"],
+            )
+    c.execute(
+        f"""
+        SELECT data FROM {table}_data WHERE name = 'queuesize';
+        """
+    )
+    try:
+        queue_size = c.fetchone()[0]
+    except TypeError:
+        queue_size = 5
+        bot.send_privmsg(
+            message.channel,
+            f"There was an issue fetching the queue size, default set to {queue_size}",
+            reply=message.tags["id"],
+        )
+
+    c.execute(
+        f"""
+        SELECT twitch_id FROM {table} WHERE available = 0 ORDER BY position ASC;
+        """
+    )
+    fetched_unavailable = c.fetchall()
+    unavailable = [x[0] for x in fetched_unavailable]
+    twitch_unavailable = ttv_api.users.get_users(user_ids=unavailable)
+
+    unavailable_users = []
+    for twitch_id in unavailable:
+        for twitch_user in twitch_unavailable:
+            if int(twitch_user.user_id) == int(twitch_id):
+                unavailable_users.append(twitch_user.display_name)
+                break
+        else:
+            bot.send_privmsg(
+                message.channel,
+                f"There was an issue fetching data from the user with id {twitch_id}. They won't be in the list. This is a very weird problem to have occured. Sadge",
+                reply=message.tags["id"],
+            )
+
+    play_list = [user.display_name for user in queue_users[0:queue_size]]
+    prio_queue = []
+    wait_list = []
+    for user in queue_users[queue_size:]:
+        for fetch in fetched:
+            if int(user.user_id) == fetch[0] and fetch[1] == 1:
+                prio_queue.append(user.display_name)
+            elif int(user.user_id) == fetch[0]:
+                wait_list.append(user.display_name)
+
+    if prio_queue:
+        msg = f"These people are playing with {play_list[0]}: {play_list[1:]} | These people are in Priority Queue: {prio_queue} | These people are in the Wait List: {wait_list}."
+    else:
+        msg = f"These people are playing with {play_list[0]}: {play_list[1:]} | These people are in the Wait List: {wait_list}."
+
+    if unavailable_users:
+        msg += f" | These people are also not here: {unavailable_users}."
+
+    tools.smart_privmsg.send(
+        bot,
+        message,
+        msg,
+        reply=message.tags["id"],
+    )
+
+    conn.close()
+
+
+def parse(query):
+    query = query.split()
+    try:
+        if query[0].lower() in {"ow", "overwatch", "ow2", "overwatch2"}:
+            return {"--game": "ow"}
+    except:
+        pass
+    return {"--game": "lol_queue"}
+    d = dict()
+    for i in shlex.split(query):
+        try:
+            d[i.split('=')[0]] = i.split('=')[1]
+        except:
+            pass
+    return d
+
+
+def scrub(table_name):
+    return ''.join(chr for chr in table_name if chr.isalnum() or chr == '_')
+
+
+def main(bot: Bot, message: Message):
+    args = " ".join(message.value.split(" ")[1:])
+    args = parse(args)
+    check_queue(bot, message, scrub(args.get("--game", "lol_queue")))
diff --git a/ihaspeks/commands/accept_share.py b/ihaspeks/commands/accept_share.py
new file mode 100644 (file)
index 0000000..80a7f6e
--- /dev/null
@@ -0,0 +1,28 @@
+from aptbot.bot import Message, Commands, Bot
+import tools.smart_privmsg
+import os
+
+PERMISSION = 99
+PREFIX = "?"
+DESCRIPTION = ""
+USER_COOLDOWN = 30
+GLOBAL_COOLDOWN = 15
+
+
+COMMANDS_PATH = os.path.dirname(os.path.realpath(__file__))
+PATH = os.path.join(COMMANDS_PATH, "..")
+DATA_PATH = os.path.join(PATH, "data")
+
+
+def main(bot: Bot, message: Message):
+    accepted_path = os.path.join(DATA_PATH, "permission")
+    with open(accepted_path, "r") as f:
+        accepted = [user_id.rstrip() for user_id in f]
+    if message.tags["user-id"] in accepted:
+        tools.smart_privmsg.send(bot, message, "You have already given permission")
+        return
+
+    with open(accepted_path, "a") as f:
+        f.write(f"{message.tags['user-id']}\n")
+    tools.smart_privmsg.send(bot, message, "Thank you for giving permission")
+
diff --git a/ihaspeks/commands/addaccount.py b/ihaspeks/commands/addaccount.py
new file mode 100644 (file)
index 0000000..69cdfb2
--- /dev/null
@@ -0,0 +1,75 @@
+from aptbot.bot import Message, Commands, Bot
+import sqlite3
+import os
+import logging
+import lol_api.summoner_v4
+import ttv_api.users
+
+logger = logging.getLogger(__name__)
+
+
+PERMISSION = 10
+PREFIX = "\\"
+DESCRIPTION = "Adds a LoL account to the database. Use: \\addaccount <summoner name> | <twitch name>"
+USER_COOLDOWN = 0
+GLOBAL_COOLDOWN = 0
+
+PATH = os.path.dirname(os.path.realpath(__file__))
+PATH = os.path.join(PATH, "..")
+
+
+def main(bot: Bot, message: Message):
+    msg = " ".join(message.value.split(" ")[1:])
+    summoner_name, twitch_name = msg.split("|")
+    twitch_name = twitch_name.strip()
+    summoner = lol_api.summoner_v4.get_summoner_from_name(summoner_name)
+    twitch = ttv_api.users.get_users(user_logins=[twitch_name])
+    if not summoner:
+        logger.warning(f"Account {summoner_name} wasn't able to be added")
+        bot.send_privmsg(
+            message.channel, f"Error, unable to add summoner: {summoner_name}"
+        )
+        return
+    if not twitch:
+        logger.warning(f"Unable to use twitch account {twitch_name}")
+        bot.send_privmsg(
+            message.channel, f"Error, unable to use twitch account: {twitch_name}"
+        )
+        return
+    twitch_id = twitch[0].user_id
+
+    conn = sqlite3.connect(os.path.join(PATH, "lol_data.db"))
+    c = conn.cursor()
+
+    try:
+        c.execute(
+            """
+            INSERT INTO accounts (
+                "puuid",
+                "summoner_id",
+                "account_id",
+                "twitch_id"
+            ) VALUES (
+                ?, ?, ?, ?
+            );
+            """,
+            (
+                summoner.puuid,
+                summoner.summoner_id,
+                summoner.account_id,
+                twitch_id,
+            ),
+        )
+    except sqlite3.IntegrityError:
+        logger.warning(
+            f"Unable to add account with puuid: {summoner.puuid} and twitch id: {twitch_id}. Account probably already exists"
+        )
+        bot.send_privmsg(message.channel, f"Account already exists.")
+        conn.close()
+        return
+    conn.commit()
+    logger.info(
+        f"Successfully added account with puuid: {summoner.puuid} and twitch id: {twitch_id}"
+    )
+    bot.send_privmsg(message.channel, f"Successfully added account.")
+    conn.close()
diff --git a/ihaspeks/commands/addcommand.py b/ihaspeks/commands/addcommand.py
new file mode 100644 (file)
index 0000000..f430b46
--- /dev/null
@@ -0,0 +1,80 @@
+from aptbot.bot import Message, Commands, Bot
+import sqlite3
+import os
+
+PERMISSION = 10
+PREFIX = "\\"
+DESCRIPTION = ""
+USER_COOLDOWN = 0
+GLOBAL_COOLDOWN = 0
+
+PATH = os.path.dirname(os.path.realpath(__file__))
+PATH = os.path.join(PATH, "..")
+
+DEFAULT_PERMISSION = 99
+DEFAULT_DESCRIPTION = ""
+DEFAULT_USER_COOLDOWN = 5
+DEFAULT_GLOBAL_COOLDOWN = 0
+DEFAULT_LAST_USED = 0
+
+
+def main(bot: Bot, message: Message):
+    msg = " ".join(message.value.split(" ")[1:])
+    command = msg.split(" ")[0]
+    command_prefix = command[0]
+    command_name = command[1:]
+    command_value = msg = " ".join(msg.split(" ")[1:])
+    if command_prefix != "?":
+        bot.send_privmsg(
+            message.channel,
+            f"{message.nick} you cannot use {command_prefix} as a prefix",
+        )
+        return
+
+    conn = sqlite3.connect(os.path.join(PATH, "database.db"))
+    c = conn.cursor()
+    c.execute(
+        "SELECT value FROM commands LEFT JOIN command_values USING(command) WHERE command = ? AND prefix = ?",
+        (
+            command_name,
+            command_prefix,
+        ),
+    )
+    try:
+        if not c.fetchone()[0]:
+            bot.send_privmsg(
+                message.channel,
+                f"The command {command_prefix}{command_name} already exists",
+            )
+            return
+    except TypeError:
+        pass
+    try:
+        c.execute(
+            "INSERT INTO commands VALUES (?, ?, ?, ?, ?, ?, ?)",
+            (
+                command_name,
+                command_prefix,
+                DEFAULT_PERMISSION,
+                DEFAULT_DESCRIPTION,
+                DEFAULT_USER_COOLDOWN,
+                DEFAULT_GLOBAL_COOLDOWN,
+                DEFAULT_LAST_USED,
+            ),
+        )
+    except sqlite3.IntegrityError:
+        pass
+    except Exception as e:
+        bot.send_privmsg(message.channel, f"There was an error adding the command: {e}")
+        conn.close()
+        return
+    c.execute(
+        "INSERT INTO command_values VALUES (?, ?)",
+        (
+            command_name,
+            command_value,
+        ),
+    )
+    bot.send_privmsg(message.channel, f"Successfully added {command_name}.")
+    conn.commit()
+    conn.close()
diff --git a/ihaspeks/commands/cannon.py b/ihaspeks/commands/cannon.py
new file mode 100644 (file)
index 0000000..da342b6
--- /dev/null
@@ -0,0 +1,112 @@
+from aptbot.bot import Message, Commands, Bot
+import os
+import logging
+import ttv_api.users
+import sqlite3
+import tools.smart_privmsg
+import random
+import shlex
+
+logger = logging.getLogger(__name__)
+
+PERMISSION = 99
+PREFIX = "?"
+DESCRIPTION = r"Sekiro death counter"
+USER_COOLDOWN = 10
+GLOBAL_COOLDOWN = 5
+
+PATH = os.path.dirname(os.path.realpath(__file__))
+PATH = os.path.join(PATH, "..")
+
+def check_queue(bot: Bot, message: Message, table: str):
+    conn = sqlite3.connect(os.path.join(PATH, "database.db"))
+    c = conn.cursor()
+
+    c.execute(
+        f"""
+        SELECT id, val FROM varvalues WHERE id = 'cannon';
+        """
+    )
+    _, val = c.fetchone()
+
+    if table == "show":
+        msg = f"Peks is at cannon {val % 1000} of prestige {val // 1000}"
+
+        tools.smart_privmsg.send(
+            bot,
+            message,
+            msg,
+            reply=message.tags["id"],
+        )
+
+        conn.close()
+        return
+    if table == "remove":
+        val = val - 1
+        c.execute(
+            f"""
+            UPDATE varvalues SET val = ? WHERE id = 'cannon';
+            """,
+            (val,)
+        )
+
+        msg = f"Peks is at cannon {val % 1000} of prestige {val // 1000}"
+
+        tools.smart_privmsg.send(
+            bot,
+            message,
+            msg,
+            reply=message.tags["id"],
+        )
+        conn.commit()
+        conn.close()
+        return
+    if table == "add":
+        val = val + 1
+        c.execute(
+            f"""
+            UPDATE varvalues SET val = ? WHERE id = 'cannon';
+            """,
+            (val,)
+        )
+
+        msg = f"Peks is at cannon {val % 1000} of prestige {val // 1000}"
+
+        tools.smart_privmsg.send(
+            bot,
+            message,
+            msg,
+            reply=message.tags["id"],
+        )
+        conn.commit()
+        conn.close()
+        return
+
+
+def parse(query):
+    query = query.split()
+    try:
+        if query[0].lower() == "add":
+            return {"--do": "add"}
+        if query[0].lower() == "remove":
+            return {"--do": "remove"}
+    except:
+        pass
+    return {"--game": "show"}
+    d = dict()
+    for i in shlex.split(query):
+        try:
+            d[i.split('=')[0]] = i.split('=')[1]
+        except:
+            pass
+    return d
+
+
+def scrub(table_name):
+    return ''.join(chr for chr in table_name if chr.isalnum() or chr == '_')
+
+
+def main(bot: Bot, message: Message):
+    args = " ".join(message.value.split(" ")[1:])
+    args = parse(args)
+    check_queue(bot, message, scrub(args.get("--do", "show")))
diff --git a/ihaspeks/commands/cleanqueue.py b/ihaspeks/commands/cleanqueue.py
new file mode 100644 (file)
index 0000000..ed3d447
--- /dev/null
@@ -0,0 +1,91 @@
+from aptbot.bot import Message, Commands, Bot
+import os
+import logging
+import ttv_api.users
+import sqlite3
+import time
+import shlex
+
+logger = logging.getLogger(__name__)
+
+PERMISSION = 10
+PREFIX = "\\"
+DESCRIPTION = r"Cleans the whole queue"
+USER_COOLDOWN = 0
+GLOBAL_COOLDOWN = 0
+
+PATH = os.path.dirname(os.path.realpath(__file__))
+PATH = os.path.join(PATH, "..")
+
+
+def clean_queue(bot: Bot, message: Message, table: str):
+    twitch = ttv_api.users.get_users(user_logins=[message.channel])
+    if not twitch:
+        bot.send_privmsg(
+            message.channel,
+            f"There was an issue fetching {message.channel} twitch data. The queue was not cleared.",
+            reply=message.tags["id"],
+        )
+        return
+    twitch_id = twitch[0].user_id
+
+    conn = sqlite3.connect(os.path.join(PATH, "lol_data.db"))
+    c = conn.cursor()
+
+    c.execute(f"DELETE FROM {table}")
+    conn.commit()
+
+    c.execute(
+        f"""
+        INSERT INTO {table} (
+            "twitch_id",
+            "position",
+            "available",
+            "last_available",
+            "time_remaining"
+        ) VALUES (?, ?, ?, ?, ?);
+        """,
+        (
+            twitch_id,
+            0,
+            1,
+            None,
+            9999999,
+        ),
+    )
+    conn.commit()
+
+    bot.send_privmsg(
+        message.channel,
+        f"Successfully cleaned the queue.",
+        reply=message.tags["id"],
+    )
+
+    conn.close()
+
+
+def parse(query):
+    query = query.split()
+    try:
+        if query[0].lower() in {"ow", "overwatch", "ow2", "overwatch2"}:
+            return {"--game": "ow"}
+    except:
+        pass
+    return {"--game": "lol_queue"}
+    d = dict()
+    for i in shlex.split(query):
+        try:
+            d[i.split('=')[0]] = i.split('=')[1]
+        except:
+            pass
+    return d
+
+
+def scrub(table_name):
+    return ''.join(chr for chr in table_name if chr.isalnum() or chr == '_')
+
+
+def main(bot: Bot, message: Message):
+    args = " ".join(message.value.split(" ")[1:])
+    args = parse(args)
+    clean_queue(bot, message, scrub(args.get("--game", "lol_queue")))
diff --git a/ihaspeks/commands/coin.py b/ihaspeks/commands/coin.py
new file mode 100644 (file)
index 0000000..8c16940
--- /dev/null
@@ -0,0 +1,26 @@
+from aptbot.bot import Message, Commands, Bot
+import tools.smart_privmsg
+import random
+
+PERMISSION = 99
+PREFIX = "?"
+DESCRIPTION = (
+    r"Tosses a coin, there's a 50% chance it's heads and a 50% chance it's tails"
+)
+USER_COOLDOWN = 10
+GLOBAL_COOLDOWN = 5
+
+
+def main(bot: Bot, message: Message):
+    r = random.random()
+    if r < 0.02:
+        tools.smart_privmsg.send(
+            bot,
+            message,
+            f"the coin landed on it's side, try again.",
+            reply=message.tags["id"],
+        )
+    elif r < 0.51:
+        tools.smart_privmsg.send(bot, message, f"heads", reply=message.tags["id"])
+    else:
+        tools.smart_privmsg.send(bot, message, f"tails", reply=message.tags["id"])
diff --git a/ihaspeks/commands/commands.py b/ihaspeks/commands/commands.py
new file mode 100644 (file)
index 0000000..2c62bbe
--- /dev/null
@@ -0,0 +1,39 @@
+from aptbot.bot import Message, Commands, Bot
+import tools.permissions
+import tools.smart_privmsg
+import sqlite3
+import os
+
+PERMISSION = 99
+PREFIX = "?"
+DESCRIPTION = ""
+USER_COOLDOWN = 30
+GLOBAL_COOLDOWN = 15
+
+
+COMMANDS_PATH = os.path.dirname(os.path.realpath(__file__))
+PATH = os.path.join(COMMANDS_PATH, "..")
+
+
+def main(bot: Bot, message: Message):
+    conn = sqlite3.connect(os.path.join(PATH, "database.db"))
+    c = conn.cursor()
+
+    user_perm = tools.permissions.get_permission_from_id(message.tags["user-id"])
+
+    c.execute(
+        "SELECT prefix, command FROM commands WHERE permission >= ? ORDER BY permission ASC",
+        (user_perm,),
+    )
+
+    fetched_commands = c.fetchall()
+
+    conn.commit()
+    conn.close()
+
+    commands = []
+    for command in fetched_commands:
+        commands.append(f"{command[0]}{command[1]}")
+
+    commands = " ".join(commands)
+    tools.smart_privmsg.send(bot, message, commands)
diff --git a/ihaspeks/commands/deadge.py b/ihaspeks/commands/deadge.py
new file mode 100644 (file)
index 0000000..3c16538
--- /dev/null
@@ -0,0 +1,112 @@
+from aptbot.bot import Message, Commands, Bot
+import os
+import logging
+import ttv_api.users
+import sqlite3
+import tools.smart_privmsg
+import random
+import shlex
+
+logger = logging.getLogger(__name__)
+
+PERMISSION = 99
+PREFIX = "?"
+DESCRIPTION = r"Sekiro death counter"
+USER_COOLDOWN = 10
+GLOBAL_COOLDOWN = 5
+
+PATH = os.path.dirname(os.path.realpath(__file__))
+PATH = os.path.join(PATH, "..")
+
+def check_queue(bot: Bot, message: Message, table: str):
+    conn = sqlite3.connect(os.path.join(PATH, "database.db"))
+    c = conn.cursor()
+
+    c.execute(
+        f"""
+        SELECT id, val FROM varvalues WHERE id = 'deadge_sekiro';
+        """
+    )
+    _, val = c.fetchone()
+
+    if table == "show":
+        msg = f"Peks has currently died {val} times"
+
+        tools.smart_privmsg.send(
+            bot,
+            message,
+            msg,
+            reply=message.tags["id"],
+        )
+
+        conn.close()
+        return
+    if table == "remove":
+        val = val - 1
+        c.execute(
+            f"""
+            UPDATE varvalues SET val = ? WHERE id = 'deadge_sekiro';
+            """,
+            (val,)
+        )
+
+        msg = f"Peks has currently died {val} times"
+
+        tools.smart_privmsg.send(
+            bot,
+            message,
+            msg,
+            reply=message.tags["id"],
+        )
+        conn.commit()
+        conn.close()
+        return
+    if table == "add":
+        val = val + 1
+        c.execute(
+            f"""
+            UPDATE varvalues SET val = ? WHERE id = 'deadge_sekiro';
+            """,
+            (val,)
+        )
+
+        msg = f"Peks has currently died {val} times"
+
+        tools.smart_privmsg.send(
+            bot,
+            message,
+            msg,
+            reply=message.tags["id"],
+        )
+        conn.commit()
+        conn.close()
+        return
+
+
+def parse(query):
+    query = query.split()
+    try:
+        if query[0].lower() == "add":
+            return {"--do": "add"}
+        if query[0].lower() == "remove":
+            return {"--do": "remove"}
+    except:
+        pass
+    return {"--game": "show"}
+    d = dict()
+    for i in shlex.split(query):
+        try:
+            d[i.split('=')[0]] = i.split('=')[1]
+        except:
+            pass
+    return d
+
+
+def scrub(table_name):
+    return ''.join(chr for chr in table_name if chr.isalnum() or chr == '_')
+
+
+def main(bot: Bot, message: Message):
+    args = " ".join(message.value.split(" ")[1:])
+    args = parse(args)
+    check_queue(bot, message, scrub(args.get("--do", "show")))
diff --git a/ihaspeks/commands/delete.py b/ihaspeks/commands/delete.py
new file mode 100644 (file)
index 0000000..05a8c75
--- /dev/null
@@ -0,0 +1,16 @@
+from aptbot.bot import Message, Commands, Bot
+
+PERMISSION = 10
+PREFIX = "\\"
+DESCRIPTION = "Reply to a message with \\delete to delete that message"
+USER_COOLDOWN = 0
+GLOBAL_COOLDOWN = 0
+
+
+def main(bot: Bot, message: Message):
+    try:
+        replied_msg_id = message.tags["reply-parent-msg-id"]
+    except KeyError:
+        return
+    delete = f"/delete {replied_msg_id}"
+    bot.send_privmsg(message.channel, delete)
diff --git a/ihaspeks/commands/editcommand.py b/ihaspeks/commands/editcommand.py
new file mode 100644 (file)
index 0000000..86a98de
--- /dev/null
@@ -0,0 +1,58 @@
+from aptbot.bot import Message, Commands, Bot
+import sqlite3
+import os
+
+PERMISSION = 10
+PREFIX = "\\"
+DESCRIPTION = ""
+USER_COOLDOWN = 0
+GLOBAL_COOLDOWN = 0
+
+
+COMMANDS_PATH = os.path.dirname(os.path.realpath(__file__))
+PATH = os.path.join(COMMANDS_PATH, "..")
+
+
+def main(bot: Bot, message: Message):
+    msg = " ".join(message.value.split(" ")[1:])
+    command = msg.split(" ")[0]
+    command_prefix = command[0]
+    command_name = command[1:]
+    command_value = msg = " ".join(msg.split(" ")[1:])
+    if command_prefix != "?":
+        bot.send_privmsg(
+            message.channel,
+            f"{message.nick} you cannot use {command_prefix} as a prefix",
+        )
+        return
+
+    conn = sqlite3.connect(os.path.join(PATH, "database.db"))
+    c = conn.cursor()
+    c.execute(
+        "SELECT value FROM commands LEFT JOIN command_values USING(command) WHERE command = ? AND prefix = ?",
+        (
+            command_name,
+            command_prefix,
+        ),
+    )
+    if not c.fetchone()[0]:
+        bot.send_privmsg(
+            message.channel,
+            f"The command {command_prefix}{command_name} cannot be edited",
+        )
+        return
+
+    try:
+        c.execute(
+            "UPDATE command_values SET value = ? WHERE command = ?",
+            (
+                command_value,
+                command_name,
+            ),
+        )
+    except sqlite3.IntegrityError:
+        bot.send_privmsg(message.channel, f"The command {command_name} doesn't exist.")
+    else:
+        bot.send_privmsg(message.channel, f"Successfully updated {command_name}.")
+    conn.commit()
+    conn.close()
diff --git a/ihaspeks/commands/emotes.py b/ihaspeks/commands/emotes.py
new file mode 100644 (file)
index 0000000..d18808f
--- /dev/null
@@ -0,0 +1,33 @@
+from aptbot.bot import Message, Commands, Bot
+import tools.smart_privmsg
+import urllib3
+
+PERMISSION = 9
+PREFIX = "\\"
+DESCRIPTION = ""
+USER_COOLDOWN = 900
+GLOBAL_COOLDOWN = 600
+
+
+def main(bot: Bot, message: Message):
+    http = urllib3.PoolManager()
+    r1 = http.request(
+        "GET",
+        f"https://twitch.center/customapi/bttvemotes?channel={message.channel}",
+    )
+    r2 = http.request(
+        "GET",
+        f"https://twitch.center/customapi/ffzemotes?channel={message.channel}",
+    )
+
+    if r1.status != 200 or r2.status != 200:
+        bot.send_privmsg(
+            message.channel,
+            "NotLikeThis oopsie woopsie, we've made a fucky wucky. We can't \
+            get the emotes at the moment. Hopefuwwy UwU wiww wait patientwy \
+            tiww we get thiws pwobwem sowted. OwO",
+        )
+        return
+    emotes = r1.data.decode("utf-8")
+    emotes += " " + r2.data.decode("utf-8")
+    tools.smart_privmsg.send(bot, message, emotes)
diff --git a/ihaspeks/commands/forcehere.py b/ihaspeks/commands/forcehere.py
new file mode 100644 (file)
index 0000000..0c27769
--- /dev/null
@@ -0,0 +1,282 @@
+from aptbot.bot import Message, Commands, Bot
+import os
+import shlex
+import logging
+import ttv_api.users
+import sqlite3
+import time
+
+logger = logging.getLogger(__name__)
+
+PERMISSION = 10
+PREFIX = "\\"
+DESCRIPTION = r"Force user to become available in the list."
+USER_COOLDOWN = 0
+GLOBAL_COOLDOWN = 0
+
+PATH = os.path.dirname(os.path.realpath(__file__))
+PATH = os.path.join(PATH, "..")
+
+
+def force_here(bot: Bot, message: Message, table: str):
+    twitch_name = message.tags.get("reply-parent-user-login", None)
+    if not twitch_name:
+        twitch_name = message.value.split(" ")[1]
+    twitch = ttv_api.users.get_users(user_logins=[twitch_name])
+    if not twitch:
+        bot.send_privmsg(
+            message.channel,
+            "There was an issue fetching their twitch data. They weren't made unavailable.",
+            reply=message.tags["id"],
+        )
+        return
+    twitch_id = twitch[0].user_id
+    conn = sqlite3.connect(os.path.join(PATH, "lol_data.db"))
+    c = conn.cursor()
+
+    c.execute(
+        f"""
+        UPDATE
+            {table}
+        SET
+            position = (
+                CASE
+                    WHEN (
+                        SELECT
+                            position
+                        FROM
+                            {table}
+                        WHERE
+                            twitch_id = ?
+                    ) < (
+                        SELECT
+                            max(position)
+                        FROM (
+                            SELECT
+                                position
+                            FROM
+                                {table}
+                            WHERE
+                                available = 1
+                            ORDER BY
+                                position
+                            LIMIT (
+                                SELECT
+                                    data
+                                FROM
+                                    {table}_data
+                                WHERE
+                                    name = 'queuesize'
+                            )
+                        )
+                    )
+                    THEN position + 1
+                    ELSE position
+                END
+            )
+        WHERE
+            position > (
+                SELECT
+                    max(position)
+                FROM
+                    {table}
+                WHERE
+                    priority_queue = 1
+                    OR position <= (
+                        SELECT
+                            max(position)
+                        FROM (
+                            SELECT
+                                position
+                            FROM
+                                {table}
+                            WHERE
+                                available = 1
+                            ORDER BY 
+                                position
+                            LIMIT (
+                                SELECT
+                                    data
+                                FROM
+                                    {table}_data
+                                WHERE
+                                    name = 'queuesize'
+                            )
+                        )
+                            
+                    )
+            );
+        """,
+        (twitch_id,),
+    )
+
+    c.execute(
+        f"""
+        UPDATE
+            {table}
+        SET 
+            available = 1,
+            priority_queue = (
+                CASE
+                    WHEN (
+                        SELECT
+                            position
+                        FROM
+                            {table}
+                        WHERE
+                            twitch_id = ?
+                    ) < (
+                        SELECT
+                            max(position)
+                        FROM (
+                            SELECT
+                                position
+                            FROM
+                                {table}
+                            WHERE
+                                available = 1
+                            ORDER BY 
+                                position
+                            LIMIT (
+                                SELECT
+                                    data
+                                FROM
+                                    {table}_data
+                                WHERE
+                                    name = 'queuesize'
+                            )
+                        )
+                    )
+                    THEN 1
+                    ELSE null
+                END
+            ),
+            position = (
+                CASE
+                    WHEN (
+                        SELECT
+                            position
+                        FROM
+                            {table}
+                        WHERE
+                            twitch_id = ?
+                    ) < (
+                        SELECT
+                            max(position)
+                        FROM (
+                            SELECT
+                                position
+                            FROM
+                                {table}
+                            WHERE
+                                available = 1
+                            ORDER BY 
+                                position
+                            LIMIT (
+                                SELECT
+                                    data
+                                FROM
+                                    {table}_data
+                                WHERE
+                                    name = 'queuesize'
+                            )
+                        )
+                    )
+                    THEN 1 + (
+                        SELECT
+                            max(position)
+                        FROM
+                            {table}
+                        WHERE
+                            priority_queue = 1
+                            OR position <= (
+                                SELECT
+                                    max(position)
+                                FROM (
+                                    SELECT
+                                        position
+                                    FROM
+                                        {table}
+                                    WHERE
+                                        available = 1
+                                    ORDER BY 
+                                        position
+                                    LIMIT (
+                                        SELECT
+                                            data
+                                        FROM
+                                            {table}_data
+                                        WHERE
+                                            name = 'queuesize'
+                                    )
+                                )
+                            )
+                    )
+                    ELSE position
+                END
+            ),
+            time_remaining = time_remaining - (? - last_available)
+        WHERE 
+            twitch_id = ?
+            AND available = 0;
+        """,
+        (
+            twitch_id,
+            twitch_id,
+            int(time.time()),
+            twitch_id,
+        ),
+    )
+    if c.rowcount < 1:
+        bot.send_privmsg(
+            message.channel,
+            "They aren't in the list or they were already available.",
+            reply=message.tags["id"],
+        )
+        conn.close()
+        return
+    conn.commit()
+    c.execute(f"DELETE FROM {table} WHERE time_remaining < 0;")
+    if c.rowcount > 0:
+        bot.send_privmsg(
+            message.channel,
+            "They were unavailable for too long, they have been removed from the list.",
+            reply=message.tags["id"],
+        )
+        conn.commit()
+        conn.close()
+        return
+    conn.commit()
+    bot.send_privmsg(
+        message.channel,
+        "Successfully made them available",
+        reply=message.tags["id"],
+    )
+    conn.close()
+
+
+def parse(query):
+    query = query.split()
+    try:
+        if query[1].lower() in {"ow", "overwatch", "ow2", "overwatch2"}:
+            return {"--game": "ow"}
+    except:
+        pass
+    return {"--game": "lol_queue"}
+    d = dict()
+    for i in shlex.split(query):
+        try:
+            d[i.split('=')[0]] = i.split('=')[1]
+        except:
+            pass
+    return d
+
+
+def scrub(table_name):
+    return ''.join(chr for chr in table_name if chr.isalnum() or chr == '_')
+
+
+def main(bot: Bot, message: Message):
+    args = " ".join(message.value.split(" ")[1:])
+    args = parse(args)
+    force_here(bot, message, scrub(args.get("--game", "lol_queue")))
diff --git a/ihaspeks/commands/forcejoin.py b/ihaspeks/commands/forcejoin.py
new file mode 100644 (file)
index 0000000..df60a98
--- /dev/null
@@ -0,0 +1,109 @@
+from aptbot.bot import Message, Commands, Bot
+import shlex
+import os
+import logging
+import ttv_api.users
+import sqlite3
+
+logger = logging.getLogger(__name__)
+
+PERMISSION = 10
+PREFIX = "\\"
+DESCRIPTION = r"Force user to join the queue to play the game with the streamer."
+USER_COOLDOWN = 0
+GLOBAL_COOLDOWN = 0
+
+PATH = os.path.dirname(os.path.realpath(__file__))
+PATH = os.path.join(PATH, "..")
+
+DEFAULT_TIME_REMAINING = 60 * 60
+
+
+def force_join(bot: Bot, message: Message, table: str):
+    twitch_name = message.tags.get("reply-parent-user-login", None)
+    if not twitch_name:
+        twitch_name = message.value.split(" ")[1]
+    twitch = ttv_api.users.get_users(user_logins=[twitch_name])
+    if not twitch:
+        bot.send_privmsg(
+            message.channel,
+            "There was an issue fetching the user's twitch data. They weren't added to the list Sadge",
+            reply=message.tags["id"],
+        )
+        return
+    twitch_id = twitch[0].user_id
+    conn = sqlite3.connect(os.path.join(PATH, "lol_data.db"))
+    c = conn.cursor()
+
+    c.execute(
+        f"""
+        SELECT position FROM {table} ORDER BY position DESC;
+        """
+    )
+
+    try:
+        last_position: int = c.fetchone()[0]
+    except TypeError:
+        last_position: int = -1
+
+    try:
+        c.execute(
+            f"""
+            INSERT INTO {table} (
+                "twitch_id",
+                "position",
+                "available",
+                "last_available",
+                "time_remaining"
+            ) VALUES (?, ?, ?, ?, ?);
+            """,
+            (
+                twitch_id,
+                last_position + 1,
+                1,
+                None,
+                DEFAULT_TIME_REMAINING,
+            ),
+        )
+    except sqlite3.IntegrityError:
+        bot.send_privmsg(
+            message.channel,
+            "They are already added into the list",
+            reply=message.tags["id"],
+        )
+        conn.close()
+        return
+    conn.commit()
+    bot.send_privmsg(
+        message.channel,
+        "Successfully added them into the list",
+        reply=message.tags["id"],
+    )
+    conn.close()
+
+
+def parse(query):
+    query = query.split()
+    try:
+        if query[1].lower() in {"ow", "overwatch", "ow2", "overwatch2"}:
+            return {"--game": "ow"}
+    except:
+        pass
+    return {"--game": "lol_queue"}
+    d = dict()
+    for i in shlex.split(query):
+        try:
+            d[i.split('=')[0]] = i.split('=')[1]
+        except:
+            pass
+    return d
+
+
+def scrub(table_name):
+    return ''.join(chr for chr in table_name if chr.isalnum() or chr == '_')
+
+
+def main(bot: Bot, message: Message):
+    args = " ".join(message.value.split(" ")[1:])
+    args = parse(args)
+    force_join(bot, message, scrub(args.get("--game", "lol_queue")))
diff --git a/ihaspeks/commands/forceleave.py b/ihaspeks/commands/forceleave.py
new file mode 100644 (file)
index 0000000..62cce65
--- /dev/null
@@ -0,0 +1,83 @@
+from aptbot.bot import Message, Commands, Bot
+import os
+import logging
+import ttv_api.users
+import sqlite3
+import shlex
+
+logger = logging.getLogger(__name__)
+
+PERMISSION = 10
+PREFIX = "\\"
+DESCRIPTION = r"Force user to leave the queue which gives them the privalege to play with the streamer."
+USER_COOLDOWN = 0
+GLOBAL_COOLDOWN = 0
+
+PATH = os.path.dirname(os.path.realpath(__file__))
+PATH = os.path.join(PATH, "..")
+
+
+def force_leave(bot: Bot, message: Message, table: str):
+    twitch_name = message.tags.get("reply-parent-user-login", None)
+    if not twitch_name:
+        twitch_name = message.value.split(" ")[1]
+    twitch = ttv_api.users.get_users(user_logins=[twitch_name])
+    if not twitch:
+        bot.send_privmsg(
+            message.channel,
+            "There was an issue fetching their twitch data. They weren't removed from the list Sadge",
+            reply=message.tags["id"],
+        )
+        return
+    twitch_id = twitch[0].user_id
+    conn = sqlite3.connect(os.path.join(PATH, "lol_data.db"))
+    c = conn.cursor()
+
+    c.execute(
+        f"""
+        DELETE FROM {table} WHERE twitch_id = ?;
+        """,
+        (twitch_id,),
+    )
+    if not c.rowcount:
+        bot.send_privmsg(
+            message.channel,
+            "They weren't in the list.",
+            reply=message.tags["id"],
+        )
+        conn.close()
+        return
+    conn.commit()
+    bot.send_privmsg(
+        message.channel,
+        "Successfully removed them from the list",
+        reply=message.tags["id"],
+    )
+    conn.close()
+
+
+def parse(query):
+    query = query.split()
+    try:
+        if query[1].lower() in {"ow", "overwatch", "ow2", "overwatch2"}:
+            return {"--game": "ow"}
+    except:
+        pass
+    return {"--game": "lol_queue"}
+    d = dict()
+    for i in shlex.split(query):
+        try:
+            d[i.split('=')[0]] = i.split('=')[1]
+        except:
+            pass
+    return d
+
+
+def scrub(table_name):
+    return ''.join(chr for chr in table_name if chr.isalnum() or chr == '_')
+
+
+def main(bot: Bot, message: Message):
+    args = " ".join(message.value.split(" ")[1:])
+    args = parse(args)
+    force_leave(bot, message, scrub(args.get("--game", "lol_queue")))
diff --git a/ihaspeks/commands/forcenothere.py b/ihaspeks/commands/forcenothere.py
new file mode 100644 (file)
index 0000000..4944b66
--- /dev/null
@@ -0,0 +1,87 @@
+from aptbot.bot import Message, Commands, Bot
+import os
+import logging
+import ttv_api.users
+import sqlite3
+import time
+import shlex
+
+logger = logging.getLogger(__name__)
+
+PERMISSION = 10
+PREFIX = "\\"
+DESCRIPTION = r"Makes yourself temporarily unavailable in the list."
+USER_COOLDOWN = 0
+GLOBAL_COOLDOWN = 0
+
+PATH = os.path.dirname(os.path.realpath(__file__))
+PATH = os.path.join(PATH, "..")
+
+
+def force_not_here(bot: Bot, message: Message, table: str):
+    twitch_name = message.tags.get("reply-parent-user-login", None)
+    if not twitch_name:
+        twitch_name = message.value.split(" ")[1]
+    twitch = ttv_api.users.get_users(user_logins=[twitch_name])
+    if not twitch:
+        bot.send_privmsg(
+            message.channel,
+            "There was an issue fetching their twitch data. They weren't made unavailable.",
+            reply=message.tags["id"],
+        )
+        return
+    twitch_id = twitch[0].user_id
+    conn = sqlite3.connect(os.path.join(PATH, "lol_data.db"))
+    c = conn.cursor()
+
+    c.execute(
+        f"""
+        UPDATE {table} SET available = 0, priority_queue = null, last_available = ? WHERE twitch_id = ?;
+        """,
+        (
+            int(time.time()),
+            twitch_id,
+        ),
+    )
+    if not c.rowcount:
+        bot.send_privmsg(
+            message.channel,
+            "They aren't in the list or they were already unavailable.",
+            reply=message.tags["id"],
+        )
+        conn.close()
+        return
+    conn.commit()
+    bot.send_privmsg(
+        message.channel,
+        "Successfully made them unavailable",
+        reply=message.tags["id"],
+    )
+    conn.close()
+
+
+def parse(query):
+    query = query.split()
+    try:
+        if query[1].lower() in {"ow", "overwatch", "ow2", "overwatch2"}:
+            return {"--game": "ow"}
+    except:
+        pass
+    return {"--game": "lol_queue"}
+    d = dict()
+    for i in shlex.split(query):
+        try:
+            d[i.split('=')[0]] = i.split('=')[1]
+        except:
+            pass
+    return d
+
+
+def scrub(table_name):
+    return ''.join(chr for chr in table_name if chr.isalnum() or chr == '_')
+
+
+def main(bot: Bot, message: Message):
+    args = " ".join(message.value.split(" ")[1:])
+    args = parse(args)
+    force_not_here(bot, message, scrub(args.get("--game", "lol_queue")))
diff --git a/ihaspeks/commands/here.py b/ihaspeks/commands/here.py
new file mode 100644 (file)
index 0000000..2002cb5
--- /dev/null
@@ -0,0 +1,279 @@
+from aptbot.bot import Message, Commands, Bot
+import os
+import logging
+import ttv_api.users
+import sqlite3
+import time
+import shlex
+
+logger = logging.getLogger(__name__)
+
+PERMISSION = 99
+PREFIX = "?"
+DESCRIPTION = r"Makes yourself available in the list."
+USER_COOLDOWN = 10
+GLOBAL_COOLDOWN = 0
+
+PATH = os.path.dirname(os.path.realpath(__file__))
+PATH = os.path.join(PATH, "..")
+
+
+def here(bot: Bot, message: Message, table: str):
+    twitch = ttv_api.users.get_users(user_logins=[message.nick])
+    if not twitch:
+        bot.send_privmsg(
+            message.channel,
+            "There was an issue fetching your twitch data. You weren't made unavailable.",
+            reply=message.tags["id"],
+        )
+        return
+    twitch_id = twitch[0].user_id
+    conn = sqlite3.connect(os.path.join(PATH, "lol_data.db"))
+    c = conn.cursor()
+
+    c.execute(
+        f"""
+        UPDATE
+            {table}
+        SET
+            position = (
+                CASE
+                    WHEN (
+                        SELECT
+                            position
+                        FROM
+                            {table}
+                        WHERE
+                            twitch_id = ?
+                    ) < (
+                        SELECT
+                            max(position)
+                        FROM (
+                            SELECT
+                                position
+                            FROM
+                                {table}
+                            WHERE
+                                available = 1
+                            ORDER BY
+                                position
+                            LIMIT (
+                                SELECT
+                                    data
+                                FROM
+                                    {table}_data
+                                WHERE
+                                    name = 'queuesize'
+                            )
+                        )
+                    )
+                    THEN position + 1
+                    ELSE position
+                END
+            )
+        WHERE
+            position > (
+                SELECT
+                    max(position)
+                FROM
+                    {table}
+                WHERE
+                    priority_queue = 1
+                    OR position <= (
+                        SELECT
+                            max(position)
+                        FROM (
+                            SELECT
+                                position
+                            FROM
+                                {table}
+                            WHERE
+                                available = 1
+                            ORDER BY 
+                                position
+                            LIMIT (
+                                SELECT
+                                    data
+                                FROM
+                                    {table}_data
+                                WHERE
+                                    name = 'queuesize'
+                            )
+                        )
+                            
+                    )
+            );
+        """,
+        (twitch_id,),
+    )
+
+    c.execute(
+        f"""
+        UPDATE
+            {table}
+        SET 
+            available = 1,
+            priority_queue = (
+                CASE
+                    WHEN (
+                        SELECT
+                            position
+                        FROM
+                            {table}
+                        WHERE
+                            twitch_id = ?
+                    ) < (
+                        SELECT
+                            max(position)
+                        FROM (
+                            SELECT
+                                position
+                            FROM
+                                {table}
+                            WHERE
+                                available = 1
+                            ORDER BY 
+                                position
+                            LIMIT (
+                                SELECT
+                                    data
+                                FROM
+                                    {table}_data
+                                WHERE
+                                    name = 'queuesize'
+                            )
+                        )
+                    )
+                    THEN 1
+                    ELSE null
+                END
+            ),
+            position = (
+                CASE
+                    WHEN (
+                        SELECT
+                            position
+                        FROM
+                            {table}
+                        WHERE
+                            twitch_id = ?
+                    ) < (
+                        SELECT
+                            max(position)
+                        FROM (
+                            SELECT
+                                position
+                            FROM
+                                {table}
+                            WHERE
+                                available = 1
+                            ORDER BY 
+                                position
+                            LIMIT (
+                                SELECT
+                                    data
+                                FROM
+                                    {table}_data
+                                WHERE
+                                    name = 'queuesize'
+                            )
+                        )
+                    )
+                    THEN 1 + (
+                        SELECT
+                            max(position)
+                        FROM
+                            {table}
+                        WHERE
+                            priority_queue = 1
+                            OR position <= (
+                                SELECT
+                                    max(position)
+                                FROM (
+                                    SELECT
+                                        position
+                                    FROM
+                                        {table}
+                                    WHERE
+                                        available = 1
+                                    ORDER BY 
+                                        position
+                                    LIMIT (
+                                        SELECT
+                                            data
+                                        FROM
+                                            {table}_data
+                                        WHERE
+                                            name = 'queuesize'
+                                    )
+                                )
+                            )
+                    )
+                    ELSE position
+                END
+            ),
+            time_remaining = time_remaining - (? - last_available)
+        WHERE 
+            twitch_id = ?
+            AND available = 0;
+        """,
+        (
+            twitch_id,
+            twitch_id,
+            int(time.time()),
+            twitch_id,
+        ),
+    )
+    if c.rowcount < 1:
+        bot.send_privmsg(
+            message.channel,
+            "You aren't in the list or you were already available.",
+            reply=message.tags["id"],
+        )
+        conn.close()
+        return
+    conn.commit()
+    c.execute(f"DELETE FROM {table} WHERE time_remaining < 0;")
+    if c.rowcount > 0:
+        bot.send_privmsg(
+            message.channel,
+            "You were unavailable for too long, you have been removed from the list.",
+            reply=message.tags["id"],
+        )
+        conn.commit()
+        conn.close()
+        return
+    conn.commit()
+    bot.send_privmsg(
+        message.channel,
+        "Successfully made you available",
+        reply=message.tags["id"],
+    )
+    conn.close()
+
+
+def parse(query):
+    query = query.split()
+    try:
+        if query[1].lower() in {"ow", "overwatch", "ow2", "overwatch2"}:
+            return {"--game": "ow"}
+    except:
+        pass
+    return {"--game": "lol_queue"}
+    d = dict()
+    for i in shlex.split(query):
+        try:
+            d[i.split('=')[0]] = i.split('=')[1]
+        except:
+            pass
+    return d
+
+
+def scrub(table_name):
+    return ''.join(chr for chr in table_name if chr.isalnum() or chr == '_')
+
+
+def main(bot: Bot, message: Message):
+    args = " ".join(message.value.split(" ")[1:])
+    args = parse(args)
+    here(bot, message, scrub(args.get("--game", "lol_queue")))
diff --git a/ihaspeks/commands/join.py b/ihaspeks/commands/join.py
new file mode 100644 (file)
index 0000000..8484186
--- /dev/null
@@ -0,0 +1,106 @@
+from aptbot.bot import Message, Commands, Bot
+import os
+import logging
+import ttv_api.users
+import sqlite3
+import shlex
+
+logger = logging.getLogger(__name__)
+
+PERMISSION = 99
+PREFIX = "?"
+DESCRIPTION = r"Joins the queue to play the game with the streamer."
+USER_COOLDOWN = 10
+GLOBAL_COOLDOWN = 0
+
+PATH = os.path.dirname(os.path.realpath(__file__))
+PATH = os.path.join(PATH, "..")
+
+DEFAULT_TIME_REMAINING = 60 * 60
+
+
+def join(bot: Bot, message: Message, table: str):
+    twitch = ttv_api.users.get_users(user_logins=[message.nick])
+    if not twitch:
+        bot.send_privmsg(
+            message.channel,
+            "There was an issue fetching your twitch data. You weren't added to the list Sadge",
+            reply=message.tags["id"],
+        )
+        return
+    twitch_id = twitch[0].user_id
+    conn = sqlite3.connect(os.path.join(PATH, "lol_data.db"))
+    c = conn.cursor()
+
+    c.execute(
+        f"""
+        SELECT position FROM {table} ORDER BY position DESC;
+        """
+    )
+
+    try:
+        last_position: int = c.fetchone()[0]
+    except TypeError:
+        last_position: int = -1
+
+    try:
+        c.execute(
+            f"""
+            INSERT INTO {table} (
+                "twitch_id",
+                "position",
+                "available",
+                "last_available",
+                "time_remaining"
+            ) VALUES (?, ?, ?, ?, ?);
+            """,
+            (
+                twitch_id,
+                last_position + 1,
+                1,
+                None,
+                DEFAULT_TIME_REMAINING,
+            ),
+        )
+    except sqlite3.IntegrityError:
+        bot.send_privmsg(
+            message.channel,
+            "You are already added into the list",
+            reply=message.tags["id"],
+        )
+        conn.close()
+        return
+    conn.commit()
+    bot.send_privmsg(
+        message.channel,
+        "Successfully added you into the list",
+        reply=message.tags["id"],
+    )
+    conn.close()
+
+
+def parse(query):
+    query = query.split()
+    try:
+        if query[0].lower() in {"ow", "overwatch", "ow2", "overwatch2"}:
+            return {"--game": "ow"}
+    except:
+        pass
+    return {"--game": "lol_queue"}
+    d = dict()
+    for i in shlex.split(query):
+        try:
+            d[i.split('=')[0]] = i.split('=')[1]
+        except:
+            pass
+    return d
+
+
+def scrub(table_name):
+    return ''.join(chr for chr in table_name if chr.isalnum() or chr == '_')
+
+
+def main(bot: Bot, message: Message):
+    args = " ".join(message.value.split(" ")[1:])
+    args = parse(args)
+    join(bot, message, scrub(args.get("--game", "lol_queue")))
diff --git a/ihaspeks/commands/joke.py b/ihaspeks/commands/joke.py
new file mode 100644 (file)
index 0000000..c01c1b2
--- /dev/null
@@ -0,0 +1,28 @@
+from aptbot.bot import Message, Commands, Bot
+import tools.smart_privmsg
+import urllib3
+import json
+
+PERMISSION = 99
+PREFIX = "?"
+DESCRIPTION = r""
+USER_COOLDOWN = 30
+GLOBAL_COOLDOWN = 30
+
+header = {
+    "Accept": "application/json",
+    "User-Agent": "For my twitch bot [MurphyAI] on https://twitch.tv/ihaspeks",
+}
+
+
+def main(bot: Bot, message: Message):
+    http = urllib3.PoolManager()
+    r = http.request("GET", "https://icanhazdadjoke.com", headers=header)
+    if r.status != 200:
+        tools.smart_privmsg.send(
+            bot, message, f"Couldn't get a joke Sadge", reply=message.tags["id"]
+        )
+        return
+
+    data = json.loads(r.data.decode("utf-8"))
+    tools.smart_privmsg.send(bot, message, f"{data['joke']}", reply=message.tags["id"])
diff --git a/ihaspeks/commands/latege.py b/ihaspeks/commands/latege.py
new file mode 100644 (file)
index 0000000..71732d2
--- /dev/null
@@ -0,0 +1,35 @@
+from aptbot.bot import Message, Commands, Bot
+import tools.smart_start_stream_time
+from datetime import datetime
+import datetime as dt
+
+PERMISSION = 99
+PREFIX = "?"
+DESCRIPTION = ""
+USER_COOLDOWN = 15
+GLOBAL_COOLDOWN = 5
+
+STREAM_SCHEDULE = dt.time(18, 30)
+
+
+def main(bot: Bot, message: Message):
+    start_stream_ts = tools.smart_start_stream_time.start_stream_timestamp()
+    if not start_stream_ts:
+        return
+    start_stream_dt = datetime.utcfromtimestamp(start_stream_ts)
+    stream_schedule_dt = datetime.combine(
+        datetime.utcfromtimestamp(start_stream_ts), STREAM_SCHEDULE
+    )
+    latege_amount = (start_stream_dt - stream_schedule_dt).total_seconds()
+    if latege_amount > 45 * 60:
+        msg = f"{message.channel} is so Latege he might as well have not \
+            streamed today. At least he's early for tomorrow COPIUM . \
+            {message.channel} is Latege by {latege_amount} seconds Madge"
+    elif latege_amount > 0:
+        msg = f"{message.channel} is Latege by {latege_amount} seconds again Madge"
+    elif latege_amount == 0:
+        msg = f"Amazing!!! {message.channel} is EXACTLY on time today POGGERS"
+    else:
+        msg = f"UNBELIEVABLE!!!!! {message.channel} is EARLY by {-latege_amount} seconds!!!!\
+        This has NEVER happened before POGGERS"
+    bot.send_privmsg(message.channel, msg)
diff --git a/ihaspeks/commands/leave.py b/ihaspeks/commands/leave.py
new file mode 100644 (file)
index 0000000..ac7fefe
--- /dev/null
@@ -0,0 +1,82 @@
+from aptbot.bot import Message, Commands, Bot
+import os
+import logging
+import ttv_api.users
+import sqlite3
+import shlex
+
+logger = logging.getLogger(__name__)
+
+PERMISSION = 99
+PREFIX = "?"
+DESCRIPTION = (
+    r"Leaves the queue which gives you the privalege to play with the streamer."
+)
+USER_COOLDOWN = 60
+GLOBAL_COOLDOWN = 0
+
+PATH = os.path.dirname(os.path.realpath(__file__))
+PATH = os.path.join(PATH, "..")
+
+
+def leave(bot: Bot, message: Message, table: str):
+    twitch = ttv_api.users.get_users(user_logins=[message.nick])
+    if not twitch:
+        bot.send_privmsg(
+            message.channel,
+            "There was an issue fetching your twitch data. You weren't removed from the list Sadge",
+            reply=message.tags["id"],
+        )
+        return
+    twitch_id = twitch[0].user_id
+    conn = sqlite3.connect(os.path.join(PATH, "lol_data.db"))
+    c = conn.cursor()
+
+    c.execute(
+        f"""
+        DELETE FROM {table} WHERE twitch_id = ?;
+        """,
+        (twitch_id,),
+    )
+    if not c.rowcount:
+        bot.send_privmsg(
+            message.channel,
+            "You weren't in the list.",
+            reply=message.tags["id"],
+        )
+        conn.close()
+        return
+    conn.commit()
+    bot.send_privmsg(
+        message.channel,
+        "Successfully removed you from the list",
+        reply=message.tags["id"],
+    )
+    conn.close()
+
+
+def parse(query):
+    query = query.split()
+    try:
+        if query[0].lower() in {"ow", "overwatch", "ow2", "overwatch2"}:
+            return {"--game": "ow"}
+    except:
+        pass
+    return {"--game": "lol_queue"}
+    d = dict()
+    for i in shlex.split(query):
+        try:
+            d[i.split('=')[0]] = i.split('=')[1]
+        except:
+            pass
+    return d
+
+
+def scrub(table_name):
+    return ''.join(chr for chr in table_name if chr.isalnum() or chr == '_')
+
+
+def main(bot: Bot, message: Message):
+    args = " ".join(message.value.split(" ")[1:])
+    args = parse(args)
+    leave(bot, message, scrub(args.get("--game", "lol_queue")))
diff --git a/ihaspeks/commands/movedown.py b/ihaspeks/commands/movedown.py
new file mode 100644 (file)
index 0000000..e64d3ed
--- /dev/null
@@ -0,0 +1,131 @@
+from aptbot.bot import Message, Commands, Bot
+import os
+import logging
+import ttv_api.users
+import sqlite3
+import shlex
+
+logger = logging.getLogger(__name__)
+
+PERMISSION = 10
+PREFIX = "\\"
+DESCRIPTION = r"Move the user down one row in the queue."
+USER_COOLDOWN = 0
+GLOBAL_COOLDOWN = 0
+
+PATH = os.path.dirname(os.path.realpath(__file__))
+PATH = os.path.join(PATH, "..")
+
+
+def move_down(bot: Bot, message: Message, table: str):
+    twitch_name = message.tags.get("reply-parent-user-login", None)
+    if not twitch_name:
+        twitch_name = message.value.split(" ")[1]
+    twitch = ttv_api.users.get_users(user_logins=[twitch_name])
+    if not twitch:
+        bot.send_privmsg(
+            message.channel,
+            "There was an issue fetching the user's twitch data. They weren't moved down in the list Sadge",
+            reply=message.tags["id"],
+        )
+        return
+    twitch_id = twitch[0].user_id
+
+    conn = sqlite3.connect(os.path.join(PATH, "lol_data.db"))
+    c = conn.cursor()
+
+    try:
+        c.execute(
+            f"""
+            UPDATE
+                {table}
+            SET
+                position = (
+                    SELECT
+                        min(position)
+                    FROM
+                        {table}
+                    WHERE
+                        position > (
+                            SELECT
+                                position
+                            FROM
+                                {table}
+                            WHERE
+                                twitch_id = ?
+                        )
+                ) + (
+                    SELECT
+                        position
+                    FROM
+                        {table}
+                    WHERE
+                        twitch_id = ?
+                ) - position
+            WHERE
+                position in (
+                    (
+                        SELECT
+                            min(position)
+                        FROM
+                            {table}
+                        WHERE
+                            position > (
+                                SELECT
+                                    position
+                                FROM
+                                    {table}
+                                WHERE
+                                    twitch_id = ?
+                            )
+                    ),
+                    (
+                        SELECT
+                            position 
+                        FROM
+                            {table}
+                        WHERE
+                            twitch_id = ?
+                    )
+                );
+            """,
+            (twitch_id,) * 4,
+        )
+    except sqlite3.IntegrityError:
+        bot.send_privmsg(
+            message.channel, "Can't move user down further", reply=message.tags["id"]
+        )
+        conn.close()
+        return
+    conn.commit()
+    bot.send_privmsg(
+        message.channel, "Successfully moved them down.", reply=message.tags["id"]
+    )
+    conn.close()
+
+
+def parse(query):
+    query = query.split()
+    try:
+        if query[1].lower() in {"ow", "overwatch", "ow2", "overwatch2"}:
+            return {"--game": "ow"}
+    except:
+        pass
+    return {"--game": "lol_queue"}
+    d = dict()
+    for i in shlex.split(query):
+        try:
+            d[i.split('=')[0]] = i.split('=')[1]
+        except:
+            pass
+    return d
+
+
+def scrub(table_name):
+    return ''.join(chr for chr in table_name if chr.isalnum() or chr == '_')
+
+
+def main(bot: Bot, message: Message):
+    args = " ".join(message.value.split(" ")[1:])
+    args = parse(args)
+    move_down(bot, message, scrub(args.get("--game", "lol_queue")))
diff --git a/ihaspeks/commands/moveup.py b/ihaspeks/commands/moveup.py
new file mode 100644 (file)
index 0000000..42b7f12
--- /dev/null
@@ -0,0 +1,131 @@
+from aptbot.bot import Message, Commands, Bot
+import os
+import logging
+import ttv_api.users
+import sqlite3
+import shlex
+
+logger = logging.getLogger(__name__)
+
+PERMISSION = 10
+PREFIX = "\\"
+DESCRIPTION = r"Move the user up one row in the queue."
+USER_COOLDOWN = 0
+GLOBAL_COOLDOWN = 0
+
+PATH = os.path.dirname(os.path.realpath(__file__))
+PATH = os.path.join(PATH, "..")
+
+
+def move_up(bot: Bot, message: Message, table: str):
+    twitch_name = message.tags.get("reply-parent-user-login", None)
+    if not twitch_name:
+        twitch_name = message.value.split(" ")[1]
+    twitch = ttv_api.users.get_users(user_logins=[twitch_name])
+    if not twitch:
+        bot.send_privmsg(
+            message.channel,
+            "There was an issue fetching the user's twitch data. They weren't moved up in the list Sadge",
+            reply=message.tags["id"],
+        )
+        return
+    twitch_id = twitch[0].user_id
+
+    conn = sqlite3.connect(os.path.join(PATH, "lol_data.db"))
+    c = conn.cursor()
+
+    try:
+        c.execute(
+            f"""
+            UPDATE
+                {table}
+            SET
+                position = (
+                    SELECT
+                        max(position)
+                    FROM
+                        {table}
+                    WHERE
+                        position < (
+                            SELECT
+                                position
+                            FROM
+                                {table}
+                            WHERE
+                                twitch_id = ?
+                        )
+                ) + (
+                    SELECT
+                        position
+                    FROM
+                        {table}
+                    WHERE
+                        twitch_id = ?
+                ) - position
+            WHERE
+                position in (
+                    (
+                        SELECT
+                            max(position)
+                        FROM
+                            {table}
+                        WHERE
+                            position < (
+                                SELECT
+                                    position
+                                FROM
+                                    {table}
+                                WHERE
+                                    twitch_id = ?
+                            )
+                    ),
+                    (
+                        SELECT
+                            position 
+                        FROM
+                            {table}
+                        WHERE
+                            twitch_id = ?
+                    )
+                );
+            """,
+            (twitch_id,) * 4,
+        )
+    except sqlite3.IntegrityError:
+        bot.send_privmsg(
+            message.channel, "Can't move user up further", reply=message.tags["id"]
+        )
+        conn.close()
+        return
+    conn.commit()
+    bot.send_privmsg(
+        message.channel, "Successfully moved them up.", reply=message.tags["id"]
+    )
+    conn.close()
+
+
+def parse(query):
+    query = query.split()
+    try:
+        if query[1].lower() in {"ow", "overwatch", "ow2", "overwatch2"}:
+            return {"--game": "ow"}
+    except:
+        pass
+    return {"--game": "lol_queue"}
+    d = dict()
+    for i in shlex.split(query):
+        try:
+            d[i.split('=')[0]] = i.split('=')[1]
+        except:
+            pass
+    return d
+
+
+def scrub(table_name):
+    return ''.join(chr for chr in table_name if chr.isalnum() or chr == '_')
+
+
+def main(bot: Bot, message: Message):
+    args = " ".join(message.value.split(" ")[1:])
+    args = parse(args)
+    move_up(bot, message, scrub(args.get("--game", "lol_queue")))
diff --git a/ihaspeks/commands/newteams.py b/ihaspeks/commands/newteams.py
new file mode 100644 (file)
index 0000000..a7a3c64
--- /dev/null
@@ -0,0 +1,124 @@
+from aptbot.bot import Message, Commands, Bot
+import os
+import logging
+import ttv_api.users
+import sqlite3
+import random
+import shlex
+
+logger = logging.getLogger(__name__)
+
+PERMISSION = 10
+PREFIX = "\\"
+DESCRIPTION = r"Check who's currently in queue."
+USER_COOLDOWN = 0
+GLOBAL_COOLDOWN = 0
+
+PATH = os.path.dirname(os.path.realpath(__file__))
+PATH = os.path.join(PATH, "..")
+
+
+def new_teams(bot: Bot, message: Message, table: str):
+    conn = sqlite3.connect(os.path.join(PATH, "lol_data.db"))
+    c = conn.cursor()
+
+    c.execute(
+        f"""
+        SELECT twitch_id FROM {table} WHERE available = 1 ORDER BY position ASC;
+        """
+    )
+    fetched = c.fetchall()
+    queue: list[str] = [x[0] for x in fetched]
+    twitch = ttv_api.users.get_users(user_ids=queue)
+    if not twitch:
+        bot.send_privmsg(
+            message.channel,
+            "There was an issue fetching twitch data. Sadge",
+            reply=message.tags["id"],
+        )
+        conn.close()
+        return
+    queue_users: list[ttv_api.users.User] = []
+    for twitch_id in queue:
+        for twitch_user in twitch:
+            if int(twitch_user.user_id) == int(twitch_id):
+                queue_users.append(twitch_user)
+                break
+        else:
+            bot.send_privmsg(
+                message.channel,
+                f"There was an issue fetching data from the user with id {twitch_id}. They won't be in the list. This is a very weird problem to have occured. Sadge",
+                reply=message.tags["id"],
+            )
+    c.execute(
+        f"""
+        SELECT data FROM {table}_data WHERE name = 'queuesize';
+        """
+    )
+    fetched = c.fetchone()
+    try:
+        queue_size = fetched[0]
+    except TypeError:
+        queue_size = 10
+        bot.send_privmsg(
+            message.channel,
+            f"There was an issue fetching the queue size, default set to {queue_size}",
+            reply=message.tags["id"],
+        )
+
+    if len(queue_users) < queue_size:
+        bot.send_privmsg(
+            message.channel,
+            f"There aren't enough people in the queue. Current team size is {queue_size} while there are only {len(queue_users)} in queue.",
+            reply=message.tags["id"],
+        )
+
+    queue_users: list[ttv_api.users.User] = queue_users[:queue_size]
+    random.shuffle(queue_users)
+    blue_team: list[ttv_api.users.User] = queue_users[: queue_size // 2]
+    red_team: list[ttv_api.users.User] = queue_users[queue_size // 2 :]
+
+    c.execute(f"UPDATE {table} SET team = NULL")
+    sql = f"UPDATE {table} SET team = 0 WHERE twitch_id IN ({(', ?' * (queue_size // 2))[2:]})"
+    c.execute(sql, tuple(user.user_id for user in blue_team))
+    sql = f"UPDATE {table} SET team = 1 WHERE twitch_id IN ({(', ?' * (queue_size - queue_size // 2))[2:]})"
+    c.execute(sql, tuple(user.user_id for user in red_team))
+    conn.commit()
+
+    blue_team_users: list[str] = [user.display_name for user in blue_team]
+    red_team_users: list[str] = [user.display_name for user in red_team]
+
+    bot.send_privmsg(
+        message.channel,
+        [f"Blue team is: {blue_team_users}", f"Red team is: {red_team_users}"],
+        reply=message.tags["id"],
+    )
+
+    conn.close()
+
+
+def parse(query):
+    query = query.split()
+    try:
+        if query[1].lower() in {"ow", "overwatch", "ow2", "overwatch2"}:
+            return {"--game": "ow"}
+    except:
+        pass
+    return {"--game": "lol_queue"}
+    d = dict()
+    for i in shlex.split(query):
+        try:
+            d[i.split('=')[0]] = i.split('=')[1]
+        except:
+            pass
+    return d
+
+
+def scrub(table_name):
+    return ''.join(chr for chr in table_name if chr.isalnum() or chr == '_')
+
+
+def main(bot: Bot, message: Message):
+    args = " ".join(message.value.split(" ")[1:])
+    args = parse(args)
+    new_teams(bot, message, scrub(args.get("--game", "lol_queue")))
diff --git a/ihaspeks/commands/nothere.py b/ihaspeks/commands/nothere.py
new file mode 100644 (file)
index 0000000..f82bb68
--- /dev/null
@@ -0,0 +1,84 @@
+from aptbot.bot import Message, Commands, Bot
+import os
+import logging
+import ttv_api.users
+import sqlite3
+import time
+import shlex
+
+logger = logging.getLogger(__name__)
+
+PERMISSION = 99
+PREFIX = "?"
+DESCRIPTION = r"Makes yourself temporarily unavailable in the list."
+USER_COOLDOWN = 10
+GLOBAL_COOLDOWN = 0
+
+PATH = os.path.dirname(os.path.realpath(__file__))
+PATH = os.path.join(PATH, "..")
+
+
+def not_here(bot: Bot, message: Message, table: str):
+    twitch = ttv_api.users.get_users(user_logins=[message.nick])
+    if not twitch:
+        bot.send_privmsg(
+            message.channel,
+            "There was an issue fetching your twitch data. You weren't made unavailable.",
+            reply=message.tags["id"],
+        )
+        return
+    twitch_id = twitch[0].user_id
+    conn = sqlite3.connect(os.path.join(PATH, "lol_data.db"))
+    c = conn.cursor()
+
+    c.execute(
+        f"""
+        UPDATE {table} SET available = 0, priority_queue = null, last_available = ? WHERE twitch_id = ?;
+        """,
+        (
+            int(time.time()),
+            twitch_id,
+        ),
+    )
+    if not c.rowcount:
+        bot.send_privmsg(
+            message.channel,
+            "You aren't in the list or you were already unavailable.",
+            reply=message.tags["id"],
+        )
+        conn.close()
+        return
+    conn.commit()
+    bot.send_privmsg(
+        message.channel,
+        "Successfully made you unavailable",
+        reply=message.tags["id"],
+    )
+    conn.close()
+
+
+def parse(query):
+    query = query.split()
+    try:
+        if query[1].lower() in {"ow", "overwatch", "ow2", "overwatch2"}:
+            return {"--game": "ow"}
+    except:
+        pass
+    return {"--game": "lol_queue"}
+    d = dict()
+    for i in shlex.split(query):
+        try:
+            d[i.split('=')[0]] = i.split('=')[1]
+        except:
+            pass
+    return d
+
+
+def scrub(table_name):
+    return ''.join(chr for chr in table_name if chr.isalnum() or chr == '_')
+
+
+def main(bot: Bot, message: Message):
+    args = " ".join(message.value.split(" ")[1:])
+    args = parse(args)
+    not_here(bot, message, scrub(args.get("--game", "lol_queue")))
diff --git a/ihaspeks/commands/opgg.py b/ihaspeks/commands/opgg.py
new file mode 100644 (file)
index 0000000..aabf5c2
--- /dev/null
@@ -0,0 +1,132 @@
+from aptbot.bot import Message, Commands, Bot
+import sqlite3
+import os
+import logging
+from lol_api import spectator_v4
+from lol_api import summoner_v4
+import ttv_api.users
+from tools import smart_privmsg
+import json
+
+logger = logging.getLogger(__name__)
+
+
+PERMISSION = 99
+PREFIX = "?"
+DESCRIPTION = "Figures out which LoL Account {channel} is playing on"
+USER_COOLDOWN = 20
+GLOBAL_COOLDOWN = 15
+
+
+PATH = os.path.dirname(os.path.realpath(__file__))
+PATH = os.path.join(PATH, "..")
+
+def find_champion(champ_id: int) -> str:
+    with open(os.path.join(PATH, "data/champion.json"), "r") as f:
+        champion_data = json.load(f)
+    champ_id = str(champ_id)
+    champion_data = champion_data["data"]
+    for champion in champion_data:
+        if champion_data[champion]["key"] == champ_id:
+            return champion_data[champion]["name"]
+    return "404"
+
+def main(bot: Bot, message: Message):
+    index_skip = 0
+    if message.tags.get("reply-parent-user-id", None):
+        index_skip += 1
+    try:
+        twitch_user = message.value.split(" ")[1 + index_skip]
+    except IndexError:
+        twitch_user = message.tags.get("reply-parent-display-name", message.channel)
+        twitch_id = message.tags.get(
+                "reply-parent-user-id",
+                ttv_api.users.get_users(user_logins=[message.channel]),
+                )
+    else:
+        twitch_id = ttv_api.users.get_users(user_logins=[twitch_user])
+
+    if not twitch_id:
+        logger.warning(
+                f"There was an issue getting twitch data for user {twitch_id}; message id was: {message.tags['id']}"
+                )
+        smart_privmsg.send(
+                bot, message, "Couldn't retrieve data", reply=message.tags["id"]
+                )
+        return
+
+    if not isinstance(twitch_id, str):
+        twitch_id = int(twitch_id[0].user_id)
+    else:
+        twitch_id = int(twitch_id)
+    db_name_database = "lol_data.db"
+    conn = sqlite3.connect(os.path.join(PATH, db_name_database))
+    c = conn.cursor()
+
+    c.execute(
+            """
+        SELECT summoner_id, puuid FROM accounts WHERE twitch_id = ?;
+        """,
+        (twitch_id,),
+        )
+    fetched = c.fetchall()
+    c.execute(
+            """
+        SELECT twitch_id, summoner_id FROM accounts;
+        """,
+        )
+    fetched_all = c.fetchall()
+
+    if not fetched:
+        smart_privmsg.send(
+                bot,
+                message,
+                f"No summoners added for {twitch_user}",
+                reply=message.tags["id"],
+                )
+        conn.close()
+        return
+
+    summoner_names = []
+    for summoners in fetched:
+        info = spectator_v4.get_spectator_info_from_summoner_id(summoners[0])
+        summoner = summoner_v4.get_summoner_from_puuid(summoners[1])
+        if summoner:
+            summoner_names.append(summoner.name)
+        if info:
+            break
+    else:
+        smart_privmsg.send(
+                bot,
+                message,
+                f"{twitch_user} is currently not in game. These are all of their summoners: {summoner_names}",
+                reply=message.tags["id"],
+                )
+        conn.close()
+        return
+
+    play_with = []
+    for summoner in info.participants:
+        for f in fetched_all:
+            if summoner.summoner_id == f[1] and summoner.summoner_id != fetched[0][0]:
+                play_with.append(
+                    {
+                        "name": ttv_api.users.get_users(user_ids=[f[0]])[0].display_name,
+                        "champion": find_champion(summoner.champion_id),
+                    },
+                )
+                break
+    msg = f"{twitch_user} is currently playing a game on: {summoner_names[-1]}"
+    if play_with:
+        msg += " and is playing with"
+        for player in play_with:
+            msg += f" {player['name']} on {player['champion']} |"
+        msg = msg[:-1] + "."
+        
+    smart_privmsg.send(
+            bot,
+            message,
+            msg,
+            reply=message.tags["id"],
+            )
+    conn.close()
diff --git a/ihaspeks/commands/penta.py b/ihaspeks/commands/penta.py
new file mode 100644 (file)
index 0000000..01f4219
--- /dev/null
@@ -0,0 +1,112 @@
+from aptbot.bot import Message, Commands, Bot
+import os
+import logging
+import ttv_api.users
+import sqlite3
+import tools.smart_privmsg
+import random
+import shlex
+
+logger = logging.getLogger(__name__)
+
+PERMISSION = 99
+PREFIX = "?"
+DESCRIPTION = r"Sekiro death counter"
+USER_COOLDOWN = 10
+GLOBAL_COOLDOWN = 5
+
+PATH = os.path.dirname(os.path.realpath(__file__))
+PATH = os.path.join(PATH, "..")
+
+def check_queue(bot: Bot, message: Message, table: str):
+    conn = sqlite3.connect(os.path.join(PATH, "database.db"))
+    c = conn.cursor()
+
+    c.execute(
+        f"""
+        SELECT id, val FROM varvalues WHERE id = 'penta';
+        """
+    )
+    _, val = c.fetchone()
+
+    if table == "show":
+        msg = f"Peks has gotten {val} pentas!"
+
+        tools.smart_privmsg.send(
+            bot,
+            message,
+            msg,
+            reply=message.tags["id"],
+        )
+
+        conn.close()
+        return
+    if table == "remove":
+        val = val - 1
+        c.execute(
+            f"""
+            UPDATE varvalues SET val = ? WHERE id = 'cannon';
+            """,
+            (val,)
+        )
+
+        msg = f"Peks has gotten {val} pentas!"
+
+        tools.smart_privmsg.send(
+            bot,
+            message,
+            msg,
+            reply=message.tags["id"],
+        )
+        conn.commit()
+        conn.close()
+        return
+    if table == "add":
+        val = val + 1
+        c.execute(
+            f"""
+            UPDATE varvalues SET val = ? WHERE id = 'cannon';
+            """,
+            (val,)
+        )
+
+        msg = f"Peks has gotten {val} pentas!"
+
+        tools.smart_privmsg.send(
+            bot,
+            message,
+            msg,
+            reply=message.tags["id"],
+        )
+        conn.commit()
+        conn.close()
+        return
+
+
+def parse(query):
+    query = query.split()
+    try:
+        if query[0].lower() == "add":
+            return {"--do": "add"}
+        if query[0].lower() == "remove":
+            return {"--do": "remove"}
+    except:
+        pass
+    return {"--game": "show"}
+    d = dict()
+    for i in shlex.split(query):
+        try:
+            d[i.split('=')[0]] = i.split('=')[1]
+        except:
+            pass
+    return d
+
+
+def scrub(table_name):
+    return ''.join(chr for chr in table_name if chr.isalnum() or chr == '_')
+
+
+def main(bot: Bot, message: Message):
+    args = " ".join(message.value.split(" ")[1:])
+    args = parse(args)
+    check_queue(bot, message, scrub(args.get("--do", "show")))
diff --git a/ihaspeks/commands/quadra.py b/ihaspeks/commands/quadra.py
new file mode 100644 (file)
index 0000000..ede98b1
--- /dev/null
@@ -0,0 +1,112 @@
+from aptbot.bot import Message, Commands, Bot
+import os
+import logging
+import ttv_api.users
+import sqlite3
+import tools.smart_privmsg
+import random
+import shlex
+
+logger = logging.getLogger(__name__)
+
+PERMISSION = 99
+PREFIX = "?"
+DESCRIPTION = r"Sekiro death counter"
+USER_COOLDOWN = 10
+GLOBAL_COOLDOWN = 5
+
+PATH = os.path.dirname(os.path.realpath(__file__))
+PATH = os.path.join(PATH, "..")
+
+def check_queue(bot: Bot, message: Message, table: str):
+    conn = sqlite3.connect(os.path.join(PATH, "database.db"))
+    c = conn.cursor()
+
+    c.execute(
+        f"""
+        SELECT id, val FROM varvalues WHERE id = 'quadra';
+        """
+    )
+    _, val = c.fetchone()
+
+    if table == "show":
+        msg = f"Peks has missed out on {val} pentas!"
+
+        tools.smart_privmsg.send(
+            bot,
+            message,
+            msg,
+            reply=message.tags["id"],
+        )
+
+        conn.close()
+        return
+    if table == "remove":
+        val = val - 1
+        c.execute(
+            f"""
+            UPDATE varvalues SET val = ? WHERE id = 'cannon';
+            """,
+            (val,)
+        )
+
+        msg = f"Peks has missed out on {val} pentas!"
+
+        tools.smart_privmsg.send(
+            bot,
+            message,
+            msg,
+            reply=message.tags["id"],
+        )
+        conn.commit()
+        conn.close()
+        return
+    if table == "add":
+        val = val + 1
+        c.execute(
+            f"""
+            UPDATE varvalues SET val = ? WHERE id = 'cannon';
+            """,
+            (val,)
+        )
+
+        msg = f"Peks has missed out on {val} pentas!"
+
+        tools.smart_privmsg.send(
+            bot,
+            message,
+            msg,
+            reply=message.tags["id"],
+        )
+        conn.commit()
+        conn.close()
+        return
+
+
+def parse(query):
+    query = query.split()
+    try:
+        if query[0].lower() == "add":
+            return {"--do": "add"}
+        if query[0].lower() == "remove":
+            return {"--do": "remove"}
+    except:
+        pass
+    return {"--game": "show"}
+    d = dict()
+    for i in shlex.split(query):
+        try:
+            d[i.split('=')[0]] = i.split('=')[1]
+        except:
+            pass
+    return d
+
+
+def scrub(table_name):
+    return ''.join(chr for chr in table_name if chr.isalnum() or chr == '_')
+
+
+def main(bot: Bot, message: Message):
+    args = " ".join(message.value.split(" ")[1:])
+    args = parse(args)
+    check_queue(bot, message, scrub(args.get("--do", "show")))
diff --git a/ihaspeks/commands/removecommand.py b/ihaspeks/commands/removecommand.py
new file mode 100644 (file)
index 0000000..671e49a
--- /dev/null
@@ -0,0 +1,48 @@
+from aptbot.bot import Message, Commands, Bot
+import sqlite3
+import os
+
+PERMISSION = 10
+PREFIX = "\\"
+DESCRIPTION = ""
+USER_COOLDOWN = 0
+GLOBAL_COOLDOWN = 0
+
+COMMANDS_PATH = os.path.dirname(os.path.realpath(__file__))
+PATH = os.path.join(COMMANDS_PATH, "..")
+
+
+def main(bot: Bot, message: Message):
+    msg = " ".join(message.value.split(" ")[1:])
+    command = msg.split(" ")[0]
+    command_prefix = command[0]
+    command_name = command[1:]
+
+    conn = sqlite3.connect(os.path.join(PATH, "database.db"))
+    c = conn.cursor()
+    c.execute("SELECT value FROM command_values WHERE command = ?", (command_name,))
+    command_path = os.path.join(COMMANDS_PATH, f"{command_name}.py")
+    hidden_command_path = os.path.join(COMMANDS_PATH, f".{command_name}.py")
+    try:
+        if not c.fetchone()[0]:
+            try:
+                os.rename(command_path, hidden_command_path)
+            except FileNotFoundError:
+                pass
+    except TypeError:
+        pass
+
+    try:
+        c.execute(
+            "DELETE FROM commands WHERE command = ? AND prefix = ?",
+            (
+                command_name,
+                command_prefix,
+            ),
+        )
+    except sqlite3.IntegrityError:
+        bot.send_privmsg(message.channel, f"The command {command_name} doesn't exist.")
+    else:
+        bot.send_privmsg(message.channel, f"Successfully removed {command_name}.")
+    conn.commit()
+    conn.close()
diff --git a/ihaspeks/commands/scam.py b/ihaspeks/commands/scam.py
new file mode 100644 (file)
index 0000000..3b3a0f0
--- /dev/null
@@ -0,0 +1,12 @@
+from aptbot.bot import Message, Commands, Bot
+
+PERMISSION = 99
+PREFIX = "?"
+DESCRIPTION = ""
+USER_COOLDOWN = 10
+GLOBAL_COOLDOWN = 10
+
+
+def main(bot: Bot, message: Message):
+    msg = message.nick + " you have been scammed KEKW"
+    bot.send_privmsg(message.channel, msg)
diff --git a/ihaspeks/commands/spam.py b/ihaspeks/commands/spam.py
new file mode 100644 (file)
index 0000000..5db59e0
--- /dev/null
@@ -0,0 +1,25 @@
+from aptbot.bot import Message, Commands, Bot
+import tools.smart_privmsg
+
+PERMISSION = 99
+PREFIX = "?"
+DESCRIPTION = ""
+USER_COOLDOWN = 30
+GLOBAL_COOLDOWN = 15
+
+MAX_LENGTH = 450
+
+
+def main(bot: Bot, message: Message):
+    try:
+        replied_message = message.tags["reply-parent-msg-body"]
+    except KeyError:
+        replied_message = None
+    if replied_message:
+        msg = replied_message
+    else:
+        msg = " ".join(message.value.split(" ")[1:])
+    new_msg = ""
+    while len(new_msg) + len(msg) < MAX_LENGTH:
+        new_msg += msg + " "
+    tools.smart_privmsg.send_safe(bot, message.channel, new_msg)
diff --git a/ihaspeks/commands/t.py b/ihaspeks/commands/t.py
new file mode 100644 (file)
index 0000000..9c84b7a
--- /dev/null
@@ -0,0 +1,22 @@
+from aptbot.bot import Message, Commands, Bot
+import tools.smart_privmsg
+import scripts.translator
+
+PERMISSION = 99
+PREFIX = "?"
+DESCRIPTION = "Translates a message from any language (supported by google translate) into English. How to use: ?t <insert text to translate>"
+USER_COOLDOWN = 15
+GLOBAL_COOLDOWN = 5
+
+
+def main(bot: Bot, message: Message):
+    replied_message = message.tags.get("reply-parent-msg-body", None)
+    if replied_message:
+        msg = replied_message
+        replied_msg_id = message.tags["reply-parent-msg-id"]
+    else:
+        msg = " ".join(message.value.split(" ")[1:])
+        replied_msg_id = None
+    trans = scripts.translator.translate(msg)
+    print(trans)
+    tools.smart_privmsg.send(bot, message, trans, reply=replied_msg_id)
diff --git a/ihaspeks/commands/teams.py b/ihaspeks/commands/teams.py
new file mode 100644 (file)
index 0000000..c35e65b
--- /dev/null
@@ -0,0 +1,111 @@
+from aptbot.bot import Message, Commands, Bot
+import os
+import logging
+import ttv_api.users
+import sqlite3
+import tools.smart_privmsg
+import shlex
+
+logger = logging.getLogger(__name__)
+
+PERMISSION = 99
+PREFIX = "?"
+DESCRIPTION = r"Check current teams"
+USER_COOLDOWN = 30
+GLOBAL_COOLDOWN = 15
+
+PATH = os.path.dirname(os.path.realpath(__file__))
+PATH = os.path.join(PATH, "..")
+
+
+def teams(bot: Bot, message: Message, table: str):
+    conn = sqlite3.connect(os.path.join(PATH, "lol_data.db"))
+    c = conn.cursor()
+
+    c.execute(
+        f"""
+        SELECT twitch_id, team FROM {table} WHERE team in (0, 1);
+        """
+    )
+    fetched = c.fetchall()
+    blue_team = []
+    red_team = []
+    for user in fetched:
+        if user[1] == 0:
+            blue_team.append(user[0])
+        elif user[1] == 1:
+            red_team.append(user[0])
+        else:
+            bot.send_privmsg(
+                message.channel,
+                f"Something VERY WEIRD occured. The user with id: {user[0]} is on team {user[1]}, which is neither blue = 0 or red = 1.",
+                reply=message.tags["id"],
+            )
+
+    users = [x[0] for x in fetched]
+    if not users:
+        bot.send_privmsg(
+            message.channel,
+            "No teams have been set yet.",
+            reply=message.tags["id"],
+        )
+        conn.close()
+        return
+
+    twitch = ttv_api.users.get_users(user_ids=users)
+    if not twitch:
+        bot.send_privmsg(
+            message.channel,
+            "There was an issue fetching twitch data. Sadge",
+            reply=message.tags["id"],
+        )
+        conn.close()
+        return
+    blue_team_users = []
+    red_team_users = []
+    for twitch_user in twitch:
+        if int(twitch_user.user_id) in blue_team:
+            blue_team_users.append(twitch_user.display_name)
+        elif int(twitch_user.user_id) in red_team:
+            red_team_users.append(twitch_user.display_name)
+        else:
+            bot.send_privmsg(
+                message.channel,
+                f"Something VERY WEIRD occured. The user with id: {twitch_user.user_id} who has the name {twitch_user.display_name} is not on a team.",
+                reply=message.tags["id"],
+            )
+
+    bot.send_privmsg(
+        message.channel,
+        [f"Blue team is: {blue_team_users}", f"Red team is: {red_team_users}"],
+        reply=message.tags["id"],
+    )
+
+    conn.close()
+
+
+def parse(query):
+    query = query.split()
+    try:
+        if query[1].lower() in {"ow", "overwatch", "ow2", "overwatch2"}:
+            return {"--game": "ow"}
+    except:
+        pass
+    return {"--game": "lol_queue"}
+    d = dict()
+    for i in shlex.split(query):
+        try:
+            d[i.split('=')[0]] = i.split('=')[1]
+        except:
+            pass
+    return d
+
+
+def scrub(table_name):
+    return ''.join(chr for chr in table_name if chr.isalnum() or chr == '_')
+
+
+def main(bot: Bot, message: Message):
+    args = " ".join(message.value.split(" ")[1:])
+    args = parse(args)
+    teams(bot, message, scrub(args.get("--game", "lol_queue")))
diff --git a/ihaspeks/commands/teamsize.py b/ihaspeks/commands/teamsize.py
new file mode 100644 (file)
index 0000000..ce910c5
--- /dev/null
@@ -0,0 +1,79 @@
+from aptbot.bot import Message, Commands, Bot
+import os
+import logging
+import sqlite3
+import shlex
+
+logger = logging.getLogger(__name__)
+
+PERMISSION = 10
+PREFIX = "\\"
+DESCRIPTION = r"Change the team size"
+USER_COOLDOWN = 0
+GLOBAL_COOLDOWN = 0
+
+PATH = os.path.dirname(os.path.realpath(__file__))
+PATH = os.path.join(PATH, "..")
+
+
+def team_size(bot: Bot, message: Message, table: str):
+    replied_message = message.tags.get("reply-parent-msg-body", None)
+    if replied_message:
+        queue_size = message.value.split(" ")[2]
+    else:
+        queue_size = message.value.split(" ")[1]
+    try:
+        queue_size = int(queue_size)
+    except ValueError:
+        bot.send_privmsg(
+            message.channel,
+            f"Please choose a number. {queue_size} is not a valid number.",
+            reply=message.tags["id"],
+        )
+        return
+
+    conn = sqlite3.connect(os.path.join(PATH, "lol_data.db"))
+    c = conn.cursor()
+
+    c.execute(
+        f"""
+        REPLACE INTO {table}_data (name, data) VALUES ('queuesize', ?)
+        """,
+        (queue_size,),
+    )
+    conn.commit()
+
+    bot.send_privmsg(
+        message.channel,
+        f"Successfully changed team size to {queue_size}.",
+        reply=message.tags["id"],
+    )
+
+    conn.close()
+
+
+def parse(query):
+    query = query.split()
+    try:
+        if query[0].lower() in {"ow", "overwatch", "ow2", "overwatch2"}:
+            return {"--game": "ow"}
+    except:
+        pass
+    return {"--game": "lol_queue"}
+    d = dict()
+    for i in shlex.split(query):
+        try:
+            d[i.split('=')[0]] = i.split('=')[1]
+        except:
+            pass
+    return d
+
+
+def scrub(table_name):
+    return ''.join(chr for chr in table_name if chr.isalnum() or chr == '_')
+
+
+def main(bot: Bot, message: Message):
+    args = " ".join(message.value.split(" ")[1:])
+    args = parse(args)
+    team_size(bot, message, scrub(args.get("--game", "lol_queue")))
diff --git a/ihaspeks/commands/truth.py b/ihaspeks/commands/truth.py
new file mode 100644 (file)
index 0000000..ad38954
--- /dev/null
@@ -0,0 +1,24 @@
+from aptbot.bot import Message, Commands, Bot
+import tools.smart_privmsg
+import os
+import random
+
+PERMISSION = 99
+PREFIX = "?"
+DESCRIPTION = ""
+USER_COOLDOWN = 30
+GLOBAL_COOLDOWN = 15
+
+
+COMMANDS_PATH = os.path.dirname(os.path.realpath(__file__))
+PATH = os.path.join(COMMANDS_PATH, "..")
+DATA_PATH = os.path.join(PATH, "data")
+
+
+def main(bot: Bot, message: Message):
+    accepted_path = os.path.join(DATA_PATH, "jokes")
+    with open(accepted_path, "r") as f:
+        jokes = [user_id.rstrip() for user_id in f]
+    joke = random.choice(jokes)
+
+    tools.smart_privmsg.send(bot, message, f"{joke}", reply=message.tags["id"])
diff --git a/ihaspeks/commands/uwu.py b/ihaspeks/commands/uwu.py
new file mode 100644 (file)
index 0000000..bf1fdb6
--- /dev/null
@@ -0,0 +1,41 @@
+from aptbot.bot import Message, Commands, Bot
+import os
+import logging
+from tools import smart_privmsg
+
+logger = logging.getLogger(__name__)
+
+
+PERMISSION = 99
+PREFIX = "?"
+DESCRIPTION = ""
+USER_COOLDOWN = 0
+GLOBAL_COOLDOWN = 0
+
+PATH = os.path.dirname(os.path.realpath(__file__))
+PATH = os.path.join(PATH, "..")
+
+
+def main(bot: Bot, message: Message):
+    if message.tags.get("reply-parent-display-name", None):
+        smart_privmsg.send(
+            bot,
+            message,
+            f"{message.tags['reply-parent-display-name']}, {message.nick} is UwUing you. Will you UwU back? PauseChamp",
+            reply=message.tags["reply-parent-msg-id"],
+        )
+        return
+    try:
+        user = message.value.split(" ")[1]
+    except IndexError:
+        smart_privmsg.send(
+            bot, message, f"UwU to you too {message.nick}!", reply=message.tags["id"]
+        )
+        return
+    else:
+        smart_privmsg.send(
+            bot,
+            message,
+            f"{user}, {message.nick} is UwUing you. Will you UwU back? PauseChamp",
+        )
+        return
diff --git a/ihaspeks/commands/youtube.py b/ihaspeks/commands/youtube.py
new file mode 100644 (file)
index 0000000..b3965d2
--- /dev/null
@@ -0,0 +1,20 @@
+from aptbot.bot import Message, Commands, Bot
+import yt_api.videos
+
+PERMISSION = 99
+PREFIX = "?"
+DESCRIPTION = "Get my newest video! Just type ?video"
+USER_COOLDOWN = 15
+GLOBAL_COOLDOWN = 15
+
+CHANNEL_ID = "UCQ7C3NUKY6TSkURdUdVoYFw"
+
+
+def main(bot: Bot, message: Message):
+    video = yt_api.videos.get_newest_video(CHANNEL_ID)
+    if video:
+        video_link = f"https://www.youtube.com/watch?v={video.video_id}"
+        msg = f'Watch Peks\' latest video "{video.video_name}" here: {video_link}'
+    else:
+        msg = f"Check out my youtube channel here -> https://www.youtube.com/channel/{CHANNEL_ID}"
+    bot.send_privmsg(message.channel, msg)
diff --git a/ihaspeks/database_manager.py b/ihaspeks/database_manager.py
new file mode 100644 (file)
index 0000000..ee653c3
--- /dev/null
@@ -0,0 +1,464 @@
+from aptbot.bot import Message, Commands
+import sqlite3
+import os
+import ttv_api.users
+import logging
+
+logger = logging.getLogger(__name__)
+
+PATH = os.path.dirname(os.path.realpath(__file__))
+logger.debug(f"PATH set to: {PATH}")
+
+STREAMER_PATH = os.path.abspath(os.path.join(__file__, ".."))
+logger.debug(f"STREAMER_PATH set to: {STREAMER_PATH}")
+streamer_login = os.path.split(STREAMER_PATH)[1]
+logger.debug(f"streamer_login set to: {streamer_login}")
+
+
+def create_variables_db():
+    db_name_var = "variables.db"
+    conn = sqlite3.connect(os.path.join(PATH, db_name_var))
+    c = conn.cursor()
+    logger.info(f"connected to database {db_name_var}")
+
+    c.execute(
+        """
+        CREATE TABLE IF NOT EXISTS variables (
+            name TEXT NOT NULL,
+            type TEXT NOT NULL,
+            value TEXT NOT NULL,
+            PRIMARY KEY (name)
+        )
+        """
+    )
+    logger.info(f"created table variables")
+
+    c.execute(
+        """
+        CREATE TABLE IF NOT EXISTS methods (
+            name TEXT NOT NULL,
+            type TEXT NOT NULL,
+            input TEXT,
+            PRIMARY KEY (name, type)
+        )
+        """
+    )
+    logger.info(f"created table methods")
+
+    c.execute(
+        """
+        CREATE TABLE IF NOT EXISTS list_values (
+            id INTEGER NOT NULL,
+            name TEXT NOT NULL,
+            type TEXT NOT NULL,
+            value TEXT NOT NULL,
+            FOREIGN KEY(name) REFERENCES variables(name)
+            PRIMARY KEY (id, name)
+        )
+        """
+    )
+    logger.info(f"created table list_values")
+
+    conn.commit()
+    conn.close()
+
+
+def create_lol_database():
+    db_name_database = "lol_data.db"
+    conn = sqlite3.connect(os.path.join(PATH, db_name_database))
+    c = conn.cursor()
+    logger.info(f"connected to database {db_name_database}")
+
+    c.execute(
+        """
+        CREATE TABLE IF NOT EXISTS accounts (
+            puuid TEXT NOT NULL,
+            summoner_id TEXT NOT NULL,
+            account_id TEXT NOT NULL,
+            twitch_id INTEGER,
+            PRIMARY KEY (puuid)
+        )
+        """
+    )
+    logger.info(f"created table accounts")
+
+    c.execute(
+        """
+        CREATE TABLE IF NOT EXISTS lol_queue (
+            twitch_id INTEGER NOT NULL,
+            position INTEGER NOT NULL,
+            available INTEGER NOT NULL,
+            last_available INTEGER,
+            time_remaining INTEGER NOT NULL,
+            team INTEGER,
+            priority_queue INTEGER,
+            PRIMARY KEY (twitch_id)
+        );
+        """
+    )
+    logger.info(f"created table lol_queue")
+
+    c.execute(
+        """
+        CREATE TABLE IF NOT EXISTS lol_queue_data (
+            name TEXT NOT NULL,
+            data INTEGER NOT NULL,
+            PRIMARY KEY (name)
+        );
+        """
+    )
+    logger.info(f"created table lol_queue_data")
+
+    c.execute(
+        """
+        CREATE TABLE IF NOT EXISTS ow (
+            twitch_id INTEGER NOT NULL,
+            position INTEGER NOT NULL,
+            available INTEGER NOT NULL,
+            last_available INTEGER,
+            time_remaining INTEGER NOT NULL,
+            team INTEGER,
+            priority_queue INTEGER,
+            PRIMARY KEY (twitch_id)
+        );
+        """
+    )
+    logger.info(f"created table ow")
+
+    c.execute(
+        """
+        CREATE TABLE IF NOT EXISTS ow_data (
+            name TEXT NOT NULL,
+            data INTEGER NOT NULL,
+            PRIMARY KEY (name)
+        );
+        """
+    )
+    logger.info(f"created table ow_data")
+
+    conn.commit()
+    conn.close()
+
+
+def create_database():
+    db_name_database = "database.db"
+    conn = sqlite3.connect(os.path.join(PATH, db_name_database))
+    c = conn.cursor()
+    logger.info(f"connected to database {db_name_database}")
+
+    c.execute(
+        """
+        CREATE TABLE IF NOT EXISTS commands (
+            command TEXT NOT NULL,
+            prefix TEXT NOT NULL,
+            permission INTEGER NOT NULL,
+            description TEXT,
+            user_cooldown INTEGER NOT NULL,
+            global_cooldown INTEGER NOT NULL,
+            last_used INTEGER NOT NULL,
+            PRIMARY KEY (command)
+        )
+        """
+    )
+    logger.info(f"created table commands")
+
+    c.execute(
+        """
+        CREATE TABLE IF NOT EXISTS varvalues (
+            id TEXT NOT NULL,
+            val INTEGER NOT NULL,
+            PRIMARY KEY (id)
+        )
+        """
+    )
+    logger.info(f"created table varvalues")
+
+
+    c.execute(
+        """
+        CREATE TABLE IF NOT EXISTS clips (
+            url TEXT NOT NULL,
+            from_user INTEGER NOT NULL,
+            PRIMARY KEY (url)
+        )
+        """
+    )
+    logger.info(f"created table clips")
+
+    c.execute(
+        """
+        CREATE TABLE IF NOT EXISTS users (
+            user_id text NOT NULL,
+            permission INTEGER NOT NULL,
+            PRIMARY KEY (user_id)
+        )
+        """
+    )
+    logger.info(f"created table users")
+
+    admin_id = ttv_api.users.get_users(user_logins=["skgyorugo"])
+    aptbot_id = ttv_api.users.get_users(user_logins=["murphyai"])
+    broadcaster_id = ttv_api.users.get_users(user_logins=[streamer_login])
+    if admin_id:
+        c.execute("INSERT OR IGNORE INTO users VALUES (?, ?)", (admin_id[0].user_id, 0))
+        logger.info(f"inserted user {admin_id[0].user_id} with permission {0}")
+    if aptbot_id:
+        c.execute(
+            "INSERT OR IGNORE INTO users VALUES (?, ?)", (aptbot_id[0].user_id, 0)
+        )
+        logger.info(f"inserted user {aptbot_id[0].user_id} with permission {0}")
+    if broadcaster_id:
+        c.execute(
+            "INSERT OR IGNORE INTO users VALUES (?, ?)", (broadcaster_id[0].user_id, 1)
+        )
+        logger.info(f"inserted user {broadcaster_id[0].user_id} with permission {1}")
+
+    c.execute(
+        """
+        CREATE TABLE IF NOT EXISTS cooldowns (
+            user_id TEXT NOT NULL,
+            command TEXT NOT NULL,
+            user_cooldown INTEGER NOT NULL,
+            FOREIGN KEY(user_id) REFERENCES users(user_id)
+            FOREIGN KEY(command) REFERENCES commands(command)
+            PRIMARY KEY (user_id, command)
+        )
+        """
+    )
+    logger.info(f"created table cooldowns")
+
+    c.execute(
+        """
+        CREATE TABLE IF NOT EXISTS command_values (
+            command TEXT NOT NULL,
+            value TEXT NOT NULL,
+            FOREIGN KEY(command) REFERENCES commands(command)
+        )
+        """
+    )
+    logger.info(f"created table command_values")
+
+    c.execute(
+        """
+        CREATE TABLE IF NOT EXISTS auto_messages (
+            name TEXT NOT NULL,
+            cooldown INTEGER NOT NULL,
+            end_time INTEGER NOT NULL,
+            last_used INTEGER NOT NULL,
+            PRIMARY KEY (name)
+        )
+        """
+    )
+    logger.info(f"created table auto_messages")
+
+    c.execute(
+        """
+        CREATE TABLE IF NOT EXISTS auto_message_values (
+            name TEXT NOT NULL,
+            value TEXT NOT NULL,
+            FOREIGN KEY(name) REFERENCES auto_messages(name)
+        )
+        """
+    )
+    logger.info(f"created table auto_message_values")
+
+    c.execute(
+        """
+        CREATE TABLE IF NOT EXISTS stream_info (
+            start_stream_ts INTEGER NOT NULL,
+            last_checked INTEGER NOT NULL,
+            ended INTEGER NOT NULL,
+            PRIMARY KEY (start_stream_ts)
+        )
+        """
+    )
+    logger.info(f"created table stream_info")
+
+    conn.commit()
+    conn.close()
+
+
+def update_commands_in_database(modules, commands):
+    db_name_database = "database.db"
+    conn = sqlite3.connect(os.path.join(PATH, db_name_database))
+    c = conn.cursor()
+    logger.info(f"connected to database {db_name_database}")
+
+    for command in commands:
+        command_name = command.split(".")[0]
+        command_permission = modules[command_name].PERMISSION
+        command_prefix = modules[command_name].PREFIX
+        command_description = modules[command_name].DESCRIPTION
+        command_user_cooldown = modules[command_name].USER_COOLDOWN
+        command_global_cooldown = modules[command_name].GLOBAL_COOLDOWN
+        command_last_used = 0
+        c.execute(
+            "REPLACE INTO commands VALUES (?, ?, ?, ?, ?, ?, ?)",
+            (
+                command_name,
+                command_prefix,
+                command_permission,
+                command_description,
+                command_user_cooldown,
+                command_global_cooldown,
+                command_last_used,
+            ),
+        )
+        logger.info(f"updating commands command_name: {command_prefix}{command_name}")
+    conn.commit()
+    conn.close()
+
+
+def add_message_to_chat_history(message: Message):
+    if message.command != Commands.PRIVMSG:
+        return
+    conn = sqlite3.connect(os.path.join(PATH, "chat_history.db"))
+    c = conn.cursor()
+
+    try:
+        bits = message.tags["bits"]
+    except KeyError:
+        bits = None
+    try:
+        rp_display_name = message.tags["reply-parent-display-name"]
+        rp_msg_body = message.tags["reply-parent-msg-body"]
+        rp_msg_id = message.tags["reply-parent-msg-id"]
+        rp_user_id = int(message.tags["reply-parent-user-id"])
+        rp_user_login = message.tags["reply-parent-user-login"]
+    except KeyError:
+        rp_display_name = None
+        rp_msg_body = None
+        rp_msg_id = None
+        rp_user_id = None
+        rp_user_login = None
+
+    c.execute(
+        """
+        INSERT INTO chat (
+            "id",
+            "nick",
+            "channel",
+            "message",
+            "tmi-sent-ts",
+            "badge-info",
+            "badges",
+            "bits",
+            "color",
+            "display-name",
+            "first-msg",
+            "mod",
+            "room-id",
+            "user-id",
+            "user-type",
+            "turbo",
+            "subscriber",
+            "reply-parent-display-name",
+            "reply-parent-msg-body",
+            "reply-parent-msg-id",
+            "reply-parent-user-id",
+            "reply-parent-user-login"
+        ) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?);
+        """,
+        (
+            message.tags["id"],
+            message.nick,
+            message.channel,
+            message.value,
+            int(message.tags["tmi-sent-ts"]),
+            message.tags["badge-info"],
+            message.tags["badges"],
+            bits,
+            message.tags["color"],
+            message.tags["display-name"],
+            int(message.tags["first-msg"]),
+            int(message.tags["mod"]),
+            int(message.tags["room-id"]),
+            int(message.tags["user-id"]),
+            message.tags["user-type"],
+            int(message.tags["turbo"]),
+            int(message.tags["subscriber"]),
+            rp_display_name,
+            rp_msg_body,
+            rp_msg_id,
+            rp_user_id,
+            rp_user_login,
+        ),
+    )
+    conn.commit()
+    conn.close()
+
+
+def create_chat_history_database():
+    conn = sqlite3.connect(os.path.join(PATH, "chat_history.db"))
+    c = conn.cursor()
+
+    c.execute(
+        """
+        CREATE TABLE IF NOT EXISTS "chat" (
+            "id"       TEXT NOT NULL,
+            "nick"     TEXT NOT NULL,
+            "channel"  TEXT NOT NULL,
+            "message"  TEXT NOT NULL,
+            "tmi-sent-ts"      INTEGER NOT NULL,
+            "badge-info"       TEXT NOT NULL,
+            "badges"   TEXT NOT NULL,
+            "bits"     TEXT,
+            "color"    TEXT NOT NULL,
+            "display-name"     TEXT NOT NULL,
+            "first-msg"        INTEGER NOT NULL,
+            "mod"      INTEGER NOT NULL,
+            "room-id"  INTEGER NOT NULL,
+            "user-id"  INTEGER NOT NULL,
+            "user-type"        TEXT NOT NULL,
+            "turbo"    INTEGER NOT NULL,
+            "subscriber"       INTEGER NOT NULL,
+            "reply-parent-display-name"        TEXT,
+            "reply-parent-msg-body"    TEXT,
+            "reply-parent-msg-id"      TEXT,
+            "reply-parent-user-id"     INTEGER,
+            "reply-parent-user-login"  TEXT,
+            PRIMARY KEY("id")
+        );
+        """
+    )
+    conn.commit()
+    conn.close()
+
+
+def update_auto_messages_in_database(modules, auto_messages):
+    conn = sqlite3.connect(os.path.join(PATH, "database.db"))
+    c = conn.cursor()
+
+    for auto_message in auto_messages:
+        auto_message_name = auto_message.split(".")[0]
+        auto_message_cooldown = modules[auto_message_name].COOLDOWN
+        auto_message_end_time = modules[auto_message_name].END_TIME
+        auto_message_last_used = 0
+        try:
+            c.execute(
+                "INSERT INTO auto_messages (name, cooldown, end_time, last_used) VALUES (?, ?, ?, ?)",
+                (
+                    auto_message_name,
+                    auto_message_cooldown,
+                    auto_message_end_time,
+                    auto_message_last_used,
+                ),
+            )
+        except Exception as e:
+            c.execute(
+                """
+                UPDATE auto_messages
+                SET
+                    cooldown = ?,
+                    end_time = ?
+                WHERE
+                    name = ?
+                """,
+                (
+                    auto_message_cooldown,
+                    auto_message_end_time,
+                    auto_message_name,
+                ),
+            )
+    conn.commit()
+    conn.close()
diff --git a/ihaspeks/lol_api/__init__.py b/ihaspeks/lol_api/__init__.py
new file mode 100644 (file)
index 0000000..0bf6605
--- /dev/null
@@ -0,0 +1,12 @@
+import urllib3
+from dataclasses import dataclass
+import os
+import json
+import logging
+from typing import Optional
+
+BASE_URL = "https://euw1.api.riotgames.com"
+
+KEY = os.getenv("LOL_STREAM_HELPER")
+
+HEADER = {"X-Riot-Token": KEY}
diff --git a/ihaspeks/lol_api/match_v5.py b/ihaspeks/lol_api/match_v5.py
new file mode 100644 (file)
index 0000000..197bf0b
--- /dev/null
@@ -0,0 +1,3 @@
+from lol_api import *
+
+logger = logging.getLogger(__name__)
diff --git a/ihaspeks/lol_api/spectator_v4.py b/ihaspeks/lol_api/spectator_v4.py
new file mode 100644 (file)
index 0000000..c678236
--- /dev/null
@@ -0,0 +1,113 @@
+from lol_api import *
+from typing import Optional
+
+logger = logging.getLogger(__name__)
+
+
+@dataclass
+class BannedChampion:
+    pick_turn: int
+    champion_id: int
+    team_id: int
+
+
+@dataclass
+class Perks:
+    perk_ids: list[int]
+    perk_style: int
+    perk_sub_style: int
+
+
+@dataclass
+class CurrentGameParticipant:
+    champion_id: int
+    perks: Perks
+    profile_icon_id: int
+    bot: bool
+    team_id: int
+    summoner_name: str
+    summoner_id: str
+    spell1_id: int
+    spell2_id: int
+
+
+@dataclass
+class GameInfo:
+    game_id: int
+    game_type: str
+    game_start_time: int
+    map_id: int
+    game_length: int
+    platform_id: str
+    game_mode: str
+    banned_champions: list[BannedChampion]
+    game_queue_config_id: Optional[int]
+    observers: str
+    participants: list[CurrentGameParticipant]
+
+
+def get_spectator_info_from_summoner_id(summoner_id: str) -> Optional[GameInfo]:
+    endpoint = f"/lol/spectator/v4/active-games/by-summoner/{summoner_id}"
+    url = BASE_URL + endpoint
+    http = urllib3.PoolManager()
+    r = http.request(
+        "GET",
+        url,
+        headers=HEADER,
+    )
+    if r.status == 404:
+        logger.info(
+            f"Summoner with summoner id: {summoner_id} wasn't found in game. Status code {r.status}"
+        )
+        return None
+    if r.status != 200:
+        logger.warning(
+            f"Couldn't retrieve summoner with summoner id: {summoner_id}. Status code {r.status}"
+        )
+        return None
+    data = json.loads(r.data.decode("utf-8"))
+
+    banned_champions: list[BannedChampion] = []
+    for banned in data["bannedChampions"]:
+        banned_champions.append(
+            BannedChampion(
+                banned["pickTurn"],
+                banned["championId"],
+                banned["teamId"],
+            )
+        )
+
+    participants: list[CurrentGameParticipant] = []
+    for participant in data["participants"]:
+        perks = Perks(
+            [perk_id for perk_id in participant["perks"]["perkIds"]],
+            participant["perks"]["perkStyle"],
+            participant["perks"]["perkSubStyle"],
+        )
+        participants.append(
+            CurrentGameParticipant(
+                participant["championId"],
+                perks,
+                participant["profileIconId"],
+                participant["bot"],
+                participant["teamId"],
+                participant["summonerName"],
+                participant["summonerId"],
+                participant["spell1Id"],
+                participant["spell2Id"],
+            )
+        )
+
+    return GameInfo(
+        data["gameId"],
+        data["gameType"],
+        data["gameStartTime"],
+        data["mapId"],
+        data["gameLength"],
+        data["platformId"],
+        data["gameMode"],
+        banned_champions,
+        data.get("gameQueueConfigId", None),
+        data["observers"]["encryptionKey"],
+        participants,
+    )
diff --git a/ihaspeks/lol_api/summoner_v4.py b/ihaspeks/lol_api/summoner_v4.py
new file mode 100644 (file)
index 0000000..c234b9e
--- /dev/null
@@ -0,0 +1,66 @@
+from lol_api import *
+
+logger = logging.getLogger(__name__)
+
+
+@dataclass
+class Summoner:
+    summoner_id: str
+    account_id: str
+    puuid: str
+    name: str
+    profile_icon_id: int
+    revision_date: int
+    summoner_level: int
+
+
+def get_summoner_from_puuid(puuid: str) -> Optional[Summoner]:
+    endpoint = f"/lol/summoner/v4/summoners/by-puuid/{puuid}"
+    url = BASE_URL + endpoint
+    logger.debug(f"url is: {url}")
+    http = urllib3.PoolManager()
+    r = http.request(
+        "GET",
+        url,
+        headers=HEADER,
+    )
+    if r.status != 200:
+        logger.warning(
+            f"Couldn't retrieve summoner with puuid: {puuid}. Status code {r.status}"
+        )
+        return None
+    data = json.loads(r.data.decode("utf-8"))
+    return Summoner(
+        data["id"],
+        data["accountId"],
+        data["puuid"],
+        data["name"],
+        data["profileIconId"],
+        data["revisionDate"],
+        data["summonerLevel"],
+    )
+
+
+def get_summoner_from_name(name: str) -> Optional[Summoner]:
+    endpoint = f"/lol/summoner/v4/summoners/by-name/{name}"
+    url = BASE_URL + endpoint
+    logger.debug(f"url is: {url}")
+    http = urllib3.PoolManager()
+    r = http.request(
+        "GET",
+        url,
+        headers=HEADER,
+    )
+    if r.status != 200:
+        logger.warning(f"Couldn't retrieve summoner: {name}. Status code {r.status}")
+        return None
+    data = json.loads(r.data.decode("utf-8"))
+    return Summoner(
+        data["id"],
+        data["accountId"],
+        data["puuid"],
+        data["name"],
+        data["profileIconId"],
+        data["revisionDate"],
+        data["summonerLevel"],
+    )
diff --git a/ihaspeks/main.py b/ihaspeks/main.py
new file mode 100644 (file)
index 0000000..f4116e1
--- /dev/null
@@ -0,0 +1,149 @@
+from aptbot import Bot, Message, Commands
+import os
+import importlib
+import importlib.util
+import traceback
+import tools.raid
+import tools.smart_privmsg
+import tools.permissions
+import tools.smart_start_stream_time
+import analyze_command
+import scripts.unit_converter
+import scripts.alwase
+import scripts.chatting
+import scripts.chat
+import scripts.crylaugh
+import database_manager
+import analyze_auto_message
+import time
+import logging
+from threading import Event
+from importlib import reload
+
+reload(tools.raid)
+reload(tools.smart_privmsg)
+reload(tools.permissions)
+reload(tools.smart_start_stream_time)
+reload(analyze_command)
+reload(scripts.unit_converter)
+reload(scripts.alwase)
+reload(scripts.chatting)
+reload(scripts.chat)
+reload(scripts.crylaugh)
+reload(database_manager)
+reload(analyze_auto_message)
+
+logger = logging.getLogger(__name__)
+
+PATH = os.path.dirname(os.path.realpath(__file__))
+logger.info(f"PATH set to: {PATH}")
+COMMANDS_PATH = os.path.join(PATH, "commands")
+logger.info(f"COMMANDS_PATH set to: {COMMANDS_PATH}")
+AUTO_MESSAGES_PATH = os.path.join(PATH, "auto_messages")
+logger.info(f"AUTO_MESSAGES_PATH set to: {AUTO_MESSAGES_PATH}")
+
+commands_specs = {}
+commands_modules = {}
+
+auto_message_specs = {}
+auto_message_modules = {}
+
+commands = [
+    c
+    for c in os.listdir(COMMANDS_PATH)
+    if os.path.isfile(os.path.join(COMMANDS_PATH, c))
+]
+commands = filter(lambda x: not x.startswith("."), commands)
+commands = filter(lambda x: os.path.splitext(x)[1] == ".py", commands)
+commands = list(commands)
+for command in commands:
+    commands_specs[command.split(".")[0]] = importlib.util.spec_from_file_location(
+        f"{command.split('.')[0]}", os.path.join(COMMANDS_PATH, command)
+    )
+logger.info(f"List of commands: {commands}")
+
+auto_messages = [
+    c
+    for c in os.listdir(AUTO_MESSAGES_PATH)
+    if os.path.isfile(os.path.join(AUTO_MESSAGES_PATH, c))
+]
+auto_messages = filter(lambda x: not x.startswith("."), auto_messages)
+auto_messages = filter(lambda x: os.path.splitext(x)[1] == ".py", auto_messages)
+auto_messages = list(auto_messages)
+for auto_message in auto_messages:
+    auto_message_specs[
+        auto_message.split(".")[0]
+    ] = importlib.util.spec_from_file_location(
+        f"{auto_message.split('.')[0]}", os.path.join(AUTO_MESSAGES_PATH, auto_message)
+    )
+logger.info(f"List of auto_messages: {auto_messages}")
+
+for spec in commands_specs:
+    commands_modules[spec] = importlib.util.module_from_spec(commands_specs[spec])
+    if not commands_specs[spec]:
+        continue
+    try:
+        commands_specs[spec].loader.exec_module(commands_modules[spec])
+    except Exception as e:
+        logger.critical(traceback.format_exc())
+        logger.critical(f"Problem Loading Module: {e}")
+
+for spec in auto_message_specs:
+    auto_message_modules[spec] = importlib.util.module_from_spec(
+        auto_message_specs[spec]
+    )
+    if not auto_message_specs[spec]:
+        continue
+    try:
+        auto_message_specs[spec].loader.exec_module(auto_message_modules[spec])
+    except Exception as e:
+        logger.critical(traceback.format_exc())
+        logger.critical(f"Problem Loading Module: {e}")
+
+
+database_manager.create_database()
+database_manager.create_lol_database()
+database_manager.create_variables_db()
+database_manager.create_chat_history_database()
+database_manager.update_commands_in_database(commands_modules, commands)
+database_manager.update_auto_messages_in_database(auto_message_modules, auto_messages)
+
+
+def start(bot: Bot, message: Message, stop_event: Event):
+    i = 0
+    wait = 5
+    while not stop_event.is_set():
+        i += wait
+        started = tools.smart_start_stream_time.update_start_stream_timestamp()
+        if started == "START":
+            bot.send_privmsg(
+                message.channel, "/announce Stream has started, you can now use ?join"
+            )
+        elif started == "END":
+            bot.send_privmsg(message.channel, "Stream has ended")
+        if i >= 30:
+            analyze_auto_message.do_auto_message(bot, message, auto_message_modules)
+            i = 0
+        time.sleep(wait)
+
+
+def main(bot: Bot, message: Message):
+    if message.command == Commands.PRIVMSG:
+        database_manager.add_message_to_chat_history(message)
+        if message.value[0] in {"?", "\\"}:
+            analyze_command.do_command(bot, message, commands_modules)
+        scripts.unit_converter.send_metric(bot, message)
+        scripts.alwase.alwase(bot, message)
+        scripts.chatting.chatting(bot, message)
+        scripts.chatting.chatting_annoy(bot, message)
+        scripts.chat.chat(bot, message)
+        scripts.crylaugh.crylaugh(bot, message)
+
+    # if message.command == Commands.PART:
+    #     if message.nick in {'jelemar', 'flauenn', 'ihaspeks', 'blobin_wobin', 'officiallysp'}:
+    #         bot.send_privmsg(message.channel, f"/announce {message.nick} has left chat")
+    # if message.command == Commands.JOIN:
+    #     if message.nick in {'jelemar', 'flauenn', 'ihaspeks', 'blobin_wobin', 'officiallysp'}:
+    #         bot.send_privmsg(message.channel, f"/announce {message.nick} has joined chat")
+
+    tools.raid.raid(bot, message)
diff --git a/ihaspeks/requirements.txt b/ihaspeks/requirements.txt
new file mode 100644 (file)
index 0000000..bbabe65
--- /dev/null
@@ -0,0 +1,45 @@
+beautifulsoup4==4.11.1
+black==22.3.0
+blis==0.7.7
+catalogue==2.0.7
+certifi==2022.5.18.1
+charset-normalizer==2.0.12
+click==8.1.3
+cymem==2.0.6
+deep-translator==1.8.3
+en-core-web-sm @ https://github.com/explosion/spacy-models/releases/download/en_core_web_sm-3.3.0/en_core_web_sm-3.3.0-py3-none-any.whl
+flake8==4.0.1
+flake8-black==0.3.3
+idna==3.3
+Jinja2==3.1.2
+langcodes==3.3.0
+MarkupSafe==2.1.1
+mccabe==0.6.1
+murmurhash==1.0.7
+mypy-extensions==0.4.3
+numpy==1.22.4
+packaging==21.3
+pathspec==0.9.0
+pathy==0.6.1
+platformdirs==2.5.2
+preshed==3.0.6
+pycodestyle==2.8.0
+pydantic==1.8.2
+pyflakes==2.4.0
+pyparsing==3.0.9
+python-dotenv==0.20.0
+requests==2.27.1
+smart-open==5.2.1
+soupsieve==2.3.2.post1
+spacy==3.3.0
+spacy-legacy==3.0.9
+spacy-loggers==1.0.2
+srsly==2.4.3
+thinc==8.0.16
+tomli==2.0.1
+tqdm==4.64.0
+typer==0.4.1
+typing-extensions==4.2.0
+urllib3==1.26.9
+wasabi==0.9.1
+websocket-client==1.3.2
diff --git a/ihaspeks/scripts/alwase.py b/ihaspeks/scripts/alwase.py
new file mode 100644 (file)
index 0000000..8516720
--- /dev/null
@@ -0,0 +1,19 @@
+from aptbot.bot import Bot, Message, Commands
+import tools.smart_privmsg
+import random
+
+
+def alwase(bot: Bot, message: Message):
+    if "always" not in message.value.lower():
+        return
+    try:
+        replied_msg_id = message.tags["id"]
+    except KeyError:
+        replied_msg_id = None
+    msgs = [
+        "It's ALWASE gigaMadge",
+        "Why don't you spell it ALWASE ? gigaMadge",
+        "Spell it ALWASE or peepoArriveBan",
+    ]
+    msg = random.choice(msgs)
+    tools.smart_privmsg.send(bot, message, msg, reply=replied_msg_id)
diff --git a/ihaspeks/scripts/chat.py b/ihaspeks/scripts/chat.py
new file mode 100644 (file)
index 0000000..26dbd19
--- /dev/null
@@ -0,0 +1,38 @@
+from aptbot.bot import Message, Commands, Bot
+import tools.smart_privmsg
+import openai
+import os
+
+openai.api_key = os.getenv("OPENAI_API")
+
+def chat(bot: Bot, message: Message):
+    if not message.nick in {'skgyorugo', 'ihaspeks'}:
+        return
+    if not message.value.startswith("# "):
+        return
+
+    replied_message = message.tags.get("reply-parent-msg-body", None)
+    if replied_message:
+        msg = replied_message
+        replied_msg_id = message.tags["reply-parent-msg-id"]
+    else:
+        msg = " ".join(message.value.split(" ")[1:])
+        replied_msg_id = message.tags['id']
+
+    response = openai.Completion.create(
+        model="text-davinci-003",
+        prompt=msg,
+        temperature=1,
+        max_tokens=4000,
+        top_p=0.3,
+        frequency_penalty=0.5,
+        presence_penalty=0.5,
+    )
+
+    if response:
+        msg = response["choices"][0]["text"]
+        msg = msg.replace("\n", " ")
+    else:
+        msg = "Sadge nothing was returned"
+
+    tools.smart_privmsg.send(bot, message, msg, reply=replied_msg_id)
diff --git a/ihaspeks/scripts/chatting.py b/ihaspeks/scripts/chatting.py
new file mode 100644 (file)
index 0000000..0eb7224
--- /dev/null
@@ -0,0 +1,28 @@
+from aptbot.bot import Bot, Message, Commands
+import tools.smart_privmsg
+import random
+
+
+def chatting(bot: Bot, message: Message):
+    if "Chatting" not in message.value:
+        return
+    if random.random() > 0.4:
+        return
+    msg = ""
+    if "reply-parent-msg-body" in message.tags:
+        if message.value.split(" ")[1] == "Chatting":
+            msg = " ".join(message.value.split(" ")[1:])
+    else:
+        if message.value.split(" ")[0] == "Chatting":
+            msg = message.value
+    if msg:
+        tools.smart_privmsg.send(bot, message, msg)
+
+
+def chatting_annoy(bot: Bot, message: Message):
+    nicks = {}
+    if message.nick.lower() not in nicks:
+        return
+    msg = "Chatting " + message.value
+    # msg = "Pepelaff " + message.value
+    tools.smart_privmsg.send(bot, message, msg)
diff --git a/ihaspeks/scripts/clean_queue.py b/ihaspeks/scripts/clean_queue.py
new file mode 100644 (file)
index 0000000..b86d7f7
--- /dev/null
@@ -0,0 +1,80 @@
+import sqlite3
+import os
+import ttv_api.users
+import time
+import logging
+
+PATH = os.path.dirname(os.path.realpath(__file__))
+PATH = os.path.join(PATH, "..")
+
+STREAMER_PATH = os.path.abspath(os.path.join(__file__, "../.."))
+streamer_login = os.path.split(STREAMER_PATH)[1]
+
+logger = logging.getLogger(__name__)
+
+
+def clean_queue():
+    tries = 0
+    while True:
+        tries += 1
+        twitch = ttv_api.users.get_users(user_logins=[streamer_login])
+        if twitch:
+            try:
+                twitch_id = twitch[0].user_id
+            except IndexError:
+                logger.critical(
+                    f"UNABLE TO CLEAN LOL QUEUE; GOT INDEX ERROR twitch = {twitch}"
+                )
+                continue
+            break
+        elif tries > 60:
+            return
+        logger.critical(f"UNABLE TO CLEAN LOL QUEUE; twitch = {twitch}")
+        time.sleep(3)
+
+    conn = sqlite3.connect(os.path.join(PATH, "lol_data.db"))
+    c = conn.cursor()
+
+    c.execute("DELETE FROM lol_queue")
+    c.execute("DELETE FROM ow")
+    conn.commit()
+
+    c.execute(
+        """
+        INSERT INTO lol_queue (
+            "twitch_id",
+            "position",
+            "available",
+            "last_available",
+            "time_remaining"
+        ) VALUES (?, ?, ?, ?, ?);
+        """,
+        (
+            twitch_id,
+            0,
+            1,
+            None,
+            9999999,
+        ),
+    )
+    c.execute(
+        """
+        INSERT INTO ow (
+            "twitch_id",
+            "position",
+            "available",
+            "last_available",
+            "time_remaining"
+        ) VALUES (?, ?, ?, ?, ?);
+        """,
+        (
+            twitch_id,
+            0,
+            1,
+            None,
+            9999999,
+        ),
+    )
+    conn.commit()
+
+    conn.close()
diff --git a/ihaspeks/scripts/clip_server.py b/ihaspeks/scripts/clip_server.py
new file mode 100644 (file)
index 0000000..57d521b
--- /dev/null
@@ -0,0 +1,38 @@
+import os
+import random
+import sqlite3
+import logging
+from fastapi import FastAPI
+from fastapi.middleware.cors import CORSMiddleware
+
+app = FastAPI()
+
+origins = ["*"]
+
+app.add_middleware(
+    CORSMiddleware,
+    allow_origins=origins,
+    allow_credentials=True,
+    allow_methods=["*"],
+    allow_headers=["*"],
+)
+
+@app.get("/clip")
+async def root():
+    clips = [
+        "https://clips-media-assets2.twitch.tv/AT-cm%7CMGyhlrJbd3gtietAgP63LA.mp4",
+        "https://clips-media-assets2.twitch.tv/WATxq6O_aQBU1qrftJJ0fQ/AT-cm%7CWATxq6O_aQBU1qrftJJ0fQ.mp4",
+    ]
+    return random.choice(clips)
+
+# logger = logging.getLogger(__name__)
+
+# PATH = os.path.dirname(os.path.realpath(__file__))
+# logger.debug(f"PATH set to: {PATH}")
+
+
+# def do_command(bot: Bot, message: Message, command_modules: dict):
+#     db_name_database = "database.db"
+#     conn = sqlite3.connect(os.path.join(PATH, db_name_database))
+#     c = conn.cursor()
+#     logger.info(f"connected to database {db_name_database}")
diff --git a/ihaspeks/scripts/crylaugh.py b/ihaspeks/scripts/crylaugh.py
new file mode 100644 (file)
index 0000000..a6e2658
--- /dev/null
@@ -0,0 +1,16 @@
+from aptbot.bot import Bot, Message, Commands
+import tools.smart_privmsg
+import random
+
+
+def crylaugh(bot: Bot, message: Message):
+    if random.random() > 0.05:
+        return
+    if "😂" not in message.value:
+        return
+    try:
+        replied_msg_id = message.tags["id"]
+    except KeyError:
+        replied_msg_id = None
+    msg = "Oh ðŸ˜‚ look ðŸ˜‚ at ðŸ˜‚ me ðŸ˜‚ I ðŸ˜‚ use ðŸ˜‚ this ðŸ˜‚ funny ðŸ˜‚ emoji ðŸ˜‚ hahahaha ðŸ˜‚😂😂😂😂 lit ðŸ’¯ ðŸ‘Œ"
+    tools.smart_privmsg.send(bot, message, msg, reply=replied_msg_id)
diff --git a/ihaspeks/scripts/translator.py b/ihaspeks/scripts/translator.py
new file mode 100644 (file)
index 0000000..7447a51
--- /dev/null
@@ -0,0 +1,6 @@
+from deep_translator import GoogleTranslator
+
+
+def translate(text: str) -> str:
+    trans = GoogleTranslator(source="auto", target="en").translate(text)
+    return trans
diff --git a/ihaspeks/scripts/unit_converter.py b/ihaspeks/scripts/unit_converter.py
new file mode 100644 (file)
index 0000000..f9fb532
--- /dev/null
@@ -0,0 +1,95 @@
+from aptbot.bot import Bot, Message, Commands
+import spacy
+import re
+import tools.smart_privmsg
+
+nlp = spacy.load("en_core_web_sm")
+
+
+def send_metric(bot: Bot, message: Message):
+    text = ""
+    ft_inch, cm = _tometric(message.value)
+    for i in range(len(cm)):
+        if cm[i] > 230:
+            text += f"{ft_inch[i][0]:.1f}ft. and {ft_inch[i][1]:.1f}in. is {cm[i] / 100:.2f}m. | "
+        elif cm[i] > 0:
+            text += f"{ft_inch[i][0]:.1f}ft. and {ft_inch[i][1]:.1f}in. is {cm[i]:.1f}cm. | "
+    if text:
+        try:
+            replied_msg_id = message.tags["id"]
+        except KeyError:
+            replied_msg_id = None
+        tools.smart_privmsg.send(bot, message, text, reply=replied_msg_id)
+
+
+def _tometric(text: str) -> tuple[list[tuple[int, int]], list[float]]:
+    ft_inch: list[tuple] = []
+    feet = 0
+    inches = 0
+    text = text.replace("-", " ")
+    text = re.sub(r"([0-9]+(\.[0-9]+)?)", r"\1 ", text)
+    text = re.sub(r"\s{2,}", r" ", text)
+    doc = nlp(text)
+    feet_was_last = False
+    next_should_be_double = False
+    found_single = False
+    for w in doc:
+        # print(w.text, w.pos_)
+        if w.pos_ in {"AUX", "VERB", "ADP"}:
+            if feet_was_last and not next_should_be_double:
+                ft_inch.append((feet, 0.0))
+                feet = 0
+                inches = 0
+        if w.like_num or w.pos_ == "NUM":
+            # index_of_previous_token = w.i - 1
+            # try:
+            #     prev_token = doc[index_of_previous_token]
+            #     print(prev_token.lemma_)
+            #     if prev_token.lemma_ != "be":
+            #         continue
+            # except:
+            #     pass
+            # if "'" in w.text:
+            #     feet_and_inches = w.text.split("'")
+            #     try:
+            #         feet = float(feet_and_inches[0])
+            #         inches = float(feet_and_inches[1])
+            #     except:
+            #         pass
+            index_of_next_token = w.i + 1
+            try:
+                next_token = doc[index_of_next_token]
+                if next_token.lemma_ in {"ft", "foot", "'"}:
+                    if next_token.lemma_ == "'" and not next_should_be_double:
+                        next_should_be_double = True
+                    elif next_token.lemma_ == "'":
+                        feet = 0
+                        inches = 0
+                        continue
+                    if feet_was_last:
+                        ft_inch.append((feet, 0.0))
+                    feet = float(w.text)
+                    feet_was_last = True
+                elif next_token.lemma_ in {"inch", '"'}:
+                    if next_token.lemma_ == '"' and next_should_be_double:
+                        inches = float(w.text)
+                        next_should_be_double = False
+                    elif next_token.lemma_ == '"':
+                        inches = 0
+                    elif next_should_be_double:
+                        feet = 0
+                        inches = float(w.text)
+                    else:
+                        inches = float(w.text)
+                    ft_inch.append((feet, inches))
+                    feet = 0
+                    inches = 0
+                    feet_was_last = False
+            except:
+                pass
+    if feet_was_last and not next_should_be_double:
+        ft_inch.append((feet, 0.0))
+    cm: list[float] = []
+    for unit in ft_inch:
+        cm.append((unit[0] * 12 + unit[1]) * 2.54)
+    return (ft_inch, cm)
diff --git a/ihaspeks/tools/permissions.py b/ihaspeks/tools/permissions.py
new file mode 100644 (file)
index 0000000..bf496a0
--- /dev/null
@@ -0,0 +1,18 @@
+import os
+import sqlite3
+
+TOOLS_PATH = os.path.dirname(os.path.realpath(__file__))
+PATH = os.path.join(TOOLS_PATH, "..")
+
+DEFAULT_PERMISSION = 99
+
+
+def get_permission_from_id(user_id: str) -> int:
+    conn = sqlite3.connect(os.path.join(PATH, "database.db"))
+    c = conn.cursor()
+    c.execute("SELECT permission FROM users WHERE user_id = ?", (user_id,))
+    fetched_user = c.fetchone()
+    if fetched_user:
+        return fetched_user[0]
+
+    return DEFAULT_PERMISSION
diff --git a/ihaspeks/tools/raid.py b/ihaspeks/tools/raid.py
new file mode 100644 (file)
index 0000000..104729b
--- /dev/null
@@ -0,0 +1,21 @@
+import ttv_api.channel
+from aptbot.bot import Bot, Message, Commands
+
+
+def raid(bot: Bot, message: Message):
+    if message.command == Commands.USERNOTICE and message.tags["msg-id"] == "raid":
+        raider_name = message.tags["msg-param-displayName"]
+        raider_login = message.tags["msg-param-login"]
+        raider_id = message.tags["user-id"]
+        raider_channel_info = ttv_api.channel.get_channels(raider_id)
+        raider_game = ""
+        if raider_channel_info:
+            raider_game = raider_channel_info[0].game_name
+        viewers = message.tags["msg-param-viewerCount"]
+        viewers = f"{viewers} viewer" if viewers == "1" else f"{viewers} viewers"
+        msg_reply = f"POGGERS {raider_name} has raided {message.channel} \
+                    with {viewers}!!! Why don't you check them out at: \
+                    https://twitch.tv/{raider_login}"
+        if raider_game:
+            msg_reply += f" they were just playing {raider_game}!"
+        bot.send_privmsg(message.channel, msg_reply)
diff --git a/ihaspeks/tools/smart_privmsg.py b/ihaspeks/tools/smart_privmsg.py
new file mode 100644 (file)
index 0000000..1b0ff78
--- /dev/null
@@ -0,0 +1,88 @@
+from aptbot.bot import Bot, Message, Commands
+from typing import Union
+from .. import database_manager
+import time
+
+MAX_LENGTH = 480
+
+
+def _split_message(message: str) -> list[str]:
+    split_count = len(message) // MAX_LENGTH + 1
+    words = message.split(" ")
+    word_list = [""] * split_count
+    index = 0
+    for word in words:
+        if len(word_list[index]) >= MAX_LENGTH:
+            index += 1
+        word_list[index] += word + " "
+
+    return word_list
+
+
+def send_safe(bot: Bot, channel: str, messages: Union[str, list], reply=None):
+    if isinstance(messages, list):
+        for i in range(len(messages)):
+            while True:
+                if (
+                    messages[i].startswith("/")
+                    or messages[i].startswith("!")
+                    or messages[i].startswith("\\")
+                    or messages[i].startswith("?")
+                ):
+                    messages[i] = messages[i][1:]
+                else:
+                    break
+            messages[i] = messages[i].replace("always", "alwase")
+            messages[i] = messages[i].replace("Always", "Alwase")
+            messages[i] = messages[i].replace("ALWAYS", "ALWASE")
+    else:
+        while True:
+            if (
+                messages.startswith("/")
+                or messages.startswith("!")
+                or messages.startswith("\\")
+                or messages.startswith("?")
+            ):
+                messages = messages[1:]
+            else:
+                break
+        messages = messages.replace("always", "alwase")
+        messages = messages.replace("Always", "Alwase")
+        messages = messages.replace("ALWAYS", "ALWASE")
+    bot.send_privmsg(channel, messages, reply)
+
+
+def send(
+    bot: Bot,
+    message_data: Message,
+    message: str,
+    to_remove: int = 1,
+    safe_send: bool = True,
+    reply=None,
+):
+    # for msg in _split_message(' '.join(message_data.value.split(' ')[1:])):
+    #     message = message.replace("{message}", msg)
+    #     message = message.replace("{nick}", message_data.nick)
+    #     message = message.replace("{channel}", message_data.channel)
+    msg = " ".join(message_data.value.split(" ")[to_remove:])
+    message = message.replace("{message}", msg)
+    message = message.replace("{nick}", message_data.nick)
+    message = message.replace("{channel}", message_data.channel)
+
+    messages = _split_message(message)
+    for message in messages:
+        if reply:
+            tags = {"display-name": "MurphyAI", "tmi-sent-ts": int(time.time() * 1000), "user-id": "784114488", "room-id": "169701299", "reply-parent-msg-id": reply}
+        database_manager.add_message_tochat_history(
+            Message(
+                tags=tags,
+                nick="murphyai",
+                command=Commands.PRIVMSG,
+                message_data.channel,
+                value=message
+            )
+        )
+    if safe_send:
+        send_safe(bot, message_data.channel, messages, reply)
+    else:
+        bot.send_privmsg(message_data.channel, messages, reply)
diff --git a/ihaspeks/tools/smart_start_stream_time.py b/ihaspeks/tools/smart_start_stream_time.py
new file mode 100644 (file)
index 0000000..a230779
--- /dev/null
@@ -0,0 +1,144 @@
+import time
+import os
+import ttv_api.users
+import ttv_api.stream
+import ttv_api.channel
+import sqlite3
+import logging
+from scripts import clean_queue
+from typing import Optional
+
+logger = logging.getLogger(__name__)
+
+STREAMER_PATH = os.path.abspath(os.path.join(__file__, "../.."))
+logger.debug(f"STREAMER_PATH set to: {STREAMER_PATH}")
+TOOLS_PATH = os.path.dirname(os.path.realpath(__file__))
+logger.debug(f"TOOLS_PATH set to: {TOOLS_PATH}")
+PATH = os.path.join(TOOLS_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}")
+
+
+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()
+
+    c.execute(
+        """
+        SELECT
+            start_stream_ts
+        FROM
+            stream_info
+        WHERE
+            ended = 0;
+        """
+    )
+
+    fetched = c.fetchone()
+    conn.close()
+
+    try:
+        return fetched[0]
+    except TypeError:
+        return None
+
+
+def update_start_stream_timestamp() -> Optional[str]:
+    conn = sqlite3.connect(os.path.join(PATH, "database.db"))
+    c = conn.cursor()
+
+    c.execute("SELECT MAX(last_checked) FROM stream_info")
+    max_last_checked = c.fetchone()
+    if max_last_checked:
+        c.execute(
+            """
+            SELECT
+                start_stream_ts,
+                last_checked
+            FROM
+                stream_info
+            WHERE
+                last_checked = ?
+                AND ended = 0
+            """,
+            (max_last_checked[0],),
+        )
+
+    fetched = c.fetchone()
+
+    if fetched:
+        start_stream_ts, last_checked = fetched
+        if time.time() < last_checked + CHECK_STREAMTIME_CD:
+            conn.close()
+            return
+
+    stream_info = ttv_api.stream.get_streams(user_logins=[STREAMER_LOGIN])
+    if not stream_info and not fetched:
+        conn.close()
+        return
+
+    if not stream_info:
+        start_stream_ts, last_checked = fetched
+        if time.time() < last_checked + MAX_OFF_STREAM_MARGIN:
+            conn.close()
+            return
+
+        c.execute(
+            "REPLACE INTO stream_info VALUES (?, ?, ?)",
+            (
+                start_stream_ts,
+                last_checked,
+                1,
+            ),
+        )
+        conn.commit()
+        conn.close()
+        # TODO add hook, streamer ended stream
+        end_stream()
+        return "END"
+
+    if not fetched:
+        start_stream_ts = int(stream_info[0].started_at.timestamp())
+        current_time = int(time.time())
+        c.execute(
+            "REPLACE INTO stream_info VALUES (?, ?, ?)",
+            (
+                start_stream_ts,
+                current_time,
+                0,
+            ),
+        )
+        conn.commit()
+        conn.close()
+        start_stream()
+        return "START"
+
+    start_stream_ts, last_checked = fetched
+    current_time = int(time.time())
+    c.execute(
+        "REPLACE INTO stream_info VALUES (?, ?, ?)",
+        (
+            start_stream_ts,
+            current_time,
+            0,
+        ),
+    )
+    conn.commit()
+    conn.close()
+    return
diff --git a/ihaspeks/variable_manager/parser.py b/ihaspeks/variable_manager/parser.py
new file mode 100644 (file)
index 0000000..52c3b53
--- /dev/null
@@ -0,0 +1,69 @@
+import os
+import re
+import sqlite3
+
+PATH = os.path.dirname(os.path.realpath(__file__))
+PATH = os.path.join(PATH, "..")
+
+
+class Expression:
+    def __init__(self, name: str, list_id: int, method: str, value: str):
+        self.name = name
+        self.list_id = list_id
+        self.method = method
+        self.value = value
+
+    def eval(self):
+        conn = sqlite3.connect(os.path.join(PATH, "variables.db"))
+        c = conn.cursor()
+
+        if self.list_id:
+            # TODO
+            c.execute(
+                """
+                SELECT
+                    *
+                FROM
+                    list_values
+                INNER JOIN methods USING(type)
+                WHERE
+                    list_values.name = ?
+                    AND list_values.id = ?
+                    AND methods.name = ?
+                """,
+                (self.name, self.list_id, self.method),
+            )
+        conn.close()
+        pass
+
+    def __repr__(self) -> str:
+        print(type(self.list_id))
+        return f"Expression('{self.name}', '{self.list_id}', '{self.method}', '{self.value}')"
+
+
+def parse(text: str):
+    value = text
+    reg_parse = re.compile(r"\$(\w+)\[?(\d+)?\]?\.(\w+)\((.+)?\)")
+
+    expressions: list[Expression] = []
+    while True:
+
+        try:
+            name, list_id, method, value = reg_parse.findall(value)[0]
+            list_id = int(list_id)
+        except IndexError:
+            break
+        except ValueError:
+            list_id = None
+        expressions.append(Expression(name, list_id, method, value))
+    print(expressions)
+    if 2:
+        return None
+    return ""
+
+
+if __name__ == "__main__":
+    # parse(r"$fib[12].set($fib[11].add($fib[10].value()))")
+    # parse(r"$quotes[2].set(Hello, world)")
+    # parse(r"")
+    parse(r"wqe$quotes[].set($quotes[1].value(dw) + fw)")
diff --git a/ihaspeks/yt_api/__init__.py b/ihaspeks/yt_api/__init__.py
new file mode 100644 (file)
index 0000000..7c8626b
--- /dev/null
@@ -0,0 +1,11 @@
+import urllib3
+from dataclasses import dataclass
+import os
+import json
+from typing import Optional
+
+URL = "https://www.googleapis.com/youtube/v3/search"
+
+API = os.getenv("YOUTUBE_API")
+CLIENT_ID = os.getenv("YOUTUBE_CLIENT_ID")
+CLIENT_SECRET = os.getenv("YOUTUBE_CLIENT_SECRET")
diff --git a/ihaspeks/yt_api/videos.py b/ihaspeks/yt_api/videos.py
new file mode 100644 (file)
index 0000000..d0e9fc2
--- /dev/null
@@ -0,0 +1,31 @@
+from yt_api import *
+import html
+
+
+@dataclass
+class Video:
+    video_name: str
+    video_id: str
+
+
+def get_newest_video(channel_id: str) -> Optional[Video]:
+    get_video_snippets = "?part=snippet"
+    get_url = (
+        URL
+        + get_video_snippets
+        + f"&channelId={channel_id}&order=date&type=video"
+        + f"&key={API}"
+    )
+
+    http = urllib3.PoolManager()
+    r = http.request(
+        "GET",
+        get_url,
+    )
+    if r.status != 200:
+        return None
+    data = json.loads(r.data.decode("utf-8"))["items"][0]
+    video_id = data["id"]["videoId"]
+    video_title = html.unescape(data["snippet"]["title"])
+
+    return Video(video_title, video_id)
diff --git a/skgyorugo/README.md b/skgyorugo/README.md
deleted file mode 100644 (file)
index ba627b3..0000000
+++ /dev/null
@@ -1,37 +0,0 @@
-### TODO
-
-- [x] youtube api
-- [x] raid / host shoutout
-- [x] latege (command and auto), could look through auto schedule
-- [ ] basic math polish notation
-- [x] translator
-- [x] (?t a replied message / database in memory of messages)
-- [ ] followage command
-- [ ] commands in groups
-- [ ] quote adder / remover / getter
-- [ ] reminder (timer)
-- [x] inch to cm
-- [ ] license --- opensource --- info
-- [ ] streamer time
-- [ ] list maker (who's up for flex)
-- [ ] variable counter with cross-command functionality
-- [ ] random variable getter from db {random.quote}
-- [ ] specific word in message {message.0}, {message.1}, etc.
-- [ ] replied variable {reply.nick} {reply.message} {reply.message.0}
-- [ ] sub sellout bot
-- [ ] schedule
-- [ ] which LoL account are you playing on? (maybe add rank)
-
-## Basic Commands
-- [x] int
-- [x] bald
-- [ ] milk pasta
-- [x] make spam always output max length
-- [x] tea
-- [x] coffee
-- [ ] smelly
-- [x] coin
-- [ ] permissions
-- [x] jam
-- [x] screamlads
-- [x] supporters
diff --git a/skgyorugo/analyze_auto_message.py b/skgyorugo/analyze_auto_message.py
deleted file mode 100644 (file)
index aa8ef11..0000000
+++ /dev/null
@@ -1,79 +0,0 @@
-from aptbot.bot import Bot, Message, Commands
-import os
-import sqlite3
-import time
-import tools.smart_privmsg
-import tools.smart_start_stream_time
-import logging
-from importlib import reload
-
-reload(tools.smart_privmsg)
-reload(tools.smart_start_stream_time)
-
-logger = logging.getLogger(__name__)
-
-PATH = os.path.dirname(os.path.realpath(__file__))
-logger.debug(f"analyze_auto_message PATH set to: {PATH}")
-
-
-def do_auto_message(bot: Bot, message: Message, auto_message_modules: dict):
-    start_stream_ts = tools.smart_start_stream_time.start_stream_timestamp()
-    if not start_stream_ts:
-        return
-
-    conn = sqlite3.connect(os.path.join(PATH, "database.db"))
-    c = conn.cursor()
-
-    c.execute(
-        """
-        SELECT
-            name,
-            cooldown,
-            end_time,
-            last_used,
-            value
-        FROM
-            auto_messages
-        LEFT JOIN auto_message_values USING (name)
-        ORDER BY
-            last_used ASC
-        """
-    )
-    while True:
-        fetched = c.fetchone()
-        if not fetched:
-            break
-
-        name, cooldown, end_time, last_used, value = fetched
-        if time.time() < last_used + cooldown:
-            continue
-        if time.time() > start_stream_ts + end_time and end_time != 0:
-            continue
-        if value:
-            tools.smart_privmsg.send(bot, message, value)
-        else:
-            try:
-                auto_message_modules[name].main(bot, message)
-            except KeyError:
-                c.execute(
-                    """
-                        DELETE FROM
-                            auto_messages
-                        WHERE
-                            name = ?
-                    """,
-                    (name,),
-                )
-                conn.commit()
-                continue
-
-        c.execute(
-            "UPDATE auto_messages SET last_used = ? WHERE name = ?",
-            (
-                int(time.time()),
-                name,
-            ),
-        )
-        conn.commit()
-        break
-    conn.close()
diff --git a/skgyorugo/analyze_command.py b/skgyorugo/analyze_command.py
deleted file mode 100644 (file)
index 76ba314..0000000
+++ /dev/null
@@ -1,115 +0,0 @@
-import os
-import random
-import sqlite3
-import tools.permissions
-import tools.smart_privmsg
-import logging
-from aptbot.bot import Bot, Message, Commands
-
-logger = logging.getLogger(__name__)
-
-PATH = os.path.dirname(os.path.realpath(__file__))
-logger.debug(f"PATH set to: {PATH}")
-
-
-def do_command(bot: Bot, message: Message, command_modules: dict):
-    db_name_database = "database.db"
-    conn = sqlite3.connect(os.path.join(PATH, db_name_database))
-    c = conn.cursor()
-    logger.info(f"connected to database {db_name_database}")
-
-    try:
-        replied_message = message.tags["reply-parent-msg-body"]
-    except KeyError:
-        replied_message = None
-
-    if replied_message:
-        command = message.value.split(" ")[1]
-    else:
-        command = message.value.split(" ")[0]
-    prefix = command[0]
-    command = command[1:]
-    user_id = message.tags["user-id"]
-    message_timestamp = int(message.tags["tmi-sent-ts"]) // 1000
-    user_perm = tools.permissions.get_permission_from_id(user_id)
-
-    c.execute(
-        """
-        SELECT
-            commands.command,
-            value,
-            commands.user_cooldown,
-            commands.global_cooldown,
-            CASE 
-                WHEN ? <= 10 THEN
-                    0
-                WHEN cooldowns.user_cooldown >= (commands.last_used + commands.global_cooldown) THEN
-                    cooldowns.user_cooldown
-                ELSE
-                    (commands.last_used + commands.global_cooldown)
-            END AS avail_time
-
-        FROM
-            commands
-        LEFT JOIN command_values USING (command)
-        LEFT JOIN cooldowns ON
-        (
-            cooldowns.command = commands.command
-            AND cooldowns.user_id = ?
-        )
-        WHERE
-            commands.command = ?
-            AND prefix = ?
-            AND permission >= ?
-        """,
-        (
-            user_perm,
-            user_id,
-            command,
-            prefix,
-            user_perm,
-        ),
-    )
-    fetched = c.fetchall()
-    if not fetched:
-        conn.close()
-        return
-
-    (
-        _,
-        value,
-        command_user_cooldown,
-        command_global_cooldown,
-        avail_time,
-    ) = random.choice(fetched)
-
-    if message_timestamp < avail_time:
-        bot.send_privmsg(
-            message.channel,
-            f"The command '{prefix}{command}' is on cooldown. \
-            Please wait {int(avail_time - message_timestamp) + 1} seconds.",
-        )
-        conn.close()
-        return
-
-    c.execute(
-        "REPLACE INTO cooldowns VALUES (?, ?, ?)",
-        (
-            user_id,
-            command,
-            command_user_cooldown + message_timestamp,
-        ),
-    )
-    c.execute(
-        "UPDATE commands SET last_used = ? WHERE command = ?",
-        (
-            message_timestamp,
-            command,
-        ),
-    )
-    conn.commit()
-    conn.close()
-    if value is None:
-        command_modules[command].main(bot, message)
-    else:
-        tools.smart_privmsg.send(bot, message, value)
diff --git a/skgyorugo/auto_messages/.jokes.py b/skgyorugo/auto_messages/.jokes.py
deleted file mode 100644 (file)
index a972958..0000000
+++ /dev/null
@@ -1,26 +0,0 @@
-from aptbot.bot import Message, Commands, Bot
-import tools.smart_privmsg
-import urllib3
-import json
-
-COOLDOWN = 30 * 60
-END_TIME = 0
-
-header = {
-    "Accept": "application/json",
-    "User-Agent": "For my twitch bot [MurphyAI] on https://twitch.tv/ihaspeks",
-}
-
-
-def main(bot: Bot, message: Message):
-    http = urllib3.PoolManager()
-    r = http.request("GET", "https://icanhazdadjoke.com", headers=header)
-    if r.status != 200:
-        tools.smart_privmsg.send(bot, message, f"Couldn't get a joke Sadge")
-        return
-
-    data = json.loads(r.data.decode("utf-8"))
-    joke = data["joke"].replace("\r\n", " ")
-    tools.smart_privmsg.send(
-        bot, message, f"{joke} ||| Get more jokes by typing ?joke"
-    )
diff --git a/skgyorugo/auto_messages/give_permission.py b/skgyorugo/auto_messages/give_permission.py
deleted file mode 100644 (file)
index 2347876..0000000
+++ /dev/null
@@ -1,15 +0,0 @@
-from aptbot.bot import Message, Commands, Bot
-
-COOLDOWN = 120 * 60
-END_TIME = 0
-
-
-def main(bot: Bot, message: Message):
-    msg = "I collect data and occasionally post interesting statistics on peks' discord. "
-    msg += "The type of data you should expect to see is 'Chat frequency', 'Most used emotes', "
-    msg += "'Most active time and day', 'Reply graphs', etc. "
-    bot.send_privmsg(message.channel, msg)
-
-    msg = "If you are okay with these stats being publicly available with your name, "
-    msg += "please type ?accept_share to let me know. "
-    bot.send_privmsg(message.channel, msg)
diff --git a/skgyorugo/auto_messages/hello1.py b/skgyorugo/auto_messages/hello1.py
deleted file mode 100644 (file)
index c10fadd..0000000
+++ /dev/null
@@ -1,9 +0,0 @@
-from aptbot.bot import Message, Commands, Bot
-
-COOLDOWN = 9 * 60
-END_TIME = 0.5 * 60 * 60
-
-
-def main(bot: Bot, message: Message):
-    msg = "peepoWave"
-    bot.send_privmsg(message.channel, msg)
diff --git a/skgyorugo/auto_messages/hello2.py b/skgyorugo/auto_messages/hello2.py
deleted file mode 100644 (file)
index f886261..0000000
+++ /dev/null
@@ -1,9 +0,0 @@
-from aptbot.bot import Message, Commands, Bot
-
-COOLDOWN = 20 * 60
-END_TIME = 0
-
-
-def main(bot: Bot, message: Message):
-    msg = "Wanna ask 9ball a question and get an answer? use: ?9ball <question>"
-    bot.send_privmsg(message.channel, msg)
diff --git a/skgyorugo/auto_messages/hello3.py b/skgyorugo/auto_messages/hello3.py
deleted file mode 100644 (file)
index 5f5a65d..0000000
+++ /dev/null
@@ -1,9 +0,0 @@
-from aptbot.bot import Message, Commands, Bot
-
-COOLDOWN = 30 * 60
-END_TIME = 1 * 60 * 60
-
-
-def main(bot: Bot, message: Message):
-    msg = "I'm a cute lil' wolf UwU and you're all cute lil' chatters OwO"
-    bot.send_privmsg(message.channel, msg)
diff --git a/skgyorugo/auto_messages/latege.py b/skgyorugo/auto_messages/latege.py
deleted file mode 100644 (file)
index 3011a2d..0000000
+++ /dev/null
@@ -1,30 +0,0 @@
-from aptbot.bot import Message, Commands, Bot
-import datetime as dt
-from datetime import datetime
-import tools.smart_start_stream_time
-
-COOLDOWN = 180
-END_TIME = COOLDOWN * 5
-
-STREAM_SCHEDULE = dt.time(18, 30)
-
-
-def main(bot: Bot, message: Message):
-    start_stream_ts = tools.smart_start_stream_time.start_stream_timestamp()
-    if not start_stream_ts:
-        return
-    start_stream_dt = datetime.utcfromtimestamp(start_stream_ts)
-    stream_schedule_dt = datetime.combine(datetime.now(), STREAM_SCHEDULE)
-    latege_amount = (start_stream_dt - stream_schedule_dt).total_seconds()
-    if latege_amount > 45 * 60:
-        msg = f"{message.channel} is so Latege he might as well have not \
-            streamed today. At least he's early for tomorrow COPIUM . \
-            {message.channel} is Latege by {latege_amount} seconds Madge"
-    elif latege_amount > 0:
-        msg = f"{message.channel} is Latege by {latege_amount} seconds again Madge"
-    elif latege_amount == 0:
-        msg = f"Amazing!!! {message.channel} is EXACTLY on time today POGGERS"
-    else:
-        msg = f"UNBELIEVABLE!!!!! {message.channel} is EARLY by {-latege_amount} seconds!!!!\
-        Something very wrong is going on in this world monkaW"
-    bot.send_privmsg(message.channel, "/announce " + msg)
diff --git a/skgyorugo/auto_messages/queuehelp.py b/skgyorugo/auto_messages/queuehelp.py
deleted file mode 100644 (file)
index 04394df..0000000
+++ /dev/null
@@ -1,9 +0,0 @@
-from aptbot.bot import Message, Commands, Bot
-
-COOLDOWN = 48 * 60
-END_TIME = 2.5 * 60 * 60
-
-
-def main(bot: Bot, message: Message):
-    msg = "IF YOU WANT TO PLAY WITH PEKS TYPE: ?join ------------------------------------------------------------------------------- You can find more info here: https://i.imgur.com/mv89SMr.png"
-    bot.send_privmsg(message.channel, msg)
diff --git a/skgyorugo/auto_messages/update_queue.py b/skgyorugo/auto_messages/update_queue.py
deleted file mode 100644 (file)
index e7da3f9..0000000
+++ /dev/null
@@ -1,41 +0,0 @@
-import os
-import sqlite3
-import time
-from aptbot.bot import Message, Commands, Bot
-
-COOLDOWN = 60
-END_TIME = 0
-
-PATH = os.path.dirname(os.path.realpath(__file__))
-PATH = os.path.join(PATH, "..")
-
-
-def main(bot: Bot, message: Message):
-    conn = sqlite3.connect(os.path.join(PATH, "lol_data.db"))
-    c = conn.cursor()
-
-    tables = ["lol_queue", "ow"]
-
-    for table in tables:
-        c.execute(
-            f"""
-            UPDATE
-                {table}
-            SET
-                last_available = ?,
-                time_remaining = time_remaining - (? - last_available)
-            WHERE
-                available = 0;
-            """,
-            (
-                int(time.time()),
-                int(time.time()),
-            ),
-        )
-        c.execute(f"DELETE FROM {table} WHERE time_remaining < 0;")
-        if c.rowcount:
-            bot.send_privmsg(message.channel, f"/announce {c.rowcount} user{'s were' if c.rowcount > 1 else ' was'} just removed from {table if table != 'lol_queue' else 'lol'} queue.")
-
-    conn.commit()
-
-    conn.close()
diff --git a/skgyorugo/auto_messages/youtube.py b/skgyorugo/auto_messages/youtube.py
deleted file mode 100644 (file)
index 63c3112..0000000
+++ /dev/null
@@ -1,17 +0,0 @@
-from aptbot.bot import Message, Commands, Bot
-import yt_api.videos
-
-COOLDOWN = 42 * 60
-END_TIME = 0
-
-CHANNEL_ID = "UCQ7C3NUKY6TSkURdUdVoYFw"
-
-
-def main(bot: Bot, message: Message):
-    video = yt_api.videos.get_newest_video(CHANNEL_ID)
-    if video:
-        video_link = f"https://www.youtube.com/watch?v={video.video_id}"
-        msg = f'Watch Peks\' latest video "{video.video_name}" here: {video_link}'
-    else:
-        msg = f"Check out my youtube channel here -> https://www.youtube.com/channel/{CHANNEL_ID}"
-    bot.send_privmsg(message.channel, msg)
diff --git a/skgyorugo/commands/.info.py b/skgyorugo/commands/.info.py
deleted file mode 100644 (file)
index 516d02d..0000000
+++ /dev/null
@@ -1,18 +0,0 @@
-from aptbot.bot import Message, Commands, Bot
-import tools.smart_start_stream_time
-
-PERMISSION = 99
-PREFIX = "?"
-DESCRIPTION = ""
-USER_COOLDOWN = 5
-GLOBAL_COOLDOWN = 2
-
-
-def main(bot: Bot, message: Message):
-    start_stream_ts = tools.smart_start_stream_time.start_stream_timestamp()
-    if not start_stream_ts:
-        msg = r"The Sponsor is World of Warships, which is a historical strategy online combat PC game. It looks very 5Head but i will conquer elmoFire so imma be testing it out. If u want to join in with us, try it urself, or if you just want to help me out Gladge u can sign up with my link: https://strms.net/warships_ihaspeks you get a fair few bonuses for using mah link too ihaspeBased and after u have won your first game and bought ur first ship ill get a notification on stream peksJAM"
-    else:
-        msg = r"Peks is live so he can awnser that KEKW but here is the link just in case BASED https://strms.net/warships_ihaspeks"
-    tools.smart_privmsg.send_safe(bot, message.channel, msg)
-
diff --git a/skgyorugo/commands/9ball.py b/skgyorugo/commands/9ball.py
deleted file mode 100644 (file)
index cc8d056..0000000
+++ /dev/null
@@ -1,48 +0,0 @@
-from aptbot.bot import Message, Commands, Bot
-import os
-import tools.smart_privmsg
-import openai
-from openai.error import RateLimitError
-
-PERMISSION = 99
-PREFIX = "?"
-DESCRIPTION = ""
-USER_COOLDOWN = 40
-GLOBAL_COOLDOWN = 20
-
-openai.api_key = os.getenv("OPENAI_API")
-
-def main(bot: Bot, message: Message):
-    replied_message = message.tags.get("reply-parent-msg-body", None)
-    if replied_message:
-        msg = replied_message
-        replied_msg_id = message.tags["reply-parent-msg-id"]
-    else:
-        msg = " ".join(message.value.split(" ")[1:])
-        replied_msg_id = message.tags['id']
-
-
-    try:
-        response = openai.Completion.create(
-            # model="davinci:ft-personal:9ball-2022-12-05-08-37-36",
-            model="davinci:ft-personal-2022-12-06-10-03-18",
-            prompt=f"9ball is an 8ball. 9ball answers your questions reluctantly with sarcastic and unhelpful responses.\n{message.nick}: {msg}\n\n###\n\n",
-            temperature=1,
-            max_tokens=60,
-            top_p=0.3,
-            frequency_penalty=0.5,
-            presence_penalty=0.0,
-            stop=[" END"],
-        )
-    except RateLimitError:
-        tools.smart_privmsg.send_safe(bot, message.channel, "UwU Sowwy. The sevwews awe ovewloaded :( Twy again in a few minutes OwO", reply=replied_msg_id)
-
-    print(response)
-    if response:
-        msg = response["choices"][0]["text"]
-        # msg = msg[:msg.find("#")]
-    else:
-        msg = "Sadge nothing was returned"
-
-    tools.smart_privmsg.send_safe(bot, message.channel, msg, reply=replied_msg_id)
-    # bot.send_privmsg(message.channel, msg, reply=replied_msg_id)
diff --git a/skgyorugo/commands/Q.py b/skgyorugo/commands/Q.py
deleted file mode 100644 (file)
index 897c07e..0000000
+++ /dev/null
@@ -1,165 +0,0 @@
-from aptbot.bot import Message, Commands, Bot
-import os
-import logging
-import ttv_api.users
-import sqlite3
-import tools.smart_privmsg
-import random
-import shlex
-
-logger = logging.getLogger(__name__)
-
-PERMISSION = 99
-PREFIX = "?"
-DESCRIPTION = r"Check who's currently in queue."
-USER_COOLDOWN = 30
-GLOBAL_COOLDOWN = 15
-
-PATH = os.path.dirname(os.path.realpath(__file__))
-PATH = os.path.join(PATH, "..")
-
-def check_queue(bot: Bot, message: Message, table: str):
-    if random.random() < 0.02:
-        q = [
-            "https://imgur.com/d5qGioI",
-            "https://imgur.com/oaMmxXI",
-            "https://imgur.com/4btWipx",
-            "https://imgur.com/VvvD8d8",
-            "https://imgur.com/v7oflTv",
-            "https://imgur.com/MSnBNDz",
-            "https://imgur.com/x2pPkvw",
-            "https://imgur.com/xZgFcYG",
-        ]
-        msg = (
-            "You wanted to see the queue, but instead you got visited by the Q. monkaW "
-        )
-        msg += random.choice(q)
-        tools.smart_privmsg.send(
-            bot,
-            message,
-            msg,
-            reply=message.tags["id"],
-        )
-        return
-    conn = sqlite3.connect(os.path.join(PATH, "lol_data.db"))
-    c = conn.cursor()
-
-    c.execute(
-        f"""
-        SELECT twitch_id, priority_queue FROM {table} WHERE available = 1 ORDER BY position ASC;
-        """
-    )
-    fetched = c.fetchall()
-    queue = [x[0] for x in fetched]
-    twitch = ttv_api.users.get_users(user_ids=queue)
-
-    if not twitch:
-        bot.send_privmsg(
-            message.channel,
-            "There was an issue fetching twitch data. Sadge",
-            reply=message.tags["id"],
-        )
-        conn.close()
-        return
-    queue_users = []
-    for twitch_id in queue:
-        for twitch_user in twitch:
-            if int(twitch_user.user_id) == int(twitch_id):
-                queue_users.append(twitch_user)
-                break
-        else:
-            bot.send_privmsg(
-                message.channel,
-                f"There was an issue fetching data from the user with id {twitch_id}. They won't be in the list. This is a very weird problem to have occured. Sadge",
-                reply=message.tags["id"],
-            )
-    c.execute(
-        f"""
-        SELECT data FROM {table}_data WHERE name = 'queuesize';
-        """
-    )
-    try:
-        queue_size = c.fetchone()[0]
-    except TypeError:
-        queue_size = 5
-        bot.send_privmsg(
-            message.channel,
-            f"There was an issue fetching the queue size, default set to {queue_size}",
-            reply=message.tags["id"],
-        )
-
-    c.execute(
-        f"""
-        SELECT twitch_id FROM {table} WHERE available = 0 ORDER BY position ASC;
-        """
-    )
-    fetched_unavailable = c.fetchall()
-    unavailable = [x[0] for x in fetched_unavailable]
-    twitch_unavailable = ttv_api.users.get_users(user_ids=unavailable)
-
-    unavailable_users = []
-    for twitch_id in unavailable:
-        for twitch_user in twitch_unavailable:
-            if int(twitch_user.user_id) == int(twitch_id):
-                unavailable_users.append(twitch_user.display_name)
-                break
-        else:
-            bot.send_privmsg(
-                message.channel,
-                f"There was an issue fetching data from the user with id {twitch_id}. They won't be in the list. This is a very weird problem to have occured. Sadge",
-                reply=message.tags["id"],
-            )
-
-    play_list = [user.display_name for user in queue_users[0:queue_size]]
-    prio_queue = []
-    wait_list = []
-    for user in queue_users[queue_size:]:
-        for fetch in fetched:
-            if int(user.user_id) == fetch[0] and fetch[1] == 1:
-                prio_queue.append(user.display_name)
-            elif int(user.user_id) == fetch[0]:
-                wait_list.append(user.display_name)
-
-    if prio_queue:
-        msg = f"These people are playing with {play_list[0]}: {play_list[1:]} | These people are in Priority Queue: {prio_queue} | These people are in the Wait List: {wait_list}."
-    else:
-        msg = f"These people are playing with {play_list[0]}: {play_list[1:]} | These people are in the Wait List: {wait_list}."
-
-    if unavailable_users:
-        msg += f" | These people are also not here: {unavailable_users}."
-
-    tools.smart_privmsg.send(
-        bot,
-        message,
-        msg,
-        reply=message.tags["id"],
-    )
-
-    conn.close()
-
-
-def parse(query):
-    query = query.split()
-    try:
-        if query[0].lower() in {"ow", "overwatch", "ow2", "overwatch2"}:
-            return {"--game": "ow"}
-    except:
-        pass
-    return {"--game": "lol_queue"}
-    d = dict()
-    for i in shlex.split(query):
-        try:
-            d[i.split('=')[0]] = i.split('=')[1]
-        except:
-            pass
-    return d
-
-
-def scrub(table_name):
-    return ''.join(chr for chr in table_name if chr.isalnum() or chr == '_')
-
-
-def main(bot: Bot, message: Message):
-    args = " ".join(message.value.split(" ")[1:])
-    args = parse(args)
-    check_queue(bot, message, scrub(args.get("--game", "lol_queue")))
diff --git a/skgyorugo/commands/accept_share.py b/skgyorugo/commands/accept_share.py
deleted file mode 100644 (file)
index 80a7f6e..0000000
+++ /dev/null
@@ -1,28 +0,0 @@
-from aptbot.bot import Message, Commands, Bot
-import tools.smart_privmsg
-import os
-
-PERMISSION = 99
-PREFIX = "?"
-DESCRIPTION = ""
-USER_COOLDOWN = 30
-GLOBAL_COOLDOWN = 15
-
-
-COMMANDS_PATH = os.path.dirname(os.path.realpath(__file__))
-PATH = os.path.join(COMMANDS_PATH, "..")
-DATA_PATH = os.path.join(PATH, "data")
-
-
-def main(bot: Bot, message: Message):
-    accepted_path = os.path.join(DATA_PATH, "permission")
-    with open(accepted_path, "r") as f:
-        accepted = [user_id.rstrip() for user_id in f]
-    if message.tags["user-id"] in accepted:
-        tools.smart_privmsg.send(bot, message, "You have already given permission")
-        return
-
-    with open(accepted_path, "a") as f:
-        f.write(f"{message.tags['user-id']}\n")
-    tools.smart_privmsg.send(bot, message, "Thank you for giving permission")
-
diff --git a/skgyorugo/commands/addaccount.py b/skgyorugo/commands/addaccount.py
deleted file mode 100644 (file)
index 69cdfb2..0000000
+++ /dev/null
@@ -1,75 +0,0 @@
-from aptbot.bot import Message, Commands, Bot
-import sqlite3
-import os
-import logging
-import lol_api.summoner_v4
-import ttv_api.users
-
-logger = logging.getLogger(__name__)
-
-
-PERMISSION = 10
-PREFIX = "\\"
-DESCRIPTION = "Adds a LoL account to the database. Use: \\addaccount <summoner name> | <twitch name>"
-USER_COOLDOWN = 0
-GLOBAL_COOLDOWN = 0
-
-PATH = os.path.dirname(os.path.realpath(__file__))
-PATH = os.path.join(PATH, "..")
-
-
-def main(bot: Bot, message: Message):
-    msg = " ".join(message.value.split(" ")[1:])
-    summoner_name, twitch_name = msg.split("|")
-    twitch_name = twitch_name.strip()
-    summoner = lol_api.summoner_v4.get_summoner_from_name(summoner_name)
-    twitch = ttv_api.users.get_users(user_logins=[twitch_name])
-    if not summoner:
-        logger.warning(f"Account {summoner_name} wasn't able to be added")
-        bot.send_privmsg(
-            message.channel, f"Error, unable to add summoner: {summoner_name}"
-        )
-        return
-    if not twitch:
-        logger.warning(f"Unable to use twitch account {twitch_name}")
-        bot.send_privmsg(
-            message.channel, f"Error, unable to use twitch account: {twitch_name}"
-        )
-        return
-    twitch_id = twitch[0].user_id
-
-    conn = sqlite3.connect(os.path.join(PATH, "lol_data.db"))
-    c = conn.cursor()
-
-    try:
-        c.execute(
-            """
-            INSERT INTO accounts (
-                "puuid",
-                "summoner_id",
-                "account_id",
-                "twitch_id"
-            ) VALUES (
-                ?, ?, ?, ?
-            );
-            """,
-            (
-                summoner.puuid,
-                summoner.summoner_id,
-                summoner.account_id,
-                twitch_id,
-            ),
-        )
-    except sqlite3.IntegrityError:
-        logger.warning(
-            f"Unable to add account with puuid: {summoner.puuid} and twitch id: {twitch_id}. Account probably already exists"
-        )
-        bot.send_privmsg(message.channel, f"Account already exists.")
-        conn.close()
-        return
-    conn.commit()
-    logger.info(
-        f"Successfully added account with puuid: {summoner.puuid} and twitch id: {twitch_id}"
-    )
-    bot.send_privmsg(message.channel, f"Successfully added account.")
-    conn.close()
diff --git a/skgyorugo/commands/addcommand.py b/skgyorugo/commands/addcommand.py
deleted file mode 100644 (file)
index f430b46..0000000
+++ /dev/null
@@ -1,80 +0,0 @@
-from aptbot.bot import Message, Commands, Bot
-import sqlite3
-import os
-
-PERMISSION = 10
-PREFIX = "\\"
-DESCRIPTION = ""
-USER_COOLDOWN = 0
-GLOBAL_COOLDOWN = 0
-
-PATH = os.path.dirname(os.path.realpath(__file__))
-PATH = os.path.join(PATH, "..")
-
-DEFAULT_PERMISSION = 99
-DEFAULT_DESCRIPTION = ""
-DEFAULT_USER_COOLDOWN = 5
-DEFAULT_GLOBAL_COOLDOWN = 0
-DEFAULT_LAST_USED = 0
-
-
-def main(bot: Bot, message: Message):
-    msg = " ".join(message.value.split(" ")[1:])
-    command = msg.split(" ")[0]
-    command_prefix = command[0]
-    command_name = command[1:]
-    command_value = msg = " ".join(msg.split(" ")[1:])
-    if command_prefix != "?":
-        bot.send_privmsg(
-            message.channel,
-            f"{message.nick} you cannot use {command_prefix} as a prefix",
-        )
-        return
-
-    conn = sqlite3.connect(os.path.join(PATH, "database.db"))
-    c = conn.cursor()
-    c.execute(
-        "SELECT value FROM commands LEFT JOIN command_values USING(command) WHERE command = ? AND prefix = ?",
-        (
-            command_name,
-            command_prefix,
-        ),
-    )
-    try:
-        if not c.fetchone()[0]:
-            bot.send_privmsg(
-                message.channel,
-                f"The command {command_prefix}{command_name} already exists",
-            )
-            return
-    except TypeError:
-        pass
-    try:
-        c.execute(
-            "INSERT INTO commands VALUES (?, ?, ?, ?, ?, ?, ?)",
-            (
-                command_name,
-                command_prefix,
-                DEFAULT_PERMISSION,
-                DEFAULT_DESCRIPTION,
-                DEFAULT_USER_COOLDOWN,
-                DEFAULT_GLOBAL_COOLDOWN,
-                DEFAULT_LAST_USED,
-            ),
-        )
-    except sqlite3.IntegrityError:
-        pass
-    except Exception as e:
-        bot.send_privmsg(message.channel, f"There was an error adding the command: {e}")
-        conn.close()
-        return
-    c.execute(
-        "INSERT INTO command_values VALUES (?, ?)",
-        (
-            command_name,
-            command_value,
-        ),
-    )
-    bot.send_privmsg(message.channel, f"Successfully added {command_name}.")
-    conn.commit()
-    conn.close()
diff --git a/skgyorugo/commands/cannon.py b/skgyorugo/commands/cannon.py
deleted file mode 100644 (file)
index da342b6..0000000
+++ /dev/null
@@ -1,112 +0,0 @@
-from aptbot.bot import Message, Commands, Bot
-import os
-import logging
-import ttv_api.users
-import sqlite3
-import tools.smart_privmsg
-import random
-import shlex
-
-logger = logging.getLogger(__name__)
-
-PERMISSION = 99
-PREFIX = "?"
-DESCRIPTION = r"Sekiro death counter"
-USER_COOLDOWN = 10
-GLOBAL_COOLDOWN = 5
-
-PATH = os.path.dirname(os.path.realpath(__file__))
-PATH = os.path.join(PATH, "..")
-
-def check_queue(bot: Bot, message: Message, table: str):
-    conn = sqlite3.connect(os.path.join(PATH, "database.db"))
-    c = conn.cursor()
-
-    c.execute(
-        f"""
-        SELECT id, val FROM varvalues WHERE id = 'cannon';
-        """
-    )
-    _, val = c.fetchone()
-
-    if table == "show":
-        msg = f"Peks is at cannon {val % 1000} of prestige {val // 1000}"
-
-        tools.smart_privmsg.send(
-            bot,
-            message,
-            msg,
-            reply=message.tags["id"],
-        )
-
-        conn.close()
-        return
-    if table == "remove":
-        val = val - 1
-        c.execute(
-            f"""
-            UPDATE varvalues SET val = ? WHERE id = 'cannon';
-            """,
-            (val,)
-        )
-
-        msg = f"Peks is at cannon {val % 1000} of prestige {val // 1000}"
-
-        tools.smart_privmsg.send(
-            bot,
-            message,
-            msg,
-            reply=message.tags["id"],
-        )
-        conn.commit()
-        conn.close()
-        return
-    if table == "add":
-        val = val + 1
-        c.execute(
-            f"""
-            UPDATE varvalues SET val = ? WHERE id = 'cannon';
-            """,
-            (val,)
-        )
-
-        msg = f"Peks is at cannon {val % 1000} of prestige {val // 1000}"
-
-        tools.smart_privmsg.send(
-            bot,
-            message,
-            msg,
-            reply=message.tags["id"],
-        )
-        conn.commit()
-        conn.close()
-        return
-
-
-def parse(query):
-    query = query.split()
-    try:
-        if query[0].lower() == "add":
-            return {"--do": "add"}
-        if query[0].lower() == "remove":
-            return {"--do": "remove"}
-    except:
-        pass
-    return {"--game": "show"}
-    d = dict()
-    for i in shlex.split(query):
-        try:
-            d[i.split('=')[0]] = i.split('=')[1]
-        except:
-            pass
-    return d
-
-
-def scrub(table_name):
-    return ''.join(chr for chr in table_name if chr.isalnum() or chr == '_')
-
-
-def main(bot: Bot, message: Message):
-    args = " ".join(message.value.split(" ")[1:])
-    args = parse(args)
-    check_queue(bot, message, scrub(args.get("--do", "show")))
diff --git a/skgyorugo/commands/cleanqueue.py b/skgyorugo/commands/cleanqueue.py
deleted file mode 100644 (file)
index ed3d447..0000000
+++ /dev/null
@@ -1,91 +0,0 @@
-from aptbot.bot import Message, Commands, Bot
-import os
-import logging
-import ttv_api.users
-import sqlite3
-import time
-import shlex
-
-logger = logging.getLogger(__name__)
-
-PERMISSION = 10
-PREFIX = "\\"
-DESCRIPTION = r"Cleans the whole queue"
-USER_COOLDOWN = 0
-GLOBAL_COOLDOWN = 0
-
-PATH = os.path.dirname(os.path.realpath(__file__))
-PATH = os.path.join(PATH, "..")
-
-
-def clean_queue(bot: Bot, message: Message, table: str):
-    twitch = ttv_api.users.get_users(user_logins=[message.channel])
-    if not twitch:
-        bot.send_privmsg(
-            message.channel,
-            f"There was an issue fetching {message.channel} twitch data. The queue was not cleared.",
-            reply=message.tags["id"],
-        )
-        return
-    twitch_id = twitch[0].user_id
-
-    conn = sqlite3.connect(os.path.join(PATH, "lol_data.db"))
-    c = conn.cursor()
-
-    c.execute(f"DELETE FROM {table}")
-    conn.commit()
-
-    c.execute(
-        f"""
-        INSERT INTO {table} (
-            "twitch_id",
-            "position",
-            "available",
-            "last_available",
-            "time_remaining"
-        ) VALUES (?, ?, ?, ?, ?);
-        """,
-        (
-            twitch_id,
-            0,
-            1,
-            None,
-            9999999,
-        ),
-    )
-    conn.commit()
-
-    bot.send_privmsg(
-        message.channel,
-        f"Successfully cleaned the queue.",
-        reply=message.tags["id"],
-    )
-
-    conn.close()
-
-
-def parse(query):
-    query = query.split()
-    try:
-        if query[0].lower() in {"ow", "overwatch", "ow2", "overwatch2"}:
-            return {"--game": "ow"}
-    except:
-        pass
-    return {"--game": "lol_queue"}
-    d = dict()
-    for i in shlex.split(query):
-        try:
-            d[i.split('=')[0]] = i.split('=')[1]
-        except:
-            pass
-    return d
-
-
-def scrub(table_name):
-    return ''.join(chr for chr in table_name if chr.isalnum() or chr == '_')
-
-
-def main(bot: Bot, message: Message):
-    args = " ".join(message.value.split(" ")[1:])
-    args = parse(args)
-    clean_queue(bot, message, scrub(args.get("--game", "lol_queue")))
diff --git a/skgyorugo/commands/coin.py b/skgyorugo/commands/coin.py
deleted file mode 100644 (file)
index 8c16940..0000000
+++ /dev/null
@@ -1,26 +0,0 @@
-from aptbot.bot import Message, Commands, Bot
-import tools.smart_privmsg
-import random
-
-PERMISSION = 99
-PREFIX = "?"
-DESCRIPTION = (
-    r"Tosses a coin, there's a 50% chance it's heads and a 50% chance it's tails"
-)
-USER_COOLDOWN = 10
-GLOBAL_COOLDOWN = 5
-
-
-def main(bot: Bot, message: Message):
-    r = random.random()
-    if r < 0.02:
-        tools.smart_privmsg.send(
-            bot,
-            message,
-            f"the coin landed on it's side, try again.",
-            reply=message.tags["id"],
-        )
-    elif r < 0.51:
-        tools.smart_privmsg.send(bot, message, f"heads", reply=message.tags["id"])
-    else:
-        tools.smart_privmsg.send(bot, message, f"tails", reply=message.tags["id"])
diff --git a/skgyorugo/commands/commands.py b/skgyorugo/commands/commands.py
deleted file mode 100644 (file)
index 2c62bbe..0000000
+++ /dev/null
@@ -1,39 +0,0 @@
-from aptbot.bot import Message, Commands, Bot
-import tools.permissions
-import tools.smart_privmsg
-import sqlite3
-import os
-
-PERMISSION = 99
-PREFIX = "?"
-DESCRIPTION = ""
-USER_COOLDOWN = 30
-GLOBAL_COOLDOWN = 15
-
-
-COMMANDS_PATH = os.path.dirname(os.path.realpath(__file__))
-PATH = os.path.join(COMMANDS_PATH, "..")
-
-
-def main(bot: Bot, message: Message):
-    conn = sqlite3.connect(os.path.join(PATH, "database.db"))
-    c = conn.cursor()
-
-    user_perm = tools.permissions.get_permission_from_id(message.tags["user-id"])
-
-    c.execute(
-        "SELECT prefix, command FROM commands WHERE permission >= ? ORDER BY permission ASC",
-        (user_perm,),
-    )
-
-    fetched_commands = c.fetchall()
-
-    conn.commit()
-    conn.close()
-
-    commands = []
-    for command in fetched_commands:
-        commands.append(f"{command[0]}{command[1]}")
-
-    commands = " ".join(commands)
-    tools.smart_privmsg.send(bot, message, commands)
diff --git a/skgyorugo/commands/deadge.py b/skgyorugo/commands/deadge.py
deleted file mode 100644 (file)
index 3c16538..0000000
+++ /dev/null
@@ -1,112 +0,0 @@
-from aptbot.bot import Message, Commands, Bot
-import os
-import logging
-import ttv_api.users
-import sqlite3
-import tools.smart_privmsg
-import random
-import shlex
-
-logger = logging.getLogger(__name__)
-
-PERMISSION = 99
-PREFIX = "?"
-DESCRIPTION = r"Sekiro death counter"
-USER_COOLDOWN = 10
-GLOBAL_COOLDOWN = 5
-
-PATH = os.path.dirname(os.path.realpath(__file__))
-PATH = os.path.join(PATH, "..")
-
-def check_queue(bot: Bot, message: Message, table: str):
-    conn = sqlite3.connect(os.path.join(PATH, "database.db"))
-    c = conn.cursor()
-
-    c.execute(
-        f"""
-        SELECT id, val FROM varvalues WHERE id = 'deadge_sekiro';
-        """
-    )
-    _, val = c.fetchone()
-
-    if table == "show":
-        msg = f"Peks has currently died {val} times"
-
-        tools.smart_privmsg.send(
-            bot,
-            message,
-            msg,
-            reply=message.tags["id"],
-        )
-
-        conn.close()
-        return
-    if table == "remove":
-        val = val - 1
-        c.execute(
-            f"""
-            UPDATE varvalues SET val = ? WHERE id = 'deadge_sekiro';
-            """,
-            (val,)
-        )
-
-        msg = f"Peks has currently died {val} times"
-
-        tools.smart_privmsg.send(
-            bot,
-            message,
-            msg,
-            reply=message.tags["id"],
-        )
-        conn.commit()
-        conn.close()
-        return
-    if table == "add":
-        val = val + 1
-        c.execute(
-            f"""
-            UPDATE varvalues SET val = ? WHERE id = 'deadge_sekiro';
-            """,
-            (val,)
-        )
-
-        msg = f"Peks has currently died {val} times"
-
-        tools.smart_privmsg.send(
-            bot,
-            message,
-            msg,
-            reply=message.tags["id"],
-        )
-        conn.commit()
-        conn.close()
-        return
-
-
-def parse(query):
-    query = query.split()
-    try:
-        if query[0].lower() == "add":
-            return {"--do": "add"}
-        if query[0].lower() == "remove":
-            return {"--do": "remove"}
-    except:
-        pass
-    return {"--game": "show"}
-    d = dict()
-    for i in shlex.split(query):
-        try:
-            d[i.split('=')[0]] = i.split('=')[1]
-        except:
-            pass
-    return d
-
-
-def scrub(table_name):
-    return ''.join(chr for chr in table_name if chr.isalnum() or chr == '_')
-
-
-def main(bot: Bot, message: Message):
-    args = " ".join(message.value.split(" ")[1:])
-    args = parse(args)
-    check_queue(bot, message, scrub(args.get("--do", "show")))
diff --git a/skgyorugo/commands/delete.py b/skgyorugo/commands/delete.py
deleted file mode 100644 (file)
index 05a8c75..0000000
+++ /dev/null
@@ -1,16 +0,0 @@
-from aptbot.bot import Message, Commands, Bot
-
-PERMISSION = 10
-PREFIX = "\\"
-DESCRIPTION = "Reply to a message with \\delete to delete that message"
-USER_COOLDOWN = 0
-GLOBAL_COOLDOWN = 0
-
-
-def main(bot: Bot, message: Message):
-    try:
-        replied_msg_id = message.tags["reply-parent-msg-id"]
-    except KeyError:
-        return
-    delete = f"/delete {replied_msg_id}"
-    bot.send_privmsg(message.channel, delete)
diff --git a/skgyorugo/commands/editcommand.py b/skgyorugo/commands/editcommand.py
deleted file mode 100644 (file)
index 86a98de..0000000
+++ /dev/null
@@ -1,58 +0,0 @@
-from aptbot.bot import Message, Commands, Bot
-import sqlite3
-import os
-
-PERMISSION = 10
-PREFIX = "\\"
-DESCRIPTION = ""
-USER_COOLDOWN = 0
-GLOBAL_COOLDOWN = 0
-
-
-COMMANDS_PATH = os.path.dirname(os.path.realpath(__file__))
-PATH = os.path.join(COMMANDS_PATH, "..")
-
-
-def main(bot: Bot, message: Message):
-    msg = " ".join(message.value.split(" ")[1:])
-    command = msg.split(" ")[0]
-    command_prefix = command[0]
-    command_name = command[1:]
-    command_value = msg = " ".join(msg.split(" ")[1:])
-    if command_prefix != "?":
-        bot.send_privmsg(
-            message.channel,
-            f"{message.nick} you cannot use {command_prefix} as a prefix",
-        )
-        return
-
-    conn = sqlite3.connect(os.path.join(PATH, "database.db"))
-    c = conn.cursor()
-    c.execute(
-        "SELECT value FROM commands LEFT JOIN command_values USING(command) WHERE command = ? AND prefix = ?",
-        (
-            command_name,
-            command_prefix,
-        ),
-    )
-    if not c.fetchone()[0]:
-        bot.send_privmsg(
-            message.channel,
-            f"The command {command_prefix}{command_name} cannot be edited",
-        )
-        return
-
-    try:
-        c.execute(
-            "UPDATE command_values SET value = ? WHERE command = ?",
-            (
-                command_value,
-                command_name,
-            ),
-        )
-    except sqlite3.IntegrityError:
-        bot.send_privmsg(message.channel, f"The command {command_name} doesn't exist.")
-    else:
-        bot.send_privmsg(message.channel, f"Successfully updated {command_name}.")
-    conn.commit()
-    conn.close()
diff --git a/skgyorugo/commands/emotes.py b/skgyorugo/commands/emotes.py
deleted file mode 100644 (file)
index d18808f..0000000
+++ /dev/null
@@ -1,33 +0,0 @@
-from aptbot.bot import Message, Commands, Bot
-import tools.smart_privmsg
-import urllib3
-
-PERMISSION = 9
-PREFIX = "\\"
-DESCRIPTION = ""
-USER_COOLDOWN = 900
-GLOBAL_COOLDOWN = 600
-
-
-def main(bot: Bot, message: Message):
-    http = urllib3.PoolManager()
-    r1 = http.request(
-        "GET",
-        f"https://twitch.center/customapi/bttvemotes?channel={message.channel}",
-    )
-    r2 = http.request(
-        "GET",
-        f"https://twitch.center/customapi/ffzemotes?channel={message.channel}",
-    )
-
-    if r1.status != 200 or r2.status != 200:
-        bot.send_privmsg(
-            message.channel,
-            "NotLikeThis oopsie woopsie, we've made a fucky wucky. We can't \
-            get the emotes at the moment. Hopefuwwy UwU wiww wait patientwy \
-            tiww we get thiws pwobwem sowted. OwO",
-        )
-        return
-    emotes = r1.data.decode("utf-8")
-    emotes += " " + r2.data.decode("utf-8")
-    tools.smart_privmsg.send(bot, message, emotes)
diff --git a/skgyorugo/commands/forcehere.py b/skgyorugo/commands/forcehere.py
deleted file mode 100644 (file)
index 0c27769..0000000
+++ /dev/null
@@ -1,282 +0,0 @@
-from aptbot.bot import Message, Commands, Bot
-import os
-import shlex
-import logging
-import ttv_api.users
-import sqlite3
-import time
-
-logger = logging.getLogger(__name__)
-
-PERMISSION = 10
-PREFIX = "\\"
-DESCRIPTION = r"Force user to become available in the list."
-USER_COOLDOWN = 0
-GLOBAL_COOLDOWN = 0
-
-PATH = os.path.dirname(os.path.realpath(__file__))
-PATH = os.path.join(PATH, "..")
-
-
-def force_here(bot: Bot, message: Message, table: str):
-    twitch_name = message.tags.get("reply-parent-user-login", None)
-    if not twitch_name:
-        twitch_name = message.value.split(" ")[1]
-    twitch = ttv_api.users.get_users(user_logins=[twitch_name])
-    if not twitch:
-        bot.send_privmsg(
-            message.channel,
-            "There was an issue fetching their twitch data. They weren't made unavailable.",
-            reply=message.tags["id"],
-        )
-        return
-    twitch_id = twitch[0].user_id
-    conn = sqlite3.connect(os.path.join(PATH, "lol_data.db"))
-    c = conn.cursor()
-
-    c.execute(
-        f"""
-        UPDATE
-            {table}
-        SET
-            position = (
-                CASE
-                    WHEN (
-                        SELECT
-                            position
-                        FROM
-                            {table}
-                        WHERE
-                            twitch_id = ?
-                    ) < (
-                        SELECT
-                            max(position)
-                        FROM (
-                            SELECT
-                                position
-                            FROM
-                                {table}
-                            WHERE
-                                available = 1
-                            ORDER BY
-                                position
-                            LIMIT (
-                                SELECT
-                                    data
-                                FROM
-                                    {table}_data
-                                WHERE
-                                    name = 'queuesize'
-                            )
-                        )
-                    )
-                    THEN position + 1
-                    ELSE position
-                END
-            )
-        WHERE
-            position > (
-                SELECT
-                    max(position)
-                FROM
-                    {table}
-                WHERE
-                    priority_queue = 1
-                    OR position <= (
-                        SELECT
-                            max(position)
-                        FROM (
-                            SELECT
-                                position
-                            FROM
-                                {table}
-                            WHERE
-                                available = 1
-                            ORDER BY 
-                                position
-                            LIMIT (
-                                SELECT
-                                    data
-                                FROM
-                                    {table}_data
-                                WHERE
-                                    name = 'queuesize'
-                            )
-                        )
-                            
-                    )
-            );
-        """,
-        (twitch_id,),
-    )
-
-    c.execute(
-        f"""
-        UPDATE
-            {table}
-        SET 
-            available = 1,
-            priority_queue = (
-                CASE
-                    WHEN (
-                        SELECT
-                            position
-                        FROM
-                            {table}
-                        WHERE
-                            twitch_id = ?
-                    ) < (
-                        SELECT
-                            max(position)
-                        FROM (
-                            SELECT
-                                position
-                            FROM
-                                {table}
-                            WHERE
-                                available = 1
-                            ORDER BY 
-                                position
-                            LIMIT (
-                                SELECT
-                                    data
-                                FROM
-                                    {table}_data
-                                WHERE
-                                    name = 'queuesize'
-                            )
-                        )
-                    )
-                    THEN 1
-                    ELSE null
-                END
-            ),
-            position = (
-                CASE
-                    WHEN (
-                        SELECT
-                            position
-                        FROM
-                            {table}
-                        WHERE
-                            twitch_id = ?
-                    ) < (
-                        SELECT
-                            max(position)
-                        FROM (
-                            SELECT
-                                position
-                            FROM
-                                {table}
-                            WHERE
-                                available = 1
-                            ORDER BY 
-                                position
-                            LIMIT (
-                                SELECT
-                                    data
-                                FROM
-                                    {table}_data
-                                WHERE
-                                    name = 'queuesize'
-                            )
-                        )
-                    )
-                    THEN 1 + (
-                        SELECT
-                            max(position)
-                        FROM
-                            {table}
-                        WHERE
-                            priority_queue = 1
-                            OR position <= (
-                                SELECT
-                                    max(position)
-                                FROM (
-                                    SELECT
-                                        position
-                                    FROM
-                                        {table}
-                                    WHERE
-                                        available = 1
-                                    ORDER BY 
-                                        position
-                                    LIMIT (
-                                        SELECT
-                                            data
-                                        FROM
-                                            {table}_data
-                                        WHERE
-                                            name = 'queuesize'
-                                    )
-                                )
-                            )
-                    )
-                    ELSE position
-                END
-            ),
-            time_remaining = time_remaining - (? - last_available)
-        WHERE 
-            twitch_id = ?
-            AND available = 0;
-        """,
-        (
-            twitch_id,
-            twitch_id,
-            int(time.time()),
-            twitch_id,
-        ),
-    )
-    if c.rowcount < 1:
-        bot.send_privmsg(
-            message.channel,
-            "They aren't in the list or they were already available.",
-            reply=message.tags["id"],
-        )
-        conn.close()
-        return
-    conn.commit()
-    c.execute(f"DELETE FROM {table} WHERE time_remaining < 0;")
-    if c.rowcount > 0:
-        bot.send_privmsg(
-            message.channel,
-            "They were unavailable for too long, they have been removed from the list.",
-            reply=message.tags["id"],
-        )
-        conn.commit()
-        conn.close()
-        return
-    conn.commit()
-    bot.send_privmsg(
-        message.channel,
-        "Successfully made them available",
-        reply=message.tags["id"],
-    )
-    conn.close()
-
-
-def parse(query):
-    query = query.split()
-    try:
-        if query[1].lower() in {"ow", "overwatch", "ow2", "overwatch2"}:
-            return {"--game": "ow"}
-    except:
-        pass
-    return {"--game": "lol_queue"}
-    d = dict()
-    for i in shlex.split(query):
-        try:
-            d[i.split('=')[0]] = i.split('=')[1]
-        except:
-            pass
-    return d
-
-
-def scrub(table_name):
-    return ''.join(chr for chr in table_name if chr.isalnum() or chr == '_')
-
-
-def main(bot: Bot, message: Message):
-    args = " ".join(message.value.split(" ")[1:])
-    args = parse(args)
-    force_here(bot, message, scrub(args.get("--game", "lol_queue")))
diff --git a/skgyorugo/commands/forcejoin.py b/skgyorugo/commands/forcejoin.py
deleted file mode 100644 (file)
index df60a98..0000000
+++ /dev/null
@@ -1,109 +0,0 @@
-from aptbot.bot import Message, Commands, Bot
-import shlex
-import os
-import logging
-import ttv_api.users
-import sqlite3
-
-logger = logging.getLogger(__name__)
-
-PERMISSION = 10
-PREFIX = "\\"
-DESCRIPTION = r"Force user to join the queue to play the game with the streamer."
-USER_COOLDOWN = 0
-GLOBAL_COOLDOWN = 0
-
-PATH = os.path.dirname(os.path.realpath(__file__))
-PATH = os.path.join(PATH, "..")
-
-DEFAULT_TIME_REMAINING = 60 * 60
-
-
-def force_join(bot: Bot, message: Message, table: str):
-    twitch_name = message.tags.get("reply-parent-user-login", None)
-    if not twitch_name:
-        twitch_name = message.value.split(" ")[1]
-    twitch = ttv_api.users.get_users(user_logins=[twitch_name])
-    if not twitch:
-        bot.send_privmsg(
-            message.channel,
-            "There was an issue fetching the user's twitch data. They weren't added to the list Sadge",
-            reply=message.tags["id"],
-        )
-        return
-    twitch_id = twitch[0].user_id
-    conn = sqlite3.connect(os.path.join(PATH, "lol_data.db"))
-    c = conn.cursor()
-
-    c.execute(
-        f"""
-        SELECT position FROM {table} ORDER BY position DESC;
-        """
-    )
-
-    try:
-        last_position: int = c.fetchone()[0]
-    except TypeError:
-        last_position: int = -1
-
-    try:
-        c.execute(
-            f"""
-            INSERT INTO {table} (
-                "twitch_id",
-                "position",
-                "available",
-                "last_available",
-                "time_remaining"
-            ) VALUES (?, ?, ?, ?, ?);
-            """,
-            (
-                twitch_id,
-                last_position + 1,
-                1,
-                None,
-                DEFAULT_TIME_REMAINING,
-            ),
-        )
-    except sqlite3.IntegrityError:
-        bot.send_privmsg(
-            message.channel,
-            "They are already added into the list",
-            reply=message.tags["id"],
-        )
-        conn.close()
-        return
-    conn.commit()
-    bot.send_privmsg(
-        message.channel,
-        "Successfully added them into the list",
-        reply=message.tags["id"],
-    )
-    conn.close()
-
-
-def parse(query):
-    query = query.split()
-    try:
-        if query[1].lower() in {"ow", "overwatch", "ow2", "overwatch2"}:
-            return {"--game": "ow"}
-    except:
-        pass
-    return {"--game": "lol_queue"}
-    d = dict()
-    for i in shlex.split(query):
-        try:
-            d[i.split('=')[0]] = i.split('=')[1]
-        except:
-            pass
-    return d
-
-
-def scrub(table_name):
-    return ''.join(chr for chr in table_name if chr.isalnum() or chr == '_')
-
-
-def main(bot: Bot, message: Message):
-    args = " ".join(message.value.split(" ")[1:])
-    args = parse(args)
-    force_join(bot, message, scrub(args.get("--game", "lol_queue")))
diff --git a/skgyorugo/commands/forceleave.py b/skgyorugo/commands/forceleave.py
deleted file mode 100644 (file)
index 62cce65..0000000
+++ /dev/null
@@ -1,83 +0,0 @@
-from aptbot.bot import Message, Commands, Bot
-import os
-import logging
-import ttv_api.users
-import sqlite3
-import shlex
-
-logger = logging.getLogger(__name__)
-
-PERMISSION = 10
-PREFIX = "\\"
-DESCRIPTION = r"Force user to leave the queue which gives them the privalege to play with the streamer."
-USER_COOLDOWN = 0
-GLOBAL_COOLDOWN = 0
-
-PATH = os.path.dirname(os.path.realpath(__file__))
-PATH = os.path.join(PATH, "..")
-
-
-def force_leave(bot: Bot, message: Message, table: str):
-    twitch_name = message.tags.get("reply-parent-user-login", None)
-    if not twitch_name:
-        twitch_name = message.value.split(" ")[1]
-    twitch = ttv_api.users.get_users(user_logins=[twitch_name])
-    if not twitch:
-        bot.send_privmsg(
-            message.channel,
-            "There was an issue fetching their twitch data. They weren't removed from the list Sadge",
-            reply=message.tags["id"],
-        )
-        return
-    twitch_id = twitch[0].user_id
-    conn = sqlite3.connect(os.path.join(PATH, "lol_data.db"))
-    c = conn.cursor()
-
-    c.execute(
-        f"""
-        DELETE FROM {table} WHERE twitch_id = ?;
-        """,
-        (twitch_id,),
-    )
-    if not c.rowcount:
-        bot.send_privmsg(
-            message.channel,
-            "They weren't in the list.",
-            reply=message.tags["id"],
-        )
-        conn.close()
-        return
-    conn.commit()
-    bot.send_privmsg(
-        message.channel,
-        "Successfully removed them from the list",
-        reply=message.tags["id"],
-    )
-    conn.close()
-
-
-def parse(query):
-    query = query.split()
-    try:
-        if query[1].lower() in {"ow", "overwatch", "ow2", "overwatch2"}:
-            return {"--game": "ow"}
-    except:
-        pass
-    return {"--game": "lol_queue"}
-    d = dict()
-    for i in shlex.split(query):
-        try:
-            d[i.split('=')[0]] = i.split('=')[1]
-        except:
-            pass
-    return d
-
-
-def scrub(table_name):
-    return ''.join(chr for chr in table_name if chr.isalnum() or chr == '_')
-
-
-def main(bot: Bot, message: Message):
-    args = " ".join(message.value.split(" ")[1:])
-    args = parse(args)
-    force_leave(bot, message, scrub(args.get("--game", "lol_queue")))
diff --git a/skgyorugo/commands/forcenothere.py b/skgyorugo/commands/forcenothere.py
deleted file mode 100644 (file)
index 4944b66..0000000
+++ /dev/null
@@ -1,87 +0,0 @@
-from aptbot.bot import Message, Commands, Bot
-import os
-import logging
-import ttv_api.users
-import sqlite3
-import time
-import shlex
-
-logger = logging.getLogger(__name__)
-
-PERMISSION = 10
-PREFIX = "\\"
-DESCRIPTION = r"Makes yourself temporarily unavailable in the list."
-USER_COOLDOWN = 0
-GLOBAL_COOLDOWN = 0
-
-PATH = os.path.dirname(os.path.realpath(__file__))
-PATH = os.path.join(PATH, "..")
-
-
-def force_not_here(bot: Bot, message: Message, table: str):
-    twitch_name = message.tags.get("reply-parent-user-login", None)
-    if not twitch_name:
-        twitch_name = message.value.split(" ")[1]
-    twitch = ttv_api.users.get_users(user_logins=[twitch_name])
-    if not twitch:
-        bot.send_privmsg(
-            message.channel,
-            "There was an issue fetching their twitch data. They weren't made unavailable.",
-            reply=message.tags["id"],
-        )
-        return
-    twitch_id = twitch[0].user_id
-    conn = sqlite3.connect(os.path.join(PATH, "lol_data.db"))
-    c = conn.cursor()
-
-    c.execute(
-        f"""
-        UPDATE {table} SET available = 0, priority_queue = null, last_available = ? WHERE twitch_id = ?;
-        """,
-        (
-            int(time.time()),
-            twitch_id,
-        ),
-    )
-    if not c.rowcount:
-        bot.send_privmsg(
-            message.channel,
-            "They aren't in the list or they were already unavailable.",
-            reply=message.tags["id"],
-        )
-        conn.close()
-        return
-    conn.commit()
-    bot.send_privmsg(
-        message.channel,
-        "Successfully made them unavailable",
-        reply=message.tags["id"],
-    )
-    conn.close()
-
-
-def parse(query):
-    query = query.split()
-    try:
-        if query[1].lower() in {"ow", "overwatch", "ow2", "overwatch2"}:
-            return {"--game": "ow"}
-    except:
-        pass
-    return {"--game": "lol_queue"}
-    d = dict()
-    for i in shlex.split(query):
-        try:
-            d[i.split('=')[0]] = i.split('=')[1]
-        except:
-            pass
-    return d
-
-
-def scrub(table_name):
-    return ''.join(chr for chr in table_name if chr.isalnum() or chr == '_')
-
-
-def main(bot: Bot, message: Message):
-    args = " ".join(message.value.split(" ")[1:])
-    args = parse(args)
-    force_not_here(bot, message, scrub(args.get("--game", "lol_queue")))
diff --git a/skgyorugo/commands/here.py b/skgyorugo/commands/here.py
deleted file mode 100644 (file)
index 2002cb5..0000000
+++ /dev/null
@@ -1,279 +0,0 @@
-from aptbot.bot import Message, Commands, Bot
-import os
-import logging
-import ttv_api.users
-import sqlite3
-import time
-import shlex
-
-logger = logging.getLogger(__name__)
-
-PERMISSION = 99
-PREFIX = "?"
-DESCRIPTION = r"Makes yourself available in the list."
-USER_COOLDOWN = 10
-GLOBAL_COOLDOWN = 0
-
-PATH = os.path.dirname(os.path.realpath(__file__))
-PATH = os.path.join(PATH, "..")
-
-
-def here(bot: Bot, message: Message, table: str):
-    twitch = ttv_api.users.get_users(user_logins=[message.nick])
-    if not twitch:
-        bot.send_privmsg(
-            message.channel,
-            "There was an issue fetching your twitch data. You weren't made unavailable.",
-            reply=message.tags["id"],
-        )
-        return
-    twitch_id = twitch[0].user_id
-    conn = sqlite3.connect(os.path.join(PATH, "lol_data.db"))
-    c = conn.cursor()
-
-    c.execute(
-        f"""
-        UPDATE
-            {table}
-        SET
-            position = (
-                CASE
-                    WHEN (
-                        SELECT
-                            position
-                        FROM
-                            {table}
-                        WHERE
-                            twitch_id = ?
-                    ) < (
-                        SELECT
-                            max(position)
-                        FROM (
-                            SELECT
-                                position
-                            FROM
-                                {table}
-                            WHERE
-                                available = 1
-                            ORDER BY
-                                position
-                            LIMIT (
-                                SELECT
-                                    data
-                                FROM
-                                    {table}_data
-                                WHERE
-                                    name = 'queuesize'
-                            )
-                        )
-                    )
-                    THEN position + 1
-                    ELSE position
-                END
-            )
-        WHERE
-            position > (
-                SELECT
-                    max(position)
-                FROM
-                    {table}
-                WHERE
-                    priority_queue = 1
-                    OR position <= (
-                        SELECT
-                            max(position)
-                        FROM (
-                            SELECT
-                                position
-                            FROM
-                                {table}
-                            WHERE
-                                available = 1
-                            ORDER BY 
-                                position
-                            LIMIT (
-                                SELECT
-                                    data
-                                FROM
-                                    {table}_data
-                                WHERE
-                                    name = 'queuesize'
-                            )
-                        )
-                            
-                    )
-            );
-        """,
-        (twitch_id,),
-    )
-
-    c.execute(
-        f"""
-        UPDATE
-            {table}
-        SET 
-            available = 1,
-            priority_queue = (
-                CASE
-                    WHEN (
-                        SELECT
-                            position
-                        FROM
-                            {table}
-                        WHERE
-                            twitch_id = ?
-                    ) < (
-                        SELECT
-                            max(position)
-                        FROM (
-                            SELECT
-                                position
-                            FROM
-                                {table}
-                            WHERE
-                                available = 1
-                            ORDER BY 
-                                position
-                            LIMIT (
-                                SELECT
-                                    data
-                                FROM
-                                    {table}_data
-                                WHERE
-                                    name = 'queuesize'
-                            )
-                        )
-                    )
-                    THEN 1
-                    ELSE null
-                END
-            ),
-            position = (
-                CASE
-                    WHEN (
-                        SELECT
-                            position
-                        FROM
-                            {table}
-                        WHERE
-                            twitch_id = ?
-                    ) < (
-                        SELECT
-                            max(position)
-                        FROM (
-                            SELECT
-                                position
-                            FROM
-                                {table}
-                            WHERE
-                                available = 1
-                            ORDER BY 
-                                position
-                            LIMIT (
-                                SELECT
-                                    data
-                                FROM
-                                    {table}_data
-                                WHERE
-                                    name = 'queuesize'
-                            )
-                        )
-                    )
-                    THEN 1 + (
-                        SELECT
-                            max(position)
-                        FROM
-                            {table}
-                        WHERE
-                            priority_queue = 1
-                            OR position <= (
-                                SELECT
-                                    max(position)
-                                FROM (
-                                    SELECT
-                                        position
-                                    FROM
-                                        {table}
-                                    WHERE
-                                        available = 1
-                                    ORDER BY 
-                                        position
-                                    LIMIT (
-                                        SELECT
-                                            data
-                                        FROM
-                                            {table}_data
-                                        WHERE
-                                            name = 'queuesize'
-                                    )
-                                )
-                            )
-                    )
-                    ELSE position
-                END
-            ),
-            time_remaining = time_remaining - (? - last_available)
-        WHERE 
-            twitch_id = ?
-            AND available = 0;
-        """,
-        (
-            twitch_id,
-            twitch_id,
-            int(time.time()),
-            twitch_id,
-        ),
-    )
-    if c.rowcount < 1:
-        bot.send_privmsg(
-            message.channel,
-            "You aren't in the list or you were already available.",
-            reply=message.tags["id"],
-        )
-        conn.close()
-        return
-    conn.commit()
-    c.execute(f"DELETE FROM {table} WHERE time_remaining < 0;")
-    if c.rowcount > 0:
-        bot.send_privmsg(
-            message.channel,
-            "You were unavailable for too long, you have been removed from the list.",
-            reply=message.tags["id"],
-        )
-        conn.commit()
-        conn.close()
-        return
-    conn.commit()
-    bot.send_privmsg(
-        message.channel,
-        "Successfully made you available",
-        reply=message.tags["id"],
-    )
-    conn.close()
-
-
-def parse(query):
-    query = query.split()
-    try:
-        if query[1].lower() in {"ow", "overwatch", "ow2", "overwatch2"}:
-            return {"--game": "ow"}
-    except:
-        pass
-    return {"--game": "lol_queue"}
-    d = dict()
-    for i in shlex.split(query):
-        try:
-            d[i.split('=')[0]] = i.split('=')[1]
-        except:
-            pass
-    return d
-
-
-def scrub(table_name):
-    return ''.join(chr for chr in table_name if chr.isalnum() or chr == '_')
-
-
-def main(bot: Bot, message: Message):
-    args = " ".join(message.value.split(" ")[1:])
-    args = parse(args)
-    here(bot, message, scrub(args.get("--game", "lol_queue")))
diff --git a/skgyorugo/commands/join.py b/skgyorugo/commands/join.py
deleted file mode 100644 (file)
index 8484186..0000000
+++ /dev/null
@@ -1,106 +0,0 @@
-from aptbot.bot import Message, Commands, Bot
-import os
-import logging
-import ttv_api.users
-import sqlite3
-import shlex
-
-logger = logging.getLogger(__name__)
-
-PERMISSION = 99
-PREFIX = "?"
-DESCRIPTION = r"Joins the queue to play the game with the streamer."
-USER_COOLDOWN = 10
-GLOBAL_COOLDOWN = 0
-
-PATH = os.path.dirname(os.path.realpath(__file__))
-PATH = os.path.join(PATH, "..")
-
-DEFAULT_TIME_REMAINING = 60 * 60
-
-
-def join(bot: Bot, message: Message, table: str):
-    twitch = ttv_api.users.get_users(user_logins=[message.nick])
-    if not twitch:
-        bot.send_privmsg(
-            message.channel,
-            "There was an issue fetching your twitch data. You weren't added to the list Sadge",
-            reply=message.tags["id"],
-        )
-        return
-    twitch_id = twitch[0].user_id
-    conn = sqlite3.connect(os.path.join(PATH, "lol_data.db"))
-    c = conn.cursor()
-
-    c.execute(
-        f"""
-        SELECT position FROM {table} ORDER BY position DESC;
-        """
-    )
-
-    try:
-        last_position: int = c.fetchone()[0]
-    except TypeError:
-        last_position: int = -1
-
-    try:
-        c.execute(
-            f"""
-            INSERT INTO {table} (
-                "twitch_id",
-                "position",
-                "available",
-                "last_available",
-                "time_remaining"
-            ) VALUES (?, ?, ?, ?, ?);
-            """,
-            (
-                twitch_id,
-                last_position + 1,
-                1,
-                None,
-                DEFAULT_TIME_REMAINING,
-            ),
-        )
-    except sqlite3.IntegrityError:
-        bot.send_privmsg(
-            message.channel,
-            "You are already added into the list",
-            reply=message.tags["id"],
-        )
-        conn.close()
-        return
-    conn.commit()
-    bot.send_privmsg(
-        message.channel,
-        "Successfully added you into the list",
-        reply=message.tags["id"],
-    )
-    conn.close()
-
-
-def parse(query):
-    query = query.split()
-    try:
-        if query[0].lower() in {"ow", "overwatch", "ow2", "overwatch2"}:
-            return {"--game": "ow"}
-    except:
-        pass
-    return {"--game": "lol_queue"}
-    d = dict()
-    for i in shlex.split(query):
-        try:
-            d[i.split('=')[0]] = i.split('=')[1]
-        except:
-            pass
-    return d
-
-
-def scrub(table_name):
-    return ''.join(chr for chr in table_name if chr.isalnum() or chr == '_')
-
-
-def main(bot: Bot, message: Message):
-    args = " ".join(message.value.split(" ")[1:])
-    args = parse(args)
-    join(bot, message, scrub(args.get("--game", "lol_queue")))
diff --git a/skgyorugo/commands/joke.py b/skgyorugo/commands/joke.py
deleted file mode 100644 (file)
index c01c1b2..0000000
+++ /dev/null
@@ -1,28 +0,0 @@
-from aptbot.bot import Message, Commands, Bot
-import tools.smart_privmsg
-import urllib3
-import json
-
-PERMISSION = 99
-PREFIX = "?"
-DESCRIPTION = r""
-USER_COOLDOWN = 30
-GLOBAL_COOLDOWN = 30
-
-header = {
-    "Accept": "application/json",
-    "User-Agent": "For my twitch bot [MurphyAI] on https://twitch.tv/ihaspeks",
-}
-
-
-def main(bot: Bot, message: Message):
-    http = urllib3.PoolManager()
-    r = http.request("GET", "https://icanhazdadjoke.com", headers=header)
-    if r.status != 200:
-        tools.smart_privmsg.send(
-            bot, message, f"Couldn't get a joke Sadge", reply=message.tags["id"]
-        )
-        return
-
-    data = json.loads(r.data.decode("utf-8"))
-    tools.smart_privmsg.send(bot, message, f"{data['joke']}", reply=message.tags["id"])
diff --git a/skgyorugo/commands/latege.py b/skgyorugo/commands/latege.py
deleted file mode 100644 (file)
index 71732d2..0000000
+++ /dev/null
@@ -1,35 +0,0 @@
-from aptbot.bot import Message, Commands, Bot
-import tools.smart_start_stream_time
-from datetime import datetime
-import datetime as dt
-
-PERMISSION = 99
-PREFIX = "?"
-DESCRIPTION = ""
-USER_COOLDOWN = 15
-GLOBAL_COOLDOWN = 5
-
-STREAM_SCHEDULE = dt.time(18, 30)
-
-
-def main(bot: Bot, message: Message):
-    start_stream_ts = tools.smart_start_stream_time.start_stream_timestamp()
-    if not start_stream_ts:
-        return
-    start_stream_dt = datetime.utcfromtimestamp(start_stream_ts)
-    stream_schedule_dt = datetime.combine(
-        datetime.utcfromtimestamp(start_stream_ts), STREAM_SCHEDULE
-    )
-    latege_amount = (start_stream_dt - stream_schedule_dt).total_seconds()
-    if latege_amount > 45 * 60:
-        msg = f"{message.channel} is so Latege he might as well have not \
-            streamed today. At least he's early for tomorrow COPIUM . \
-            {message.channel} is Latege by {latege_amount} seconds Madge"
-    elif latege_amount > 0:
-        msg = f"{message.channel} is Latege by {latege_amount} seconds again Madge"
-    elif latege_amount == 0:
-        msg = f"Amazing!!! {message.channel} is EXACTLY on time today POGGERS"
-    else:
-        msg = f"UNBELIEVABLE!!!!! {message.channel} is EARLY by {-latege_amount} seconds!!!!\
-        This has NEVER happened before POGGERS"
-    bot.send_privmsg(message.channel, msg)
diff --git a/skgyorugo/commands/leave.py b/skgyorugo/commands/leave.py
deleted file mode 100644 (file)
index ac7fefe..0000000
+++ /dev/null
@@ -1,82 +0,0 @@
-from aptbot.bot import Message, Commands, Bot
-import os
-import logging
-import ttv_api.users
-import sqlite3
-import shlex
-
-logger = logging.getLogger(__name__)
-
-PERMISSION = 99
-PREFIX = "?"
-DESCRIPTION = (
-    r"Leaves the queue which gives you the privalege to play with the streamer."
-)
-USER_COOLDOWN = 60
-GLOBAL_COOLDOWN = 0
-
-PATH = os.path.dirname(os.path.realpath(__file__))
-PATH = os.path.join(PATH, "..")
-
-
-def leave(bot: Bot, message: Message, table: str):
-    twitch = ttv_api.users.get_users(user_logins=[message.nick])
-    if not twitch:
-        bot.send_privmsg(
-            message.channel,
-            "There was an issue fetching your twitch data. You weren't removed from the list Sadge",
-            reply=message.tags["id"],
-        )
-        return
-    twitch_id = twitch[0].user_id
-    conn = sqlite3.connect(os.path.join(PATH, "lol_data.db"))
-    c = conn.cursor()
-
-    c.execute(
-        f"""
-        DELETE FROM {table} WHERE twitch_id = ?;
-        """,
-        (twitch_id,),
-    )
-    if not c.rowcount:
-        bot.send_privmsg(
-            message.channel,
-            "You weren't in the list.",
-            reply=message.tags["id"],
-        )
-        conn.close()
-        return
-    conn.commit()
-    bot.send_privmsg(
-        message.channel,
-        "Successfully removed you from the list",
-        reply=message.tags["id"],
-    )
-    conn.close()
-
-
-def parse(query):
-    query = query.split()
-    try:
-        if query[0].lower() in {"ow", "overwatch", "ow2", "overwatch2"}:
-            return {"--game": "ow"}
-    except:
-        pass
-    return {"--game": "lol_queue"}
-    d = dict()
-    for i in shlex.split(query):
-        try:
-            d[i.split('=')[0]] = i.split('=')[1]
-        except:
-            pass
-    return d
-
-
-def scrub(table_name):
-    return ''.join(chr for chr in table_name if chr.isalnum() or chr == '_')
-
-
-def main(bot: Bot, message: Message):
-    args = " ".join(message.value.split(" ")[1:])
-    args = parse(args)
-    leave(bot, message, scrub(args.get("--game", "lol_queue")))
diff --git a/skgyorugo/commands/movedown.py b/skgyorugo/commands/movedown.py
deleted file mode 100644 (file)
index e64d3ed..0000000
+++ /dev/null
@@ -1,131 +0,0 @@
-from aptbot.bot import Message, Commands, Bot
-import os
-import logging
-import ttv_api.users
-import sqlite3
-import shlex
-
-logger = logging.getLogger(__name__)
-
-PERMISSION = 10
-PREFIX = "\\"
-DESCRIPTION = r"Move the user down one row in the queue."
-USER_COOLDOWN = 0
-GLOBAL_COOLDOWN = 0
-
-PATH = os.path.dirname(os.path.realpath(__file__))
-PATH = os.path.join(PATH, "..")
-
-
-def move_down(bot: Bot, message: Message, table: str):
-    twitch_name = message.tags.get("reply-parent-user-login", None)
-    if not twitch_name:
-        twitch_name = message.value.split(" ")[1]
-    twitch = ttv_api.users.get_users(user_logins=[twitch_name])
-    if not twitch:
-        bot.send_privmsg(
-            message.channel,
-            "There was an issue fetching the user's twitch data. They weren't moved down in the list Sadge",
-            reply=message.tags["id"],
-        )
-        return
-    twitch_id = twitch[0].user_id
-
-    conn = sqlite3.connect(os.path.join(PATH, "lol_data.db"))
-    c = conn.cursor()
-
-    try:
-        c.execute(
-            f"""
-            UPDATE
-                {table}
-            SET
-                position = (
-                    SELECT
-                        min(position)
-                    FROM
-                        {table}
-                    WHERE
-                        position > (
-                            SELECT
-                                position
-                            FROM
-                                {table}
-                            WHERE
-                                twitch_id = ?
-                        )
-                ) + (
-                    SELECT
-                        position
-                    FROM
-                        {table}
-                    WHERE
-                        twitch_id = ?
-                ) - position
-            WHERE
-                position in (
-                    (
-                        SELECT
-                            min(position)
-                        FROM
-                            {table}
-                        WHERE
-                            position > (
-                                SELECT
-                                    position
-                                FROM
-                                    {table}
-                                WHERE
-                                    twitch_id = ?
-                            )
-                    ),
-                    (
-                        SELECT
-                            position 
-                        FROM
-                            {table}
-                        WHERE
-                            twitch_id = ?
-                    )
-                );
-            """,
-            (twitch_id,) * 4,
-        )
-    except sqlite3.IntegrityError:
-        bot.send_privmsg(
-            message.channel, "Can't move user down further", reply=message.tags["id"]
-        )
-        conn.close()
-        return
-    conn.commit()
-    bot.send_privmsg(
-        message.channel, "Successfully moved them down.", reply=message.tags["id"]
-    )
-    conn.close()
-
-
-def parse(query):
-    query = query.split()
-    try:
-        if query[1].lower() in {"ow", "overwatch", "ow2", "overwatch2"}:
-            return {"--game": "ow"}
-    except:
-        pass
-    return {"--game": "lol_queue"}
-    d = dict()
-    for i in shlex.split(query):
-        try:
-            d[i.split('=')[0]] = i.split('=')[1]
-        except:
-            pass
-    return d
-
-
-def scrub(table_name):
-    return ''.join(chr for chr in table_name if chr.isalnum() or chr == '_')
-
-
-def main(bot: Bot, message: Message):
-    args = " ".join(message.value.split(" ")[1:])
-    args = parse(args)
-    move_down(bot, message, scrub(args.get("--game", "lol_queue")))
diff --git a/skgyorugo/commands/moveup.py b/skgyorugo/commands/moveup.py
deleted file mode 100644 (file)
index 42b7f12..0000000
+++ /dev/null
@@ -1,131 +0,0 @@
-from aptbot.bot import Message, Commands, Bot
-import os
-import logging
-import ttv_api.users
-import sqlite3
-import shlex
-
-logger = logging.getLogger(__name__)
-
-PERMISSION = 10
-PREFIX = "\\"
-DESCRIPTION = r"Move the user up one row in the queue."
-USER_COOLDOWN = 0
-GLOBAL_COOLDOWN = 0
-
-PATH = os.path.dirname(os.path.realpath(__file__))
-PATH = os.path.join(PATH, "..")
-
-
-def move_up(bot: Bot, message: Message, table: str):
-    twitch_name = message.tags.get("reply-parent-user-login", None)
-    if not twitch_name:
-        twitch_name = message.value.split(" ")[1]
-    twitch = ttv_api.users.get_users(user_logins=[twitch_name])
-    if not twitch:
-        bot.send_privmsg(
-            message.channel,
-            "There was an issue fetching the user's twitch data. They weren't moved up in the list Sadge",
-            reply=message.tags["id"],
-        )
-        return
-    twitch_id = twitch[0].user_id
-
-    conn = sqlite3.connect(os.path.join(PATH, "lol_data.db"))
-    c = conn.cursor()
-
-    try:
-        c.execute(
-            f"""
-            UPDATE
-                {table}
-            SET
-                position = (
-                    SELECT
-                        max(position)
-                    FROM
-                        {table}
-                    WHERE
-                        position < (
-                            SELECT
-                                position
-                            FROM
-                                {table}
-                            WHERE
-                                twitch_id = ?
-                        )
-                ) + (
-                    SELECT
-                        position
-                    FROM
-                        {table}
-                    WHERE
-                        twitch_id = ?
-                ) - position
-            WHERE
-                position in (
-                    (
-                        SELECT
-                            max(position)
-                        FROM
-                            {table}
-                        WHERE
-                            position < (
-                                SELECT
-                                    position
-                                FROM
-                                    {table}
-                                WHERE
-                                    twitch_id = ?
-                            )
-                    ),
-                    (
-                        SELECT
-                            position 
-                        FROM
-                            {table}
-                        WHERE
-                            twitch_id = ?
-                    )
-                );
-            """,
-            (twitch_id,) * 4,
-        )
-    except sqlite3.IntegrityError:
-        bot.send_privmsg(
-            message.channel, "Can't move user up further", reply=message.tags["id"]
-        )
-        conn.close()
-        return
-    conn.commit()
-    bot.send_privmsg(
-        message.channel, "Successfully moved them up.", reply=message.tags["id"]
-    )
-    conn.close()
-
-
-def parse(query):
-    query = query.split()
-    try:
-        if query[1].lower() in {"ow", "overwatch", "ow2", "overwatch2"}:
-            return {"--game": "ow"}
-    except:
-        pass
-    return {"--game": "lol_queue"}
-    d = dict()
-    for i in shlex.split(query):
-        try:
-            d[i.split('=')[0]] = i.split('=')[1]
-        except:
-            pass
-    return d
-
-
-def scrub(table_name):
-    return ''.join(chr for chr in table_name if chr.isalnum() or chr == '_')
-
-
-def main(bot: Bot, message: Message):
-    args = " ".join(message.value.split(" ")[1:])
-    args = parse(args)
-    move_up(bot, message, scrub(args.get("--game", "lol_queue")))
diff --git a/skgyorugo/commands/newteams.py b/skgyorugo/commands/newteams.py
deleted file mode 100644 (file)
index a7a3c64..0000000
+++ /dev/null
@@ -1,124 +0,0 @@
-from aptbot.bot import Message, Commands, Bot
-import os
-import logging
-import ttv_api.users
-import sqlite3
-import random
-import shlex
-
-logger = logging.getLogger(__name__)
-
-PERMISSION = 10
-PREFIX = "\\"
-DESCRIPTION = r"Check who's currently in queue."
-USER_COOLDOWN = 0
-GLOBAL_COOLDOWN = 0
-
-PATH = os.path.dirname(os.path.realpath(__file__))
-PATH = os.path.join(PATH, "..")
-
-
-def new_teams(bot: Bot, message: Message, table: str):
-    conn = sqlite3.connect(os.path.join(PATH, "lol_data.db"))
-    c = conn.cursor()
-
-    c.execute(
-        f"""
-        SELECT twitch_id FROM {table} WHERE available = 1 ORDER BY position ASC;
-        """
-    )
-    fetched = c.fetchall()
-    queue: list[str] = [x[0] for x in fetched]
-    twitch = ttv_api.users.get_users(user_ids=queue)
-    if not twitch:
-        bot.send_privmsg(
-            message.channel,
-            "There was an issue fetching twitch data. Sadge",
-            reply=message.tags["id"],
-        )
-        conn.close()
-        return
-    queue_users: list[ttv_api.users.User] = []
-    for twitch_id in queue:
-        for twitch_user in twitch:
-            if int(twitch_user.user_id) == int(twitch_id):
-                queue_users.append(twitch_user)
-                break
-        else:
-            bot.send_privmsg(
-                message.channel,
-                f"There was an issue fetching data from the user with id {twitch_id}. They won't be in the list. This is a very weird problem to have occured. Sadge",
-                reply=message.tags["id"],
-            )
-    c.execute(
-        f"""
-        SELECT data FROM {table}_data WHERE name = 'queuesize';
-        """
-    )
-    fetched = c.fetchone()
-    try:
-        queue_size = fetched[0]
-    except TypeError:
-        queue_size = 10
-        bot.send_privmsg(
-            message.channel,
-            f"There was an issue fetching the queue size, default set to {queue_size}",
-            reply=message.tags["id"],
-        )
-
-    if len(queue_users) < queue_size:
-        bot.send_privmsg(
-            message.channel,
-            f"There aren't enough people in the queue. Current team size is {queue_size} while there are only {len(queue_users)} in queue.",
-            reply=message.tags["id"],
-        )
-
-    queue_users: list[ttv_api.users.User] = queue_users[:queue_size]
-    random.shuffle(queue_users)
-    blue_team: list[ttv_api.users.User] = queue_users[: queue_size // 2]
-    red_team: list[ttv_api.users.User] = queue_users[queue_size // 2 :]
-
-    c.execute(f"UPDATE {table} SET team = NULL")
-    sql = f"UPDATE {table} SET team = 0 WHERE twitch_id IN ({(', ?' * (queue_size // 2))[2:]})"
-    c.execute(sql, tuple(user.user_id for user in blue_team))
-    sql = f"UPDATE {table} SET team = 1 WHERE twitch_id IN ({(', ?' * (queue_size - queue_size // 2))[2:]})"
-    c.execute(sql, tuple(user.user_id for user in red_team))
-    conn.commit()
-
-    blue_team_users: list[str] = [user.display_name for user in blue_team]
-    red_team_users: list[str] = [user.display_name for user in red_team]
-
-    bot.send_privmsg(
-        message.channel,
-        [f"Blue team is: {blue_team_users}", f"Red team is: {red_team_users}"],
-        reply=message.tags["id"],
-    )
-
-    conn.close()
-
-
-def parse(query):
-    query = query.split()
-    try:
-        if query[1].lower() in {"ow", "overwatch", "ow2", "overwatch2"}:
-            return {"--game": "ow"}
-    except:
-        pass
-    return {"--game": "lol_queue"}
-    d = dict()
-    for i in shlex.split(query):
-        try:
-            d[i.split('=')[0]] = i.split('=')[1]
-        except:
-            pass
-    return d
-
-
-def scrub(table_name):
-    return ''.join(chr for chr in table_name if chr.isalnum() or chr == '_')
-
-
-def main(bot: Bot, message: Message):
-    args = " ".join(message.value.split(" ")[1:])
-    args = parse(args)
-    new_teams(bot, message, scrub(args.get("--game", "lol_queue")))
diff --git a/skgyorugo/commands/nothere.py b/skgyorugo/commands/nothere.py
deleted file mode 100644 (file)
index f82bb68..0000000
+++ /dev/null
@@ -1,84 +0,0 @@
-from aptbot.bot import Message, Commands, Bot
-import os
-import logging
-import ttv_api.users
-import sqlite3
-import time
-import shlex
-
-logger = logging.getLogger(__name__)
-
-PERMISSION = 99
-PREFIX = "?"
-DESCRIPTION = r"Makes yourself temporarily unavailable in the list."
-USER_COOLDOWN = 10
-GLOBAL_COOLDOWN = 0
-
-PATH = os.path.dirname(os.path.realpath(__file__))
-PATH = os.path.join(PATH, "..")
-
-
-def not_here(bot: Bot, message: Message, table: str):
-    twitch = ttv_api.users.get_users(user_logins=[message.nick])
-    if not twitch:
-        bot.send_privmsg(
-            message.channel,
-            "There was an issue fetching your twitch data. You weren't made unavailable.",
-            reply=message.tags["id"],
-        )
-        return
-    twitch_id = twitch[0].user_id
-    conn = sqlite3.connect(os.path.join(PATH, "lol_data.db"))
-    c = conn.cursor()
-
-    c.execute(
-        f"""
-        UPDATE {table} SET available = 0, priority_queue = null, last_available = ? WHERE twitch_id = ?;
-        """,
-        (
-            int(time.time()),
-            twitch_id,
-        ),
-    )
-    if not c.rowcount:
-        bot.send_privmsg(
-            message.channel,
-            "You aren't in the list or you were already unavailable.",
-            reply=message.tags["id"],
-        )
-        conn.close()
-        return
-    conn.commit()
-    bot.send_privmsg(
-        message.channel,
-        "Successfully made you unavailable",
-        reply=message.tags["id"],
-    )
-    conn.close()
-
-
-def parse(query):
-    query = query.split()
-    try:
-        if query[1].lower() in {"ow", "overwatch", "ow2", "overwatch2"}:
-            return {"--game": "ow"}
-    except:
-        pass
-    return {"--game": "lol_queue"}
-    d = dict()
-    for i in shlex.split(query):
-        try:
-            d[i.split('=')[0]] = i.split('=')[1]
-        except:
-            pass
-    return d
-
-
-def scrub(table_name):
-    return ''.join(chr for chr in table_name if chr.isalnum() or chr == '_')
-
-
-def main(bot: Bot, message: Message):
-    args = " ".join(message.value.split(" ")[1:])
-    args = parse(args)
-    not_here(bot, message, scrub(args.get("--game", "lol_queue")))
diff --git a/skgyorugo/commands/opgg.py b/skgyorugo/commands/opgg.py
deleted file mode 100644 (file)
index aabf5c2..0000000
+++ /dev/null
@@ -1,132 +0,0 @@
-from aptbot.bot import Message, Commands, Bot
-import sqlite3
-import os
-import logging
-from lol_api import spectator_v4
-from lol_api import summoner_v4
-import ttv_api.users
-from tools import smart_privmsg
-import json
-
-logger = logging.getLogger(__name__)
-
-
-PERMISSION = 99
-PREFIX = "?"
-DESCRIPTION = "Figures out which LoL Account {channel} is playing on"
-USER_COOLDOWN = 20
-GLOBAL_COOLDOWN = 15
-
-
-PATH = os.path.dirname(os.path.realpath(__file__))
-PATH = os.path.join(PATH, "..")
-
-def find_champion(champ_id: int) -> str:
-    with open(os.path.join(PATH, "data/champion.json"), "r") as f:
-        champion_data = json.load(f)
-    champ_id = str(champ_id)
-    champion_data = champion_data["data"]
-    for champion in champion_data:
-        if champion_data[champion]["key"] == champ_id:
-            return champion_data[champion]["name"]
-    return "404"
-
-def main(bot: Bot, message: Message):
-    index_skip = 0
-    if message.tags.get("reply-parent-user-id", None):
-        index_skip += 1
-    try:
-        twitch_user = message.value.split(" ")[1 + index_skip]
-    except IndexError:
-        twitch_user = message.tags.get("reply-parent-display-name", message.channel)
-        twitch_id = message.tags.get(
-                "reply-parent-user-id",
-                ttv_api.users.get_users(user_logins=[message.channel]),
-                )
-    else:
-        twitch_id = ttv_api.users.get_users(user_logins=[twitch_user])
-
-    if not twitch_id:
-        logger.warning(
-                f"There was an issue getting twitch data for user {twitch_id}; message id was: {message.tags['id']}"
-                )
-        smart_privmsg.send(
-                bot, message, "Couldn't retrieve data", reply=message.tags["id"]
-                )
-        return
-
-    if not isinstance(twitch_id, str):
-        twitch_id = int(twitch_id[0].user_id)
-    else:
-        twitch_id = int(twitch_id)
-    db_name_database = "lol_data.db"
-    conn = sqlite3.connect(os.path.join(PATH, db_name_database))
-    c = conn.cursor()
-
-    c.execute(
-            """
-        SELECT summoner_id, puuid FROM accounts WHERE twitch_id = ?;
-        """,
-        (twitch_id,),
-        )
-    fetched = c.fetchall()
-    c.execute(
-            """
-        SELECT twitch_id, summoner_id FROM accounts;
-        """,
-        )
-    fetched_all = c.fetchall()
-
-    if not fetched:
-        smart_privmsg.send(
-                bot,
-                message,
-                f"No summoners added for {twitch_user}",
-                reply=message.tags["id"],
-                )
-        conn.close()
-        return
-
-    summoner_names = []
-    for summoners in fetched:
-        info = spectator_v4.get_spectator_info_from_summoner_id(summoners[0])
-        summoner = summoner_v4.get_summoner_from_puuid(summoners[1])
-        if summoner:
-            summoner_names.append(summoner.name)
-        if info:
-            break
-    else:
-        smart_privmsg.send(
-                bot,
-                message,
-                f"{twitch_user} is currently not in game. These are all of their summoners: {summoner_names}",
-                reply=message.tags["id"],
-                )
-        conn.close()
-        return
-
-    play_with = []
-    for summoner in info.participants:
-        for f in fetched_all:
-            if summoner.summoner_id == f[1] and summoner.summoner_id != fetched[0][0]:
-                play_with.append(
-                    {
-                        "name": ttv_api.users.get_users(user_ids=[f[0]])[0].display_name,
-                        "champion": find_champion(summoner.champion_id),
-                    },
-                )
-                break
-    msg = f"{twitch_user} is currently playing a game on: {summoner_names[-1]}"
-    if play_with:
-        msg += " and is playing with"
-        for player in play_with:
-            msg += f" {player['name']} on {player['champion']} |"
-        msg = msg[:-1] + "."
-        
-    smart_privmsg.send(
-            bot,
-            message,
-            msg,
-            reply=message.tags["id"],
-            )
-    conn.close()
diff --git a/skgyorugo/commands/penta.py b/skgyorugo/commands/penta.py
deleted file mode 100644 (file)
index 01f4219..0000000
+++ /dev/null
@@ -1,112 +0,0 @@
-from aptbot.bot import Message, Commands, Bot
-import os
-import logging
-import ttv_api.users
-import sqlite3
-import tools.smart_privmsg
-import random
-import shlex
-
-logger = logging.getLogger(__name__)
-
-PERMISSION = 99
-PREFIX = "?"
-DESCRIPTION = r"Sekiro death counter"
-USER_COOLDOWN = 10
-GLOBAL_COOLDOWN = 5
-
-PATH = os.path.dirname(os.path.realpath(__file__))
-PATH = os.path.join(PATH, "..")
-
-def check_queue(bot: Bot, message: Message, table: str):
-    conn = sqlite3.connect(os.path.join(PATH, "database.db"))
-    c = conn.cursor()
-
-    c.execute(
-        f"""
-        SELECT id, val FROM varvalues WHERE id = 'penta';
-        """
-    )
-    _, val = c.fetchone()
-
-    if table == "show":
-        msg = f"Peks has gotten {val} pentas!"
-
-        tools.smart_privmsg.send(
-            bot,
-            message,
-            msg,
-            reply=message.tags["id"],
-        )
-
-        conn.close()
-        return
-    if table == "remove":
-        val = val - 1
-        c.execute(
-            f"""
-            UPDATE varvalues SET val = ? WHERE id = 'cannon';
-            """,
-            (val,)
-        )
-
-        msg = f"Peks has gotten {val} pentas!"
-
-        tools.smart_privmsg.send(
-            bot,
-            message,
-            msg,
-            reply=message.tags["id"],
-        )
-        conn.commit()
-        conn.close()
-        return
-    if table == "add":
-        val = val + 1
-        c.execute(
-            f"""
-            UPDATE varvalues SET val = ? WHERE id = 'cannon';
-            """,
-            (val,)
-        )
-
-        msg = f"Peks has gotten {val} pentas!"
-
-        tools.smart_privmsg.send(
-            bot,
-            message,
-            msg,
-            reply=message.tags["id"],
-        )
-        conn.commit()
-        conn.close()
-        return
-
-
-def parse(query):
-    query = query.split()
-    try:
-        if query[0].lower() == "add":
-            return {"--do": "add"}
-        if query[0].lower() == "remove":
-            return {"--do": "remove"}
-    except:
-        pass
-    return {"--game": "show"}
-    d = dict()
-    for i in shlex.split(query):
-        try:
-            d[i.split('=')[0]] = i.split('=')[1]
-        except:
-            pass
-    return d
-
-
-def scrub(table_name):
-    return ''.join(chr for chr in table_name if chr.isalnum() or chr == '_')
-
-
-def main(bot: Bot, message: Message):
-    args = " ".join(message.value.split(" ")[1:])
-    args = parse(args)
-    check_queue(bot, message, scrub(args.get("--do", "show")))
diff --git a/skgyorugo/commands/quadra.py b/skgyorugo/commands/quadra.py
deleted file mode 100644 (file)
index ede98b1..0000000
+++ /dev/null
@@ -1,112 +0,0 @@
-from aptbot.bot import Message, Commands, Bot
-import os
-import logging
-import ttv_api.users
-import sqlite3
-import tools.smart_privmsg
-import random
-import shlex
-
-logger = logging.getLogger(__name__)
-
-PERMISSION = 99
-PREFIX = "?"
-DESCRIPTION = r"Sekiro death counter"
-USER_COOLDOWN = 10
-GLOBAL_COOLDOWN = 5
-
-PATH = os.path.dirname(os.path.realpath(__file__))
-PATH = os.path.join(PATH, "..")
-
-def check_queue(bot: Bot, message: Message, table: str):
-    conn = sqlite3.connect(os.path.join(PATH, "database.db"))
-    c = conn.cursor()
-
-    c.execute(
-        f"""
-        SELECT id, val FROM varvalues WHERE id = 'quadra';
-        """
-    )
-    _, val = c.fetchone()
-
-    if table == "show":
-        msg = f"Peks has missed out on {val} pentas!"
-
-        tools.smart_privmsg.send(
-            bot,
-            message,
-            msg,
-            reply=message.tags["id"],
-        )
-
-        conn.close()
-        return
-    if table == "remove":
-        val = val - 1
-        c.execute(
-            f"""
-            UPDATE varvalues SET val = ? WHERE id = 'cannon';
-            """,
-            (val,)
-        )
-
-        msg = f"Peks has missed out on {val} pentas!"
-
-        tools.smart_privmsg.send(
-            bot,
-            message,
-            msg,
-            reply=message.tags["id"],
-        )
-        conn.commit()
-        conn.close()
-        return
-    if table == "add":
-        val = val + 1
-        c.execute(
-            f"""
-            UPDATE varvalues SET val = ? WHERE id = 'cannon';
-            """,
-            (val,)
-        )
-
-        msg = f"Peks has missed out on {val} pentas!"
-
-        tools.smart_privmsg.send(
-            bot,
-            message,
-            msg,
-            reply=message.tags["id"],
-        )
-        conn.commit()
-        conn.close()
-        return
-
-
-def parse(query):
-    query = query.split()
-    try:
-        if query[0].lower() == "add":
-            return {"--do": "add"}
-        if query[0].lower() == "remove":
-            return {"--do": "remove"}
-    except:
-        pass
-    return {"--game": "show"}
-    d = dict()
-    for i in shlex.split(query):
-        try:
-            d[i.split('=')[0]] = i.split('=')[1]
-        except:
-            pass
-    return d
-
-
-def scrub(table_name):
-    return ''.join(chr for chr in table_name if chr.isalnum() or chr == '_')
-
-
-def main(bot: Bot, message: Message):
-    args = " ".join(message.value.split(" ")[1:])
-    args = parse(args)
-    check_queue(bot, message, scrub(args.get("--do", "show")))
diff --git a/skgyorugo/commands/removecommand.py b/skgyorugo/commands/removecommand.py
deleted file mode 100644 (file)
index 671e49a..0000000
+++ /dev/null
@@ -1,48 +0,0 @@
-from aptbot.bot import Message, Commands, Bot
-import sqlite3
-import os
-
-PERMISSION = 10
-PREFIX = "\\"
-DESCRIPTION = ""
-USER_COOLDOWN = 0
-GLOBAL_COOLDOWN = 0
-
-COMMANDS_PATH = os.path.dirname(os.path.realpath(__file__))
-PATH = os.path.join(COMMANDS_PATH, "..")
-
-
-def main(bot: Bot, message: Message):
-    msg = " ".join(message.value.split(" ")[1:])
-    command = msg.split(" ")[0]
-    command_prefix = command[0]
-    command_name = command[1:]
-
-    conn = sqlite3.connect(os.path.join(PATH, "database.db"))
-    c = conn.cursor()
-    c.execute("SELECT value FROM command_values WHERE command = ?", (command_name,))
-    command_path = os.path.join(COMMANDS_PATH, f"{command_name}.py")
-    hidden_command_path = os.path.join(COMMANDS_PATH, f".{command_name}.py")
-    try:
-        if not c.fetchone()[0]:
-            try:
-                os.rename(command_path, hidden_command_path)
-            except FileNotFoundError:
-                pass
-    except TypeError:
-        pass
-
-    try:
-        c.execute(
-            "DELETE FROM commands WHERE command = ? AND prefix = ?",
-            (
-                command_name,
-                command_prefix,
-            ),
-        )
-    except sqlite3.IntegrityError:
-        bot.send_privmsg(message.channel, f"The command {command_name} doesn't exist.")
-    else:
-        bot.send_privmsg(message.channel, f"Successfully removed {command_name}.")
-    conn.commit()
-    conn.close()
diff --git a/skgyorugo/commands/scam.py b/skgyorugo/commands/scam.py
deleted file mode 100644 (file)
index 3b3a0f0..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-from aptbot.bot import Message, Commands, Bot
-
-PERMISSION = 99
-PREFIX = "?"
-DESCRIPTION = ""
-USER_COOLDOWN = 10
-GLOBAL_COOLDOWN = 10
-
-
-def main(bot: Bot, message: Message):
-    msg = message.nick + " you have been scammed KEKW"
-    bot.send_privmsg(message.channel, msg)
diff --git a/skgyorugo/commands/spam.py b/skgyorugo/commands/spam.py
deleted file mode 100644 (file)
index 5db59e0..0000000
+++ /dev/null
@@ -1,25 +0,0 @@
-from aptbot.bot import Message, Commands, Bot
-import tools.smart_privmsg
-
-PERMISSION = 99
-PREFIX = "?"
-DESCRIPTION = ""
-USER_COOLDOWN = 30
-GLOBAL_COOLDOWN = 15
-
-MAX_LENGTH = 450
-
-
-def main(bot: Bot, message: Message):
-    try:
-        replied_message = message.tags["reply-parent-msg-body"]
-    except KeyError:
-        replied_message = None
-    if replied_message:
-        msg = replied_message
-    else:
-        msg = " ".join(message.value.split(" ")[1:])
-    new_msg = ""
-    while len(new_msg) + len(msg) < MAX_LENGTH:
-        new_msg += msg + " "
-    tools.smart_privmsg.send_safe(bot, message.channel, new_msg)
diff --git a/skgyorugo/commands/t.py b/skgyorugo/commands/t.py
deleted file mode 100644 (file)
index 9c84b7a..0000000
+++ /dev/null
@@ -1,22 +0,0 @@
-from aptbot.bot import Message, Commands, Bot
-import tools.smart_privmsg
-import scripts.translator
-
-PERMISSION = 99
-PREFIX = "?"
-DESCRIPTION = "Translates a message from any language (supported by google translate) into English. How to use: ?t <insert text to translate>"
-USER_COOLDOWN = 15
-GLOBAL_COOLDOWN = 5
-
-
-def main(bot: Bot, message: Message):
-    replied_message = message.tags.get("reply-parent-msg-body", None)
-    if replied_message:
-        msg = replied_message
-        replied_msg_id = message.tags["reply-parent-msg-id"]
-    else:
-        msg = " ".join(message.value.split(" ")[1:])
-        replied_msg_id = None
-    trans = scripts.translator.translate(msg)
-    print(trans)
-    tools.smart_privmsg.send(bot, message, trans, reply=replied_msg_id)
diff --git a/skgyorugo/commands/teams.py b/skgyorugo/commands/teams.py
deleted file mode 100644 (file)
index c35e65b..0000000
+++ /dev/null
@@ -1,111 +0,0 @@
-from aptbot.bot import Message, Commands, Bot
-import os
-import logging
-import ttv_api.users
-import sqlite3
-import tools.smart_privmsg
-import shlex
-
-logger = logging.getLogger(__name__)
-
-PERMISSION = 99
-PREFIX = "?"
-DESCRIPTION = r"Check current teams"
-USER_COOLDOWN = 30
-GLOBAL_COOLDOWN = 15
-
-PATH = os.path.dirname(os.path.realpath(__file__))
-PATH = os.path.join(PATH, "..")
-
-
-def teams(bot: Bot, message: Message, table: str):
-    conn = sqlite3.connect(os.path.join(PATH, "lol_data.db"))
-    c = conn.cursor()
-
-    c.execute(
-        f"""
-        SELECT twitch_id, team FROM {table} WHERE team in (0, 1);
-        """
-    )
-    fetched = c.fetchall()
-    blue_team = []
-    red_team = []
-    for user in fetched:
-        if user[1] == 0:
-            blue_team.append(user[0])
-        elif user[1] == 1:
-            red_team.append(user[0])
-        else:
-            bot.send_privmsg(
-                message.channel,
-                f"Something VERY WEIRD occured. The user with id: {user[0]} is on team {user[1]}, which is neither blue = 0 or red = 1.",
-                reply=message.tags["id"],
-            )
-
-    users = [x[0] for x in fetched]
-    if not users:
-        bot.send_privmsg(
-            message.channel,
-            "No teams have been set yet.",
-            reply=message.tags["id"],
-        )
-        conn.close()
-        return
-
-    twitch = ttv_api.users.get_users(user_ids=users)
-    if not twitch:
-        bot.send_privmsg(
-            message.channel,
-            "There was an issue fetching twitch data. Sadge",
-            reply=message.tags["id"],
-        )
-        conn.close()
-        return
-    blue_team_users = []
-    red_team_users = []
-    for twitch_user in twitch:
-        if int(twitch_user.user_id) in blue_team:
-            blue_team_users.append(twitch_user.display_name)
-        elif int(twitch_user.user_id) in red_team:
-            red_team_users.append(twitch_user.display_name)
-        else:
-            bot.send_privmsg(
-                message.channel,
-                f"Something VERY WEIRD occured. The user with id: {twitch_user.user_id} who has the name {twitch_user.display_name} is not on a team.",
-                reply=message.tags["id"],
-            )
-
-    bot.send_privmsg(
-        message.channel,
-        [f"Blue team is: {blue_team_users}", f"Red team is: {red_team_users}"],
-        reply=message.tags["id"],
-    )
-
-    conn.close()
-
-
-def parse(query):
-    query = query.split()
-    try:
-        if query[1].lower() in {"ow", "overwatch", "ow2", "overwatch2"}:
-            return {"--game": "ow"}
-    except:
-        pass
-    return {"--game": "lol_queue"}
-    d = dict()
-    for i in shlex.split(query):
-        try:
-            d[i.split('=')[0]] = i.split('=')[1]
-        except:
-            pass
-    return d
-
-
-def scrub(table_name):
-    return ''.join(chr for chr in table_name if chr.isalnum() or chr == '_')
-
-
-def main(bot: Bot, message: Message):
-    args = " ".join(message.value.split(" ")[1:])
-    args = parse(args)
-    teams(bot, message, scrub(args.get("--game", "lol_queue")))
diff --git a/skgyorugo/commands/teamsize.py b/skgyorugo/commands/teamsize.py
deleted file mode 100644 (file)
index ce910c5..0000000
+++ /dev/null
@@ -1,79 +0,0 @@
-from aptbot.bot import Message, Commands, Bot
-import os
-import logging
-import sqlite3
-import shlex
-
-logger = logging.getLogger(__name__)
-
-PERMISSION = 10
-PREFIX = "\\"
-DESCRIPTION = r"Change the team size"
-USER_COOLDOWN = 0
-GLOBAL_COOLDOWN = 0
-
-PATH = os.path.dirname(os.path.realpath(__file__))
-PATH = os.path.join(PATH, "..")
-
-
-def team_size(bot: Bot, message: Message, table: str):
-    replied_message = message.tags.get("reply-parent-msg-body", None)
-    if replied_message:
-        queue_size = message.value.split(" ")[2]
-    else:
-        queue_size = message.value.split(" ")[1]
-    try:
-        queue_size = int(queue_size)
-    except ValueError:
-        bot.send_privmsg(
-            message.channel,
-            f"Please choose a number. {queue_size} is not a valid number.",
-            reply=message.tags["id"],
-        )
-        return
-
-    conn = sqlite3.connect(os.path.join(PATH, "lol_data.db"))
-    c = conn.cursor()
-
-    c.execute(
-        f"""
-        REPLACE INTO {table}_data (name, data) VALUES ('queuesize', ?)
-        """,
-        (queue_size,),
-    )
-    conn.commit()
-
-    bot.send_privmsg(
-        message.channel,
-        f"Successfully changed team size to {queue_size}.",
-        reply=message.tags["id"],
-    )
-
-    conn.close()
-
-
-def parse(query):
-    query = query.split()
-    try:
-        if query[0].lower() in {"ow", "overwatch", "ow2", "overwatch2"}:
-            return {"--game": "ow"}
-    except:
-        pass
-    return {"--game": "lol_queue"}
-    d = dict()
-    for i in shlex.split(query):
-        try:
-            d[i.split('=')[0]] = i.split('=')[1]
-        except:
-            pass
-    return d
-
-
-def scrub(table_name):
-    return ''.join(chr for chr in table_name if chr.isalnum() or chr == '_')
-
-
-def main(bot: Bot, message: Message):
-    args = " ".join(message.value.split(" ")[1:])
-    args = parse(args)
-    team_size(bot, message, scrub(args.get("--game", "lol_queue")))
diff --git a/skgyorugo/commands/truth.py b/skgyorugo/commands/truth.py
deleted file mode 100644 (file)
index ad38954..0000000
+++ /dev/null
@@ -1,24 +0,0 @@
-from aptbot.bot import Message, Commands, Bot
-import tools.smart_privmsg
-import os
-import random
-
-PERMISSION = 99
-PREFIX = "?"
-DESCRIPTION = ""
-USER_COOLDOWN = 30
-GLOBAL_COOLDOWN = 15
-
-
-COMMANDS_PATH = os.path.dirname(os.path.realpath(__file__))
-PATH = os.path.join(COMMANDS_PATH, "..")
-DATA_PATH = os.path.join(PATH, "data")
-
-
-def main(bot: Bot, message: Message):
-    accepted_path = os.path.join(DATA_PATH, "jokes")
-    with open(accepted_path, "r") as f:
-        jokes = [user_id.rstrip() for user_id in f]
-    joke = random.choice(jokes)
-
-    tools.smart_privmsg.send(bot, message, f"{joke}", reply=message.tags["id"])
diff --git a/skgyorugo/commands/uwu.py b/skgyorugo/commands/uwu.py
deleted file mode 100644 (file)
index bf1fdb6..0000000
+++ /dev/null
@@ -1,41 +0,0 @@
-from aptbot.bot import Message, Commands, Bot
-import os
-import logging
-from tools import smart_privmsg
-
-logger = logging.getLogger(__name__)
-
-
-PERMISSION = 99
-PREFIX = "?"
-DESCRIPTION = ""
-USER_COOLDOWN = 0
-GLOBAL_COOLDOWN = 0
-
-PATH = os.path.dirname(os.path.realpath(__file__))
-PATH = os.path.join(PATH, "..")
-
-
-def main(bot: Bot, message: Message):
-    if message.tags.get("reply-parent-display-name", None):
-        smart_privmsg.send(
-            bot,
-            message,
-            f"{message.tags['reply-parent-display-name']}, {message.nick} is UwUing you. Will you UwU back? PauseChamp",
-            reply=message.tags["reply-parent-msg-id"],
-        )
-        return
-    try:
-        user = message.value.split(" ")[1]
-    except IndexError:
-        smart_privmsg.send(
-            bot, message, f"UwU to you too {message.nick}!", reply=message.tags["id"]
-        )
-        return
-    else:
-        smart_privmsg.send(
-            bot,
-            message,
-            f"{user}, {message.nick} is UwUing you. Will you UwU back? PauseChamp",
-        )
-        return
diff --git a/skgyorugo/commands/youtube.py b/skgyorugo/commands/youtube.py
deleted file mode 100644 (file)
index b3965d2..0000000
+++ /dev/null
@@ -1,20 +0,0 @@
-from aptbot.bot import Message, Commands, Bot
-import yt_api.videos
-
-PERMISSION = 99
-PREFIX = "?"
-DESCRIPTION = "Get my newest video! Just type ?video"
-USER_COOLDOWN = 15
-GLOBAL_COOLDOWN = 15
-
-CHANNEL_ID = "UCQ7C3NUKY6TSkURdUdVoYFw"
-
-
-def main(bot: Bot, message: Message):
-    video = yt_api.videos.get_newest_video(CHANNEL_ID)
-    if video:
-        video_link = f"https://www.youtube.com/watch?v={video.video_id}"
-        msg = f'Watch Peks\' latest video "{video.video_name}" here: {video_link}'
-    else:
-        msg = f"Check out my youtube channel here -> https://www.youtube.com/channel/{CHANNEL_ID}"
-    bot.send_privmsg(message.channel, msg)
diff --git a/skgyorugo/database_manager.py b/skgyorugo/database_manager.py
deleted file mode 100644 (file)
index ee653c3..0000000
+++ /dev/null
@@ -1,464 +0,0 @@
-from aptbot.bot import Message, Commands
-import sqlite3
-import os
-import ttv_api.users
-import logging
-
-logger = logging.getLogger(__name__)
-
-PATH = os.path.dirname(os.path.realpath(__file__))
-logger.debug(f"PATH set to: {PATH}")
-
-STREAMER_PATH = os.path.abspath(os.path.join(__file__, ".."))
-logger.debug(f"STREAMER_PATH set to: {STREAMER_PATH}")
-streamer_login = os.path.split(STREAMER_PATH)[1]
-logger.debug(f"streamer_login set to: {streamer_login}")
-
-
-def create_variables_db():
-    db_name_var = "variables.db"
-    conn = sqlite3.connect(os.path.join(PATH, db_name_var))
-    c = conn.cursor()
-    logger.info(f"connected to database {db_name_var}")
-
-    c.execute(
-        """
-        CREATE TABLE IF NOT EXISTS variables (
-            name TEXT NOT NULL,
-            type TEXT NOT NULL,
-            value TEXT NOT NULL,
-            PRIMARY KEY (name)
-        )
-        """
-    )
-    logger.info(f"created table variables")
-
-    c.execute(
-        """
-        CREATE TABLE IF NOT EXISTS methods (
-            name TEXT NOT NULL,
-            type TEXT NOT NULL,
-            input TEXT,
-            PRIMARY KEY (name, type)
-        )
-        """
-    )
-    logger.info(f"created table methods")
-
-    c.execute(
-        """
-        CREATE TABLE IF NOT EXISTS list_values (
-            id INTEGER NOT NULL,
-            name TEXT NOT NULL,
-            type TEXT NOT NULL,
-            value TEXT NOT NULL,
-            FOREIGN KEY(name) REFERENCES variables(name)
-            PRIMARY KEY (id, name)
-        )
-        """
-    )
-    logger.info(f"created table list_values")
-
-    conn.commit()
-    conn.close()
-
-
-def create_lol_database():
-    db_name_database = "lol_data.db"
-    conn = sqlite3.connect(os.path.join(PATH, db_name_database))
-    c = conn.cursor()
-    logger.info(f"connected to database {db_name_database}")
-
-    c.execute(
-        """
-        CREATE TABLE IF NOT EXISTS accounts (
-            puuid TEXT NOT NULL,
-            summoner_id TEXT NOT NULL,
-            account_id TEXT NOT NULL,
-            twitch_id INTEGER,
-            PRIMARY KEY (puuid)
-        )
-        """
-    )
-    logger.info(f"created table accounts")
-
-    c.execute(
-        """
-        CREATE TABLE IF NOT EXISTS lol_queue (
-            twitch_id INTEGER NOT NULL,
-            position INTEGER NOT NULL,
-            available INTEGER NOT NULL,
-            last_available INTEGER,
-            time_remaining INTEGER NOT NULL,
-            team INTEGER,
-            priority_queue INTEGER,
-            PRIMARY KEY (twitch_id)
-        );
-        """
-    )
-    logger.info(f"created table lol_queue")
-
-    c.execute(
-        """
-        CREATE TABLE IF NOT EXISTS lol_queue_data (
-            name TEXT NOT NULL,
-            data INTEGER NOT NULL,
-            PRIMARY KEY (name)
-        );
-        """
-    )
-    logger.info(f"created table lol_queue_data")
-
-    c.execute(
-        """
-        CREATE TABLE IF NOT EXISTS ow (
-            twitch_id INTEGER NOT NULL,
-            position INTEGER NOT NULL,
-            available INTEGER NOT NULL,
-            last_available INTEGER,
-            time_remaining INTEGER NOT NULL,
-            team INTEGER,
-            priority_queue INTEGER,
-            PRIMARY KEY (twitch_id)
-        );
-        """
-    )
-    logger.info(f"created table ow")
-
-    c.execute(
-        """
-        CREATE TABLE IF NOT EXISTS ow_data (
-            name TEXT NOT NULL,
-            data INTEGER NOT NULL,
-            PRIMARY KEY (name)
-        );
-        """
-    )
-    logger.info(f"created table ow_data")
-
-    conn.commit()
-    conn.close()
-
-
-def create_database():
-    db_name_database = "database.db"
-    conn = sqlite3.connect(os.path.join(PATH, db_name_database))
-    c = conn.cursor()
-    logger.info(f"connected to database {db_name_database}")
-
-    c.execute(
-        """
-        CREATE TABLE IF NOT EXISTS commands (
-            command TEXT NOT NULL,
-            prefix TEXT NOT NULL,
-            permission INTEGER NOT NULL,
-            description TEXT,
-            user_cooldown INTEGER NOT NULL,
-            global_cooldown INTEGER NOT NULL,
-            last_used INTEGER NOT NULL,
-            PRIMARY KEY (command)
-        )
-        """
-    )
-    logger.info(f"created table commands")
-
-    c.execute(
-        """
-        CREATE TABLE IF NOT EXISTS varvalues (
-            id TEXT NOT NULL,
-            val INTEGER NOT NULL,
-            PRIMARY KEY (id)
-        )
-        """
-    )
-    logger.info(f"created table varvalues")
-
-
-    c.execute(
-        """
-        CREATE TABLE IF NOT EXISTS clips (
-            url TEXT NOT NULL,
-            from_user INTEGER NOT NULL,
-            PRIMARY KEY (url)
-        )
-        """
-    )
-    logger.info(f"created table clips")
-
-    c.execute(
-        """
-        CREATE TABLE IF NOT EXISTS users (
-            user_id text NOT NULL,
-            permission INTEGER NOT NULL,
-            PRIMARY KEY (user_id)
-        )
-        """
-    )
-    logger.info(f"created table users")
-
-    admin_id = ttv_api.users.get_users(user_logins=["skgyorugo"])
-    aptbot_id = ttv_api.users.get_users(user_logins=["murphyai"])
-    broadcaster_id = ttv_api.users.get_users(user_logins=[streamer_login])
-    if admin_id:
-        c.execute("INSERT OR IGNORE INTO users VALUES (?, ?)", (admin_id[0].user_id, 0))
-        logger.info(f"inserted user {admin_id[0].user_id} with permission {0}")
-    if aptbot_id:
-        c.execute(
-            "INSERT OR IGNORE INTO users VALUES (?, ?)", (aptbot_id[0].user_id, 0)
-        )
-        logger.info(f"inserted user {aptbot_id[0].user_id} with permission {0}")
-    if broadcaster_id:
-        c.execute(
-            "INSERT OR IGNORE INTO users VALUES (?, ?)", (broadcaster_id[0].user_id, 1)
-        )
-        logger.info(f"inserted user {broadcaster_id[0].user_id} with permission {1}")
-
-    c.execute(
-        """
-        CREATE TABLE IF NOT EXISTS cooldowns (
-            user_id TEXT NOT NULL,
-            command TEXT NOT NULL,
-            user_cooldown INTEGER NOT NULL,
-            FOREIGN KEY(user_id) REFERENCES users(user_id)
-            FOREIGN KEY(command) REFERENCES commands(command)
-            PRIMARY KEY (user_id, command)
-        )
-        """
-    )
-    logger.info(f"created table cooldowns")
-
-    c.execute(
-        """
-        CREATE TABLE IF NOT EXISTS command_values (
-            command TEXT NOT NULL,
-            value TEXT NOT NULL,
-            FOREIGN KEY(command) REFERENCES commands(command)
-        )
-        """
-    )
-    logger.info(f"created table command_values")
-
-    c.execute(
-        """
-        CREATE TABLE IF NOT EXISTS auto_messages (
-            name TEXT NOT NULL,
-            cooldown INTEGER NOT NULL,
-            end_time INTEGER NOT NULL,
-            last_used INTEGER NOT NULL,
-            PRIMARY KEY (name)
-        )
-        """
-    )
-    logger.info(f"created table auto_messages")
-
-    c.execute(
-        """
-        CREATE TABLE IF NOT EXISTS auto_message_values (
-            name TEXT NOT NULL,
-            value TEXT NOT NULL,
-            FOREIGN KEY(name) REFERENCES auto_messages(name)
-        )
-        """
-    )
-    logger.info(f"created table auto_message_values")
-
-    c.execute(
-        """
-        CREATE TABLE IF NOT EXISTS stream_info (
-            start_stream_ts INTEGER NOT NULL,
-            last_checked INTEGER NOT NULL,
-            ended INTEGER NOT NULL,
-            PRIMARY KEY (start_stream_ts)
-        )
-        """
-    )
-    logger.info(f"created table stream_info")
-
-    conn.commit()
-    conn.close()
-
-
-def update_commands_in_database(modules, commands):
-    db_name_database = "database.db"
-    conn = sqlite3.connect(os.path.join(PATH, db_name_database))
-    c = conn.cursor()
-    logger.info(f"connected to database {db_name_database}")
-
-    for command in commands:
-        command_name = command.split(".")[0]
-        command_permission = modules[command_name].PERMISSION
-        command_prefix = modules[command_name].PREFIX
-        command_description = modules[command_name].DESCRIPTION
-        command_user_cooldown = modules[command_name].USER_COOLDOWN
-        command_global_cooldown = modules[command_name].GLOBAL_COOLDOWN
-        command_last_used = 0
-        c.execute(
-            "REPLACE INTO commands VALUES (?, ?, ?, ?, ?, ?, ?)",
-            (
-                command_name,
-                command_prefix,
-                command_permission,
-                command_description,
-                command_user_cooldown,
-                command_global_cooldown,
-                command_last_used,
-            ),
-        )
-        logger.info(f"updating commands command_name: {command_prefix}{command_name}")
-    conn.commit()
-    conn.close()
-
-
-def add_message_to_chat_history(message: Message):
-    if message.command != Commands.PRIVMSG:
-        return
-    conn = sqlite3.connect(os.path.join(PATH, "chat_history.db"))
-    c = conn.cursor()
-
-    try:
-        bits = message.tags["bits"]
-    except KeyError:
-        bits = None
-    try:
-        rp_display_name = message.tags["reply-parent-display-name"]
-        rp_msg_body = message.tags["reply-parent-msg-body"]
-        rp_msg_id = message.tags["reply-parent-msg-id"]
-        rp_user_id = int(message.tags["reply-parent-user-id"])
-        rp_user_login = message.tags["reply-parent-user-login"]
-    except KeyError:
-        rp_display_name = None
-        rp_msg_body = None
-        rp_msg_id = None
-        rp_user_id = None
-        rp_user_login = None
-
-    c.execute(
-        """
-        INSERT INTO chat (
-            "id",
-            "nick",
-            "channel",
-            "message",
-            "tmi-sent-ts",
-            "badge-info",
-            "badges",
-            "bits",
-            "color",
-            "display-name",
-            "first-msg",
-            "mod",
-            "room-id",
-            "user-id",
-            "user-type",
-            "turbo",
-            "subscriber",
-            "reply-parent-display-name",
-            "reply-parent-msg-body",
-            "reply-parent-msg-id",
-            "reply-parent-user-id",
-            "reply-parent-user-login"
-        ) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?);
-        """,
-        (
-            message.tags["id"],
-            message.nick,
-            message.channel,
-            message.value,
-            int(message.tags["tmi-sent-ts"]),
-            message.tags["badge-info"],
-            message.tags["badges"],
-            bits,
-            message.tags["color"],
-            message.tags["display-name"],
-            int(message.tags["first-msg"]),
-            int(message.tags["mod"]),
-            int(message.tags["room-id"]),
-            int(message.tags["user-id"]),
-            message.tags["user-type"],
-            int(message.tags["turbo"]),
-            int(message.tags["subscriber"]),
-            rp_display_name,
-            rp_msg_body,
-            rp_msg_id,
-            rp_user_id,
-            rp_user_login,
-        ),
-    )
-    conn.commit()
-    conn.close()
-
-
-def create_chat_history_database():
-    conn = sqlite3.connect(os.path.join(PATH, "chat_history.db"))
-    c = conn.cursor()
-
-    c.execute(
-        """
-        CREATE TABLE IF NOT EXISTS "chat" (
-            "id"       TEXT NOT NULL,
-            "nick"     TEXT NOT NULL,
-            "channel"  TEXT NOT NULL,
-            "message"  TEXT NOT NULL,
-            "tmi-sent-ts"      INTEGER NOT NULL,
-            "badge-info"       TEXT NOT NULL,
-            "badges"   TEXT NOT NULL,
-            "bits"     TEXT,
-            "color"    TEXT NOT NULL,
-            "display-name"     TEXT NOT NULL,
-            "first-msg"        INTEGER NOT NULL,
-            "mod"      INTEGER NOT NULL,
-            "room-id"  INTEGER NOT NULL,
-            "user-id"  INTEGER NOT NULL,
-            "user-type"        TEXT NOT NULL,
-            "turbo"    INTEGER NOT NULL,
-            "subscriber"       INTEGER NOT NULL,
-            "reply-parent-display-name"        TEXT,
-            "reply-parent-msg-body"    TEXT,
-            "reply-parent-msg-id"      TEXT,
-            "reply-parent-user-id"     INTEGER,
-            "reply-parent-user-login"  TEXT,
-            PRIMARY KEY("id")
-        );
-        """
-    )
-    conn.commit()
-    conn.close()
-
-
-def update_auto_messages_in_database(modules, auto_messages):
-    conn = sqlite3.connect(os.path.join(PATH, "database.db"))
-    c = conn.cursor()
-
-    for auto_message in auto_messages:
-        auto_message_name = auto_message.split(".")[0]
-        auto_message_cooldown = modules[auto_message_name].COOLDOWN
-        auto_message_end_time = modules[auto_message_name].END_TIME
-        auto_message_last_used = 0
-        try:
-            c.execute(
-                "INSERT INTO auto_messages (name, cooldown, end_time, last_used) VALUES (?, ?, ?, ?)",
-                (
-                    auto_message_name,
-                    auto_message_cooldown,
-                    auto_message_end_time,
-                    auto_message_last_used,
-                ),
-            )
-        except Exception as e:
-            c.execute(
-                """
-                UPDATE auto_messages
-                SET
-                    cooldown = ?,
-                    end_time = ?
-                WHERE
-                    name = ?
-                """,
-                (
-                    auto_message_cooldown,
-                    auto_message_end_time,
-                    auto_message_name,
-                ),
-            )
-    conn.commit()
-    conn.close()
diff --git a/skgyorugo/lol_api/__init__.py b/skgyorugo/lol_api/__init__.py
deleted file mode 100644 (file)
index 0bf6605..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-import urllib3
-from dataclasses import dataclass
-import os
-import json
-import logging
-from typing import Optional
-
-BASE_URL = "https://euw1.api.riotgames.com"
-
-KEY = os.getenv("LOL_STREAM_HELPER")
-
-HEADER = {"X-Riot-Token": KEY}
diff --git a/skgyorugo/lol_api/match_v5.py b/skgyorugo/lol_api/match_v5.py
deleted file mode 100644 (file)
index 197bf0b..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-from lol_api import *
-
-logger = logging.getLogger(__name__)
diff --git a/skgyorugo/lol_api/spectator_v4.py b/skgyorugo/lol_api/spectator_v4.py
deleted file mode 100644 (file)
index c678236..0000000
+++ /dev/null
@@ -1,113 +0,0 @@
-from lol_api import *
-from typing import Optional
-
-logger = logging.getLogger(__name__)
-
-
-@dataclass
-class BannedChampion:
-    pick_turn: int
-    champion_id: int
-    team_id: int
-
-
-@dataclass
-class Perks:
-    perk_ids: list[int]
-    perk_style: int
-    perk_sub_style: int
-
-
-@dataclass
-class CurrentGameParticipant:
-    champion_id: int
-    perks: Perks
-    profile_icon_id: int
-    bot: bool
-    team_id: int
-    summoner_name: str
-    summoner_id: str
-    spell1_id: int
-    spell2_id: int
-
-
-@dataclass
-class GameInfo:
-    game_id: int
-    game_type: str
-    game_start_time: int
-    map_id: int
-    game_length: int
-    platform_id: str
-    game_mode: str
-    banned_champions: list[BannedChampion]
-    game_queue_config_id: Optional[int]
-    observers: str
-    participants: list[CurrentGameParticipant]
-
-
-def get_spectator_info_from_summoner_id(summoner_id: str) -> Optional[GameInfo]:
-    endpoint = f"/lol/spectator/v4/active-games/by-summoner/{summoner_id}"
-    url = BASE_URL + endpoint
-    http = urllib3.PoolManager()
-    r = http.request(
-        "GET",
-        url,
-        headers=HEADER,
-    )
-    if r.status == 404:
-        logger.info(
-            f"Summoner with summoner id: {summoner_id} wasn't found in game. Status code {r.status}"
-        )
-        return None
-    if r.status != 200:
-        logger.warning(
-            f"Couldn't retrieve summoner with summoner id: {summoner_id}. Status code {r.status}"
-        )
-        return None
-    data = json.loads(r.data.decode("utf-8"))
-
-    banned_champions: list[BannedChampion] = []
-    for banned in data["bannedChampions"]:
-        banned_champions.append(
-            BannedChampion(
-                banned["pickTurn"],
-                banned["championId"],
-                banned["teamId"],
-            )
-        )
-
-    participants: list[CurrentGameParticipant] = []
-    for participant in data["participants"]:
-        perks = Perks(
-            [perk_id for perk_id in participant["perks"]["perkIds"]],
-            participant["perks"]["perkStyle"],
-            participant["perks"]["perkSubStyle"],
-        )
-        participants.append(
-            CurrentGameParticipant(
-                participant["championId"],
-                perks,
-                participant["profileIconId"],
-                participant["bot"],
-                participant["teamId"],
-                participant["summonerName"],
-                participant["summonerId"],
-                participant["spell1Id"],
-                participant["spell2Id"],
-            )
-        )
-
-    return GameInfo(
-        data["gameId"],
-        data["gameType"],
-        data["gameStartTime"],
-        data["mapId"],
-        data["gameLength"],
-        data["platformId"],
-        data["gameMode"],
-        banned_champions,
-        data.get("gameQueueConfigId", None),
-        data["observers"]["encryptionKey"],
-        participants,
-    )
diff --git a/skgyorugo/lol_api/summoner_v4.py b/skgyorugo/lol_api/summoner_v4.py
deleted file mode 100644 (file)
index c234b9e..0000000
+++ /dev/null
@@ -1,66 +0,0 @@
-from lol_api import *
-
-logger = logging.getLogger(__name__)
-
-
-@dataclass
-class Summoner:
-    summoner_id: str
-    account_id: str
-    puuid: str
-    name: str
-    profile_icon_id: int
-    revision_date: int
-    summoner_level: int
-
-
-def get_summoner_from_puuid(puuid: str) -> Optional[Summoner]:
-    endpoint = f"/lol/summoner/v4/summoners/by-puuid/{puuid}"
-    url = BASE_URL + endpoint
-    logger.debug(f"url is: {url}")
-    http = urllib3.PoolManager()
-    r = http.request(
-        "GET",
-        url,
-        headers=HEADER,
-    )
-    if r.status != 200:
-        logger.warning(
-            f"Couldn't retrieve summoner with puuid: {puuid}. Status code {r.status}"
-        )
-        return None
-    data = json.loads(r.data.decode("utf-8"))
-    return Summoner(
-        data["id"],
-        data["accountId"],
-        data["puuid"],
-        data["name"],
-        data["profileIconId"],
-        data["revisionDate"],
-        data["summonerLevel"],
-    )
-
-
-def get_summoner_from_name(name: str) -> Optional[Summoner]:
-    endpoint = f"/lol/summoner/v4/summoners/by-name/{name}"
-    url = BASE_URL + endpoint
-    logger.debug(f"url is: {url}")
-    http = urllib3.PoolManager()
-    r = http.request(
-        "GET",
-        url,
-        headers=HEADER,
-    )
-    if r.status != 200:
-        logger.warning(f"Couldn't retrieve summoner: {name}. Status code {r.status}")
-        return None
-    data = json.loads(r.data.decode("utf-8"))
-    return Summoner(
-        data["id"],
-        data["accountId"],
-        data["puuid"],
-        data["name"],
-        data["profileIconId"],
-        data["revisionDate"],
-        data["summonerLevel"],
-    )
diff --git a/skgyorugo/main.py b/skgyorugo/main.py
deleted file mode 100644 (file)
index f4116e1..0000000
+++ /dev/null
@@ -1,149 +0,0 @@
-from aptbot import Bot, Message, Commands
-import os
-import importlib
-import importlib.util
-import traceback
-import tools.raid
-import tools.smart_privmsg
-import tools.permissions
-import tools.smart_start_stream_time
-import analyze_command
-import scripts.unit_converter
-import scripts.alwase
-import scripts.chatting
-import scripts.chat
-import scripts.crylaugh
-import database_manager
-import analyze_auto_message
-import time
-import logging
-from threading import Event
-from importlib import reload
-
-reload(tools.raid)
-reload(tools.smart_privmsg)
-reload(tools.permissions)
-reload(tools.smart_start_stream_time)
-reload(analyze_command)
-reload(scripts.unit_converter)
-reload(scripts.alwase)
-reload(scripts.chatting)
-reload(scripts.chat)
-reload(scripts.crylaugh)
-reload(database_manager)
-reload(analyze_auto_message)
-
-logger = logging.getLogger(__name__)
-
-PATH = os.path.dirname(os.path.realpath(__file__))
-logger.info(f"PATH set to: {PATH}")
-COMMANDS_PATH = os.path.join(PATH, "commands")
-logger.info(f"COMMANDS_PATH set to: {COMMANDS_PATH}")
-AUTO_MESSAGES_PATH = os.path.join(PATH, "auto_messages")
-logger.info(f"AUTO_MESSAGES_PATH set to: {AUTO_MESSAGES_PATH}")
-
-commands_specs = {}
-commands_modules = {}
-
-auto_message_specs = {}
-auto_message_modules = {}
-
-commands = [
-    c
-    for c in os.listdir(COMMANDS_PATH)
-    if os.path.isfile(os.path.join(COMMANDS_PATH, c))
-]
-commands = filter(lambda x: not x.startswith("."), commands)
-commands = filter(lambda x: os.path.splitext(x)[1] == ".py", commands)
-commands = list(commands)
-for command in commands:
-    commands_specs[command.split(".")[0]] = importlib.util.spec_from_file_location(
-        f"{command.split('.')[0]}", os.path.join(COMMANDS_PATH, command)
-    )
-logger.info(f"List of commands: {commands}")
-
-auto_messages = [
-    c
-    for c in os.listdir(AUTO_MESSAGES_PATH)
-    if os.path.isfile(os.path.join(AUTO_MESSAGES_PATH, c))
-]
-auto_messages = filter(lambda x: not x.startswith("."), auto_messages)
-auto_messages = filter(lambda x: os.path.splitext(x)[1] == ".py", auto_messages)
-auto_messages = list(auto_messages)
-for auto_message in auto_messages:
-    auto_message_specs[
-        auto_message.split(".")[0]
-    ] = importlib.util.spec_from_file_location(
-        f"{auto_message.split('.')[0]}", os.path.join(AUTO_MESSAGES_PATH, auto_message)
-    )
-logger.info(f"List of auto_messages: {auto_messages}")
-
-for spec in commands_specs:
-    commands_modules[spec] = importlib.util.module_from_spec(commands_specs[spec])
-    if not commands_specs[spec]:
-        continue
-    try:
-        commands_specs[spec].loader.exec_module(commands_modules[spec])
-    except Exception as e:
-        logger.critical(traceback.format_exc())
-        logger.critical(f"Problem Loading Module: {e}")
-
-for spec in auto_message_specs:
-    auto_message_modules[spec] = importlib.util.module_from_spec(
-        auto_message_specs[spec]
-    )
-    if not auto_message_specs[spec]:
-        continue
-    try:
-        auto_message_specs[spec].loader.exec_module(auto_message_modules[spec])
-    except Exception as e:
-        logger.critical(traceback.format_exc())
-        logger.critical(f"Problem Loading Module: {e}")
-
-
-database_manager.create_database()
-database_manager.create_lol_database()
-database_manager.create_variables_db()
-database_manager.create_chat_history_database()
-database_manager.update_commands_in_database(commands_modules, commands)
-database_manager.update_auto_messages_in_database(auto_message_modules, auto_messages)
-
-
-def start(bot: Bot, message: Message, stop_event: Event):
-    i = 0
-    wait = 5
-    while not stop_event.is_set():
-        i += wait
-        started = tools.smart_start_stream_time.update_start_stream_timestamp()
-        if started == "START":
-            bot.send_privmsg(
-                message.channel, "/announce Stream has started, you can now use ?join"
-            )
-        elif started == "END":
-            bot.send_privmsg(message.channel, "Stream has ended")
-        if i >= 30:
-            analyze_auto_message.do_auto_message(bot, message, auto_message_modules)
-            i = 0
-        time.sleep(wait)
-
-
-def main(bot: Bot, message: Message):
-    if message.command == Commands.PRIVMSG:
-        database_manager.add_message_to_chat_history(message)
-        if message.value[0] in {"?", "\\"}:
-            analyze_command.do_command(bot, message, commands_modules)
-        scripts.unit_converter.send_metric(bot, message)
-        scripts.alwase.alwase(bot, message)
-        scripts.chatting.chatting(bot, message)
-        scripts.chatting.chatting_annoy(bot, message)
-        scripts.chat.chat(bot, message)
-        scripts.crylaugh.crylaugh(bot, message)
-
-    # if message.command == Commands.PART:
-    #     if message.nick in {'jelemar', 'flauenn', 'ihaspeks', 'blobin_wobin', 'officiallysp'}:
-    #         bot.send_privmsg(message.channel, f"/announce {message.nick} has left chat")
-    # if message.command == Commands.JOIN:
-    #     if message.nick in {'jelemar', 'flauenn', 'ihaspeks', 'blobin_wobin', 'officiallysp'}:
-    #         bot.send_privmsg(message.channel, f"/announce {message.nick} has joined chat")
-
-    tools.raid.raid(bot, message)
diff --git a/skgyorugo/requirements.txt b/skgyorugo/requirements.txt
deleted file mode 100644 (file)
index bbabe65..0000000
+++ /dev/null
@@ -1,45 +0,0 @@
-beautifulsoup4==4.11.1
-black==22.3.0
-blis==0.7.7
-catalogue==2.0.7
-certifi==2022.5.18.1
-charset-normalizer==2.0.12
-click==8.1.3
-cymem==2.0.6
-deep-translator==1.8.3
-en-core-web-sm @ https://github.com/explosion/spacy-models/releases/download/en_core_web_sm-3.3.0/en_core_web_sm-3.3.0-py3-none-any.whl
-flake8==4.0.1
-flake8-black==0.3.3
-idna==3.3
-Jinja2==3.1.2
-langcodes==3.3.0
-MarkupSafe==2.1.1
-mccabe==0.6.1
-murmurhash==1.0.7
-mypy-extensions==0.4.3
-numpy==1.22.4
-packaging==21.3
-pathspec==0.9.0
-pathy==0.6.1
-platformdirs==2.5.2
-preshed==3.0.6
-pycodestyle==2.8.0
-pydantic==1.8.2
-pyflakes==2.4.0
-pyparsing==3.0.9
-python-dotenv==0.20.0
-requests==2.27.1
-smart-open==5.2.1
-soupsieve==2.3.2.post1
-spacy==3.3.0
-spacy-legacy==3.0.9
-spacy-loggers==1.0.2
-srsly==2.4.3
-thinc==8.0.16
-tomli==2.0.1
-tqdm==4.64.0
-typer==0.4.1
-typing-extensions==4.2.0
-urllib3==1.26.9
-wasabi==0.9.1
-websocket-client==1.3.2
diff --git a/skgyorugo/scripts/alwase.py b/skgyorugo/scripts/alwase.py
deleted file mode 100644 (file)
index 8516720..0000000
+++ /dev/null
@@ -1,19 +0,0 @@
-from aptbot.bot import Bot, Message, Commands
-import tools.smart_privmsg
-import random
-
-
-def alwase(bot: Bot, message: Message):
-    if "always" not in message.value.lower():
-        return
-    try:
-        replied_msg_id = message.tags["id"]
-    except KeyError:
-        replied_msg_id = None
-    msgs = [
-        "It's ALWASE gigaMadge",
-        "Why don't you spell it ALWASE ? gigaMadge",
-        "Spell it ALWASE or peepoArriveBan",
-    ]
-    msg = random.choice(msgs)
-    tools.smart_privmsg.send(bot, message, msg, reply=replied_msg_id)
diff --git a/skgyorugo/scripts/chat.py b/skgyorugo/scripts/chat.py
deleted file mode 100644 (file)
index 26dbd19..0000000
+++ /dev/null
@@ -1,38 +0,0 @@
-from aptbot.bot import Message, Commands, Bot
-import tools.smart_privmsg
-import openai
-import os
-
-openai.api_key = os.getenv("OPENAI_API")
-
-def chat(bot: Bot, message: Message):
-    if not message.nick in {'skgyorugo', 'ihaspeks'}:
-        return
-    if not message.value.startswith("# "):
-        return
-
-    replied_message = message.tags.get("reply-parent-msg-body", None)
-    if replied_message:
-        msg = replied_message
-        replied_msg_id = message.tags["reply-parent-msg-id"]
-    else:
-        msg = " ".join(message.value.split(" ")[1:])
-        replied_msg_id = message.tags['id']
-
-    response = openai.Completion.create(
-        model="text-davinci-003",
-        prompt=msg,
-        temperature=1,
-        max_tokens=4000,
-        top_p=0.3,
-        frequency_penalty=0.5,
-        presence_penalty=0.5,
-    )
-
-    if response:
-        msg = response["choices"][0]["text"]
-        msg = msg.replace("\n", " ")
-    else:
-        msg = "Sadge nothing was returned"
-
-    tools.smart_privmsg.send(bot, message, msg, reply=replied_msg_id)
diff --git a/skgyorugo/scripts/chatting.py b/skgyorugo/scripts/chatting.py
deleted file mode 100644 (file)
index 0eb7224..0000000
+++ /dev/null
@@ -1,28 +0,0 @@
-from aptbot.bot import Bot, Message, Commands
-import tools.smart_privmsg
-import random
-
-
-def chatting(bot: Bot, message: Message):
-    if "Chatting" not in message.value:
-        return
-    if random.random() > 0.4:
-        return
-    msg = ""
-    if "reply-parent-msg-body" in message.tags:
-        if message.value.split(" ")[1] == "Chatting":
-            msg = " ".join(message.value.split(" ")[1:])
-    else:
-        if message.value.split(" ")[0] == "Chatting":
-            msg = message.value
-    if msg:
-        tools.smart_privmsg.send(bot, message, msg)
-
-
-def chatting_annoy(bot: Bot, message: Message):
-    nicks = {}
-    if message.nick.lower() not in nicks:
-        return
-    msg = "Chatting " + message.value
-    # msg = "Pepelaff " + message.value
-    tools.smart_privmsg.send(bot, message, msg)
diff --git a/skgyorugo/scripts/clean_queue.py b/skgyorugo/scripts/clean_queue.py
deleted file mode 100644 (file)
index b86d7f7..0000000
+++ /dev/null
@@ -1,80 +0,0 @@
-import sqlite3
-import os
-import ttv_api.users
-import time
-import logging
-
-PATH = os.path.dirname(os.path.realpath(__file__))
-PATH = os.path.join(PATH, "..")
-
-STREAMER_PATH = os.path.abspath(os.path.join(__file__, "../.."))
-streamer_login = os.path.split(STREAMER_PATH)[1]
-
-logger = logging.getLogger(__name__)
-
-
-def clean_queue():
-    tries = 0
-    while True:
-        tries += 1
-        twitch = ttv_api.users.get_users(user_logins=[streamer_login])
-        if twitch:
-            try:
-                twitch_id = twitch[0].user_id
-            except IndexError:
-                logger.critical(
-                    f"UNABLE TO CLEAN LOL QUEUE; GOT INDEX ERROR twitch = {twitch}"
-                )
-                continue
-            break
-        elif tries > 60:
-            return
-        logger.critical(f"UNABLE TO CLEAN LOL QUEUE; twitch = {twitch}")
-        time.sleep(3)
-
-    conn = sqlite3.connect(os.path.join(PATH, "lol_data.db"))
-    c = conn.cursor()
-
-    c.execute("DELETE FROM lol_queue")
-    c.execute("DELETE FROM ow")
-    conn.commit()
-
-    c.execute(
-        """
-        INSERT INTO lol_queue (
-            "twitch_id",
-            "position",
-            "available",
-            "last_available",
-            "time_remaining"
-        ) VALUES (?, ?, ?, ?, ?);
-        """,
-        (
-            twitch_id,
-            0,
-            1,
-            None,
-            9999999,
-        ),
-    )
-    c.execute(
-        """
-        INSERT INTO ow (
-            "twitch_id",
-            "position",
-            "available",
-            "last_available",
-            "time_remaining"
-        ) VALUES (?, ?, ?, ?, ?);
-        """,
-        (
-            twitch_id,
-            0,
-            1,
-            None,
-            9999999,
-        ),
-    )
-    conn.commit()
-
-    conn.close()
diff --git a/skgyorugo/scripts/clip_server.py b/skgyorugo/scripts/clip_server.py
deleted file mode 100644 (file)
index 57d521b..0000000
+++ /dev/null
@@ -1,38 +0,0 @@
-import os
-import random
-import sqlite3
-import logging
-from fastapi import FastAPI
-from fastapi.middleware.cors import CORSMiddleware
-
-app = FastAPI()
-
-origins = ["*"]
-
-app.add_middleware(
-    CORSMiddleware,
-    allow_origins=origins,
-    allow_credentials=True,
-    allow_methods=["*"],
-    allow_headers=["*"],
-)
-
-@app.get("/clip")
-async def root():
-    clips = [
-        "https://clips-media-assets2.twitch.tv/AT-cm%7CMGyhlrJbd3gtietAgP63LA.mp4",
-        "https://clips-media-assets2.twitch.tv/WATxq6O_aQBU1qrftJJ0fQ/AT-cm%7CWATxq6O_aQBU1qrftJJ0fQ.mp4",
-    ]
-    return random.choice(clips)
-
-# logger = logging.getLogger(__name__)
-
-# PATH = os.path.dirname(os.path.realpath(__file__))
-# logger.debug(f"PATH set to: {PATH}")
-
-
-# def do_command(bot: Bot, message: Message, command_modules: dict):
-#     db_name_database = "database.db"
-#     conn = sqlite3.connect(os.path.join(PATH, db_name_database))
-#     c = conn.cursor()
-#     logger.info(f"connected to database {db_name_database}")
diff --git a/skgyorugo/scripts/crylaugh.py b/skgyorugo/scripts/crylaugh.py
deleted file mode 100644 (file)
index a6e2658..0000000
+++ /dev/null
@@ -1,16 +0,0 @@
-from aptbot.bot import Bot, Message, Commands
-import tools.smart_privmsg
-import random
-
-
-def crylaugh(bot: Bot, message: Message):
-    if random.random() > 0.05:
-        return
-    if "😂" not in message.value:
-        return
-    try:
-        replied_msg_id = message.tags["id"]
-    except KeyError:
-        replied_msg_id = None
-    msg = "Oh ðŸ˜‚ look ðŸ˜‚ at ðŸ˜‚ me ðŸ˜‚ I ðŸ˜‚ use ðŸ˜‚ this ðŸ˜‚ funny ðŸ˜‚ emoji ðŸ˜‚ hahahaha ðŸ˜‚😂😂😂😂 lit ðŸ’¯ ðŸ‘Œ"
-    tools.smart_privmsg.send(bot, message, msg, reply=replied_msg_id)
diff --git a/skgyorugo/scripts/translator.py b/skgyorugo/scripts/translator.py
deleted file mode 100644 (file)
index 7447a51..0000000
+++ /dev/null
@@ -1,6 +0,0 @@
-from deep_translator import GoogleTranslator
-
-
-def translate(text: str) -> str:
-    trans = GoogleTranslator(source="auto", target="en").translate(text)
-    return trans
diff --git a/skgyorugo/scripts/unit_converter.py b/skgyorugo/scripts/unit_converter.py
deleted file mode 100644 (file)
index f9fb532..0000000
+++ /dev/null
@@ -1,95 +0,0 @@
-from aptbot.bot import Bot, Message, Commands
-import spacy
-import re
-import tools.smart_privmsg
-
-nlp = spacy.load("en_core_web_sm")
-
-
-def send_metric(bot: Bot, message: Message):
-    text = ""
-    ft_inch, cm = _tometric(message.value)
-    for i in range(len(cm)):
-        if cm[i] > 230:
-            text += f"{ft_inch[i][0]:.1f}ft. and {ft_inch[i][1]:.1f}in. is {cm[i] / 100:.2f}m. | "
-        elif cm[i] > 0:
-            text += f"{ft_inch[i][0]:.1f}ft. and {ft_inch[i][1]:.1f}in. is {cm[i]:.1f}cm. | "
-    if text:
-        try:
-            replied_msg_id = message.tags["id"]
-        except KeyError:
-            replied_msg_id = None
-        tools.smart_privmsg.send(bot, message, text, reply=replied_msg_id)
-
-
-def _tometric(text: str) -> tuple[list[tuple[int, int]], list[float]]:
-    ft_inch: list[tuple] = []
-    feet = 0
-    inches = 0
-    text = text.replace("-", " ")
-    text = re.sub(r"([0-9]+(\.[0-9]+)?)", r"\1 ", text)
-    text = re.sub(r"\s{2,}", r" ", text)
-    doc = nlp(text)
-    feet_was_last = False
-    next_should_be_double = False
-    found_single = False
-    for w in doc:
-        # print(w.text, w.pos_)
-        if w.pos_ in {"AUX", "VERB", "ADP"}:
-            if feet_was_last and not next_should_be_double:
-                ft_inch.append((feet, 0.0))
-                feet = 0
-                inches = 0
-        if w.like_num or w.pos_ == "NUM":
-            # index_of_previous_token = w.i - 1
-            # try:
-            #     prev_token = doc[index_of_previous_token]
-            #     print(prev_token.lemma_)
-            #     if prev_token.lemma_ != "be":
-            #         continue
-            # except:
-            #     pass
-            # if "'" in w.text:
-            #     feet_and_inches = w.text.split("'")
-            #     try:
-            #         feet = float(feet_and_inches[0])
-            #         inches = float(feet_and_inches[1])
-            #     except:
-            #         pass
-            index_of_next_token = w.i + 1
-            try:
-                next_token = doc[index_of_next_token]
-                if next_token.lemma_ in {"ft", "foot", "'"}:
-                    if next_token.lemma_ == "'" and not next_should_be_double:
-                        next_should_be_double = True
-                    elif next_token.lemma_ == "'":
-                        feet = 0
-                        inches = 0
-                        continue
-                    if feet_was_last:
-                        ft_inch.append((feet, 0.0))
-                    feet = float(w.text)
-                    feet_was_last = True
-                elif next_token.lemma_ in {"inch", '"'}:
-                    if next_token.lemma_ == '"' and next_should_be_double:
-                        inches = float(w.text)
-                        next_should_be_double = False
-                    elif next_token.lemma_ == '"':
-                        inches = 0
-                    elif next_should_be_double:
-                        feet = 0
-                        inches = float(w.text)
-                    else:
-                        inches = float(w.text)
-                    ft_inch.append((feet, inches))
-                    feet = 0
-                    inches = 0
-                    feet_was_last = False
-            except:
-                pass
-    if feet_was_last and not next_should_be_double:
-        ft_inch.append((feet, 0.0))
-    cm: list[float] = []
-    for unit in ft_inch:
-        cm.append((unit[0] * 12 + unit[1]) * 2.54)
-    return (ft_inch, cm)
diff --git a/skgyorugo/tools/permissions.py b/skgyorugo/tools/permissions.py
deleted file mode 100644 (file)
index bf496a0..0000000
+++ /dev/null
@@ -1,18 +0,0 @@
-import os
-import sqlite3
-
-TOOLS_PATH = os.path.dirname(os.path.realpath(__file__))
-PATH = os.path.join(TOOLS_PATH, "..")
-
-DEFAULT_PERMISSION = 99
-
-
-def get_permission_from_id(user_id: str) -> int:
-    conn = sqlite3.connect(os.path.join(PATH, "database.db"))
-    c = conn.cursor()
-    c.execute("SELECT permission FROM users WHERE user_id = ?", (user_id,))
-    fetched_user = c.fetchone()
-    if fetched_user:
-        return fetched_user[0]
-
-    return DEFAULT_PERMISSION
diff --git a/skgyorugo/tools/raid.py b/skgyorugo/tools/raid.py
deleted file mode 100644 (file)
index 104729b..0000000
+++ /dev/null
@@ -1,21 +0,0 @@
-import ttv_api.channel
-from aptbot.bot import Bot, Message, Commands
-
-
-def raid(bot: Bot, message: Message):
-    if message.command == Commands.USERNOTICE and message.tags["msg-id"] == "raid":
-        raider_name = message.tags["msg-param-displayName"]
-        raider_login = message.tags["msg-param-login"]
-        raider_id = message.tags["user-id"]
-        raider_channel_info = ttv_api.channel.get_channels(raider_id)
-        raider_game = ""
-        if raider_channel_info:
-            raider_game = raider_channel_info[0].game_name
-        viewers = message.tags["msg-param-viewerCount"]
-        viewers = f"{viewers} viewer" if viewers == "1" else f"{viewers} viewers"
-        msg_reply = f"POGGERS {raider_name} has raided {message.channel} \
-                    with {viewers}!!! Why don't you check them out at: \
-                    https://twitch.tv/{raider_login}"
-        if raider_game:
-            msg_reply += f" they were just playing {raider_game}!"
-        bot.send_privmsg(message.channel, msg_reply)
diff --git a/skgyorugo/tools/smart_privmsg.py b/skgyorugo/tools/smart_privmsg.py
deleted file mode 100644 (file)
index 1b0ff78..0000000
+++ /dev/null
@@ -1,88 +0,0 @@
-from aptbot.bot import Bot, Message, Commands
-from typing import Union
-from .. import database_manager
-import time
-
-MAX_LENGTH = 480
-
-
-def _split_message(message: str) -> list[str]:
-    split_count = len(message) // MAX_LENGTH + 1
-    words = message.split(" ")
-    word_list = [""] * split_count
-    index = 0
-    for word in words:
-        if len(word_list[index]) >= MAX_LENGTH:
-            index += 1
-        word_list[index] += word + " "
-
-    return word_list
-
-
-def send_safe(bot: Bot, channel: str, messages: Union[str, list], reply=None):
-    if isinstance(messages, list):
-        for i in range(len(messages)):
-            while True:
-                if (
-                    messages[i].startswith("/")
-                    or messages[i].startswith("!")
-                    or messages[i].startswith("\\")
-                    or messages[i].startswith("?")
-                ):
-                    messages[i] = messages[i][1:]
-                else:
-                    break
-            messages[i] = messages[i].replace("always", "alwase")
-            messages[i] = messages[i].replace("Always", "Alwase")
-            messages[i] = messages[i].replace("ALWAYS", "ALWASE")
-    else:
-        while True:
-            if (
-                messages.startswith("/")
-                or messages.startswith("!")
-                or messages.startswith("\\")
-                or messages.startswith("?")
-            ):
-                messages = messages[1:]
-            else:
-                break
-        messages = messages.replace("always", "alwase")
-        messages = messages.replace("Always", "Alwase")
-        messages = messages.replace("ALWAYS", "ALWASE")
-    bot.send_privmsg(channel, messages, reply)
-
-
-def send(
-    bot: Bot,
-    message_data: Message,
-    message: str,
-    to_remove: int = 1,
-    safe_send: bool = True,
-    reply=None,
-):
-    # for msg in _split_message(' '.join(message_data.value.split(' ')[1:])):
-    #     message = message.replace("{message}", msg)
-    #     message = message.replace("{nick}", message_data.nick)
-    #     message = message.replace("{channel}", message_data.channel)
-    msg = " ".join(message_data.value.split(" ")[to_remove:])
-    message = message.replace("{message}", msg)
-    message = message.replace("{nick}", message_data.nick)
-    message = message.replace("{channel}", message_data.channel)
-
-    messages = _split_message(message)
-    for message in messages:
-        if reply:
-            tags = {"display-name": "MurphyAI", "tmi-sent-ts": int(time.time() * 1000), "user-id": "784114488", "room-id": "169701299", "reply-parent-msg-id": reply}
-        database_manager.add_message_tochat_history(
-            Message(
-                tags=tags,
-                nick="murphyai",
-                command=Commands.PRIVMSG,
-                message_data.channel,
-                value=message
-            )
-        )
-    if safe_send:
-        send_safe(bot, message_data.channel, messages, reply)
-    else:
-        bot.send_privmsg(message_data.channel, messages, reply)
diff --git a/skgyorugo/tools/smart_start_stream_time.py b/skgyorugo/tools/smart_start_stream_time.py
deleted file mode 100644 (file)
index a230779..0000000
+++ /dev/null
@@ -1,144 +0,0 @@
-import time
-import os
-import ttv_api.users
-import ttv_api.stream
-import ttv_api.channel
-import sqlite3
-import logging
-from scripts import clean_queue
-from typing import Optional
-
-logger = logging.getLogger(__name__)
-
-STREAMER_PATH = os.path.abspath(os.path.join(__file__, "../.."))
-logger.debug(f"STREAMER_PATH set to: {STREAMER_PATH}")
-TOOLS_PATH = os.path.dirname(os.path.realpath(__file__))
-logger.debug(f"TOOLS_PATH set to: {TOOLS_PATH}")
-PATH = os.path.join(TOOLS_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}")
-
-
-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()
-
-    c.execute(
-        """
-        SELECT
-            start_stream_ts
-        FROM
-            stream_info
-        WHERE
-            ended = 0;
-        """
-    )
-
-    fetched = c.fetchone()
-    conn.close()
-
-    try:
-        return fetched[0]
-    except TypeError:
-        return None
-
-
-def update_start_stream_timestamp() -> Optional[str]:
-    conn = sqlite3.connect(os.path.join(PATH, "database.db"))
-    c = conn.cursor()
-
-    c.execute("SELECT MAX(last_checked) FROM stream_info")
-    max_last_checked = c.fetchone()
-    if max_last_checked:
-        c.execute(
-            """
-            SELECT
-                start_stream_ts,
-                last_checked
-            FROM
-                stream_info
-            WHERE
-                last_checked = ?
-                AND ended = 0
-            """,
-            (max_last_checked[0],),
-        )
-
-    fetched = c.fetchone()
-
-    if fetched:
-        start_stream_ts, last_checked = fetched
-        if time.time() < last_checked + CHECK_STREAMTIME_CD:
-            conn.close()
-            return
-
-    stream_info = ttv_api.stream.get_streams(user_logins=[STREAMER_LOGIN])
-    if not stream_info and not fetched:
-        conn.close()
-        return
-
-    if not stream_info:
-        start_stream_ts, last_checked = fetched
-        if time.time() < last_checked + MAX_OFF_STREAM_MARGIN:
-            conn.close()
-            return
-
-        c.execute(
-            "REPLACE INTO stream_info VALUES (?, ?, ?)",
-            (
-                start_stream_ts,
-                last_checked,
-                1,
-            ),
-        )
-        conn.commit()
-        conn.close()
-        # TODO add hook, streamer ended stream
-        end_stream()
-        return "END"
-
-    if not fetched:
-        start_stream_ts = int(stream_info[0].started_at.timestamp())
-        current_time = int(time.time())
-        c.execute(
-            "REPLACE INTO stream_info VALUES (?, ?, ?)",
-            (
-                start_stream_ts,
-                current_time,
-                0,
-            ),
-        )
-        conn.commit()
-        conn.close()
-        start_stream()
-        return "START"
-
-    start_stream_ts, last_checked = fetched
-    current_time = int(time.time())
-    c.execute(
-        "REPLACE INTO stream_info VALUES (?, ?, ?)",
-        (
-            start_stream_ts,
-            current_time,
-            0,
-        ),
-    )
-    conn.commit()
-    conn.close()
-    return
diff --git a/skgyorugo/variable_manager/parser.py b/skgyorugo/variable_manager/parser.py
deleted file mode 100644 (file)
index 52c3b53..0000000
+++ /dev/null
@@ -1,69 +0,0 @@
-import os
-import re
-import sqlite3
-
-PATH = os.path.dirname(os.path.realpath(__file__))
-PATH = os.path.join(PATH, "..")
-
-
-class Expression:
-    def __init__(self, name: str, list_id: int, method: str, value: str):
-        self.name = name
-        self.list_id = list_id
-        self.method = method
-        self.value = value
-
-    def eval(self):
-        conn = sqlite3.connect(os.path.join(PATH, "variables.db"))
-        c = conn.cursor()
-
-        if self.list_id:
-            # TODO
-            c.execute(
-                """
-                SELECT
-                    *
-                FROM
-                    list_values
-                INNER JOIN methods USING(type)
-                WHERE
-                    list_values.name = ?
-                    AND list_values.id = ?
-                    AND methods.name = ?
-                """,
-                (self.name, self.list_id, self.method),
-            )
-        conn.close()
-        pass
-
-    def __repr__(self) -> str:
-        print(type(self.list_id))
-        return f"Expression('{self.name}', '{self.list_id}', '{self.method}', '{self.value}')"
-
-
-def parse(text: str):
-    value = text
-    reg_parse = re.compile(r"\$(\w+)\[?(\d+)?\]?\.(\w+)\((.+)?\)")
-
-    expressions: list[Expression] = []
-    while True:
-
-        try:
-            name, list_id, method, value = reg_parse.findall(value)[0]
-            list_id = int(list_id)
-        except IndexError:
-            break
-        except ValueError:
-            list_id = None
-        expressions.append(Expression(name, list_id, method, value))
-    print(expressions)
-    if 2:
-        return None
-    return ""
-
-
-if __name__ == "__main__":
-    # parse(r"$fib[12].set($fib[11].add($fib[10].value()))")
-    # parse(r"$quotes[2].set(Hello, world)")
-    # parse(r"")
-    parse(r"wqe$quotes[].set($quotes[1].value(dw) + fw)")
diff --git a/skgyorugo/yt_api/__init__.py b/skgyorugo/yt_api/__init__.py
deleted file mode 100644 (file)
index 7c8626b..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
-import urllib3
-from dataclasses import dataclass
-import os
-import json
-from typing import Optional
-
-URL = "https://www.googleapis.com/youtube/v3/search"
-
-API = os.getenv("YOUTUBE_API")
-CLIENT_ID = os.getenv("YOUTUBE_CLIENT_ID")
-CLIENT_SECRET = os.getenv("YOUTUBE_CLIENT_SECRET")
diff --git a/skgyorugo/yt_api/videos.py b/skgyorugo/yt_api/videos.py
deleted file mode 100644 (file)
index d0e9fc2..0000000
+++ /dev/null
@@ -1,31 +0,0 @@
-from yt_api import *
-import html
-
-
-@dataclass
-class Video:
-    video_name: str
-    video_id: str
-
-
-def get_newest_video(channel_id: str) -> Optional[Video]:
-    get_video_snippets = "?part=snippet"
-    get_url = (
-        URL
-        + get_video_snippets
-        + f"&channelId={channel_id}&order=date&type=video"
-        + f"&key={API}"
-    )
-
-    http = urllib3.PoolManager()
-    r = http.request(
-        "GET",
-        get_url,
-    )
-    if r.status != 200:
-        return None
-    data = json.loads(r.data.decode("utf-8"))["items"][0]
-    video_id = data["id"]["videoId"]
-    video_title = html.unescape(data["snippet"]["title"])
-
-    return Video(video_title, video_id)