.. _ara_bot: ======= Ara-Bot ======= Ara-Bot is a **Python Discord bot** designed to help me manage various community activities on my server. Design ------ Initially, I started with the **Discord library** to develop the bot’s first version. My goal was for it to: - Automatically create channels for players based on a simple CSV file `table;playerA;playerB` - Set up events for casters who wanted to broadcast a match - Allow players to submit their own results - Close a round by deleting all channels and preparing the new round based on the submitted results The **first version** was ready for the launch of my tournament **"AOE Pong"**, but it wasn’t very user-friendly. I needed **slash commands** to make it more accessible to the community. So, I started recoding it using the **interactions.py** library. I also add a youtube checker function to check if my youtube channel is live so i can advertise about it. Infrastructure -------------- The bot’s content is stored in a **private Git repository**, while the bot itself runs inside a **K3s-managed container** on my **Raspberry Pi**. Each time I update it, the system **removes the existing container**, recreates it, and pulls the latest version from my repository. Time Saved ---------- Without the bot, I would probably spend **around 4 hours per week** managing round closures and new round preparations. Additionally, if I hadn’t scripted the **new draft system**, this management time could easily increase to **a full day**. Next Steps ---------- The bot still requires more development to achieve all the features I envision. My goal is to create a **ladder tournament** where players can simply say: *"Hey, match me with someone for a BO5!"* The bot would **find an available opponent** and automatically organize the match using the tournament settings. I also want the bot to : - Work with a database instead of files - Have more "tournament concept" like leagues, elimination bracket... - Automate players registrations, with automatic elos check by api - Have the possibility to insert new players between rounds - Replace the "Interaction Role Bot" on my discord by adding the usecases i need ... There’s still plenty of room for updates and improvements! Code Example ------------ Here’s a basic example of how the bot **check if i'm live automatically** : .. code-block:: python import asyncio from utils.youtube import check_live from utils.time import get_check_interval from utils.discord import getRoleByName from settings.vars import * import re async def start_youtube_checker(bot, YOUTUBE_API_KEY, BOT_LOG): """ Lance une tâche asynchrone pour vérifier les lives YouTube. """ # Vérification du live video_title, video_url = await check_live(YOUTUBE_API_KEY, CHANNEL_ID) if video_title: GUILD = bot.get_guild(GUILD_ID) channel = bot.get_channel(DISCORD_CHANNEL_ID) NOTIFICATION_ROLE= await getRoleByName(GUILD,"Notifications") pattern=r'^\[(\w{2})\]\s*\[([\w|:]+)\]\s*(.+)$' match = re.match(pattern,video_title) if match : LANG = match.group(1) GAME = match.group(2) TITLE = match.group(3) if LANG == "FR" and GAME and TITLE : MESSAGE=f""" Bonjour à tous {NOTIFICATION_ROLE.mention} ! Le Vieil Ours est en live sur le jeu **{GAME}**. Il streame **{TITLE}** et c'est par ici : {video_url} ! """ elif LANG == "EN" and GAME and TITLE : MESSAGE=f""" Hi everyone {NOTIFICATION_ROLE.mention} ! The Old Bear is live on the game **{GAME}**. He is streaming **{TITLE}**. You're interested ? Let's go there : {video_url} ! """ else : MESSAGE=f"""📢 Aramatu est maintenant en live ! \nIl streame : **{video_title}** ! \nRegardez ici : {video_url}""" if channel: await channel.send(f"{MESSAGE}") BOT_LOG.info(f"Notification envoyée : {video_title}") return True return False Code Architecture ----------------- .. code-block:: text 📂 AraBot/ ├── 📁 libs/ → Handles bot commands ├── 📁 utils/ → Utility functions (API requests, logs) ├── 📁 settings/ → Configuration files (settings, API keys, constants) ├── 📄 Ara-bot.py → Bot entry point, initializes everything ├── 📄 requirements.txt → Dependencies required for the bot ├── 📄 README.md → Documentation and setup guide