From 7e9061ed2a83eaa7d3c4ac0df8d19d5615e9e5e5 Mon Sep 17 00:00:00 2001 From: Nerd Bear Date: Wed, 23 Oct 2024 15:28:58 +0100 Subject: [PATCH] Final clean up before release of 0.4.6 --- BotUpdate/cogs/admin.py | 69 - BotUpdate/cogs/events.py | 95 - BotUpdate/cogs/fun.py | 61 - BotUpdate/cogs/md.md | 70 - BotUpdate/cogs/moderation.py | 127 - BotUpdate/cogs/music.py | 76 - BotUpdate/cogs/utility.py | 142 - BotUpdate/config.json | 39 - BotUpdate/data/crac.db | 0 BotUpdate/logs/bot.log | 0 BotUpdate/main.py | 36 - BotUpdate/requirements.txt | 118 - BotUpdate/utils/__init__.py | 0 .../__pycache__/__init__.cpython-312.pyc | Bin 165 -> 0 bytes .../config_manager.cpython-312.pyc | Bin 3422 -> 0 bytes BotUpdate/utils/config_manager.py | 41 - BotUpdate/utils/db_manager.py | 55 - BotUpdate/utils/helper.py | 54 - README.md | 333 +- assets/emojis/webp/codebase.md | 40 - changes.md | 7 - codebase.md | 10196 ---------------- db_manager/history.py | 105 +- memo.db | Bin 151552 -> 151552 bytes temp/audio/063722105352.mp3 | Bin 210816 -> 0 bytes temp/audio/743837710520.mp3 | Bin 197184 -> 0 bytes website/commands/deafen/index.html | 216 + website/commands/index.html | 52 + website/commands/mute/index.html | 214 + website/commands/undeafen/index.html | 214 + .../commands/unmute/index.html | 0 31 files changed, 917 insertions(+), 11443 deletions(-) delete mode 100644 BotUpdate/cogs/admin.py delete mode 100644 BotUpdate/cogs/events.py delete mode 100644 BotUpdate/cogs/fun.py delete mode 100644 BotUpdate/cogs/md.md delete mode 100644 BotUpdate/cogs/moderation.py delete mode 100644 BotUpdate/cogs/music.py delete mode 100644 BotUpdate/cogs/utility.py delete mode 100644 BotUpdate/config.json delete mode 100644 BotUpdate/data/crac.db delete mode 100644 BotUpdate/logs/bot.log delete mode 100644 BotUpdate/main.py delete mode 100644 BotUpdate/requirements.txt delete mode 100644 BotUpdate/utils/__init__.py delete mode 100644 BotUpdate/utils/__pycache__/__init__.cpython-312.pyc delete mode 100644 BotUpdate/utils/__pycache__/config_manager.cpython-312.pyc delete mode 100644 BotUpdate/utils/config_manager.py delete mode 100644 BotUpdate/utils/db_manager.py delete mode 100644 BotUpdate/utils/helper.py delete mode 100644 assets/emojis/webp/codebase.md delete mode 100644 changes.md delete mode 100644 codebase.md delete mode 100644 temp/audio/063722105352.mp3 delete mode 100644 temp/audio/743837710520.mp3 create mode 100644 website/commands/deafen/index.html create mode 100644 website/commands/mute/index.html create mode 100644 website/commands/undeafen/index.html rename BotUpdate/cogs/__init__.py => website/commands/unmute/index.html (100%) diff --git a/BotUpdate/cogs/admin.py b/BotUpdate/cogs/admin.py deleted file mode 100644 index 8d994bd..0000000 --- a/BotUpdate/cogs/admin.py +++ /dev/null @@ -1,69 +0,0 @@ -import discord -from discord.ext import commands -from utils.config_manager import ColorManager, load_config -from utils.db_manager import add_history -import sys -import os - -class Admin(commands.Cog): - def __init__(self, bot): - self.bot = bot - self.config = load_config() - self.color_manager = ColorManager(self.config) - - @commands.command() - @commands.has_permissions(administrator=True) - async def shutdown(self, ctx): - add_history(ctx.author.id, "shutdown") - embed = discord.Embed( - title=f"{self.config['bot_name']} Shutting Down", - description=f"{self.config['bot_name']} is now offline.", - color=self.color_manager.get_color("Red"), - timestamp=ctx.message.created_at - ) - embed.set_footer( - text=self.config["defaults"]["footer_text"], - icon_url=self.config["defaults"]["footer_icon"] - ) - await ctx.send(embed=embed) - await self.bot.close() - - @commands.command() - @commands.has_permissions(administrator=True) - async def start(self, ctx): - add_history(ctx.author.id, "start") - await self.bot.change_presence( - status=discord.Status.online, - activity=discord.Game(name=f"Run {self.config['defaults']['prefix']}help for help") - ) - embed = discord.Embed( - title=f"{self.config['bot_name']} Starting Up", - description=f"{self.config['bot_name']} is now online.", - color=self.color_manager.get_color("Blue"), - timestamp=ctx.message.created_at - ) - embed.set_footer( - text=self.config["defaults"]["footer_text"], - icon_url=self.config["defaults"]["footer_icon"] - ) - await ctx.send(embed=embed) - - @commands.command() - @commands.has_permissions(administrator=True) - async def restart(self, ctx): - add_history(ctx.author.id, "restart") - embed = discord.Embed( - title="Restarting", - description="The restart will take approximately 10 to 30 seconds on average.", - color=self.color_manager.get_color("Blue") - ) - embed.set_footer( - text=self.config["defaults"]["footer_text"], - icon_url=self.config["defaults"]["footer_icon"] - ) - await ctx.send(embed=embed) - await self.bot.close() - os.execv(sys.executable, ['python'] + sys.argv) - -async def setup(bot): - await bot.add_cog(Admin(bot)) \ No newline at end of file diff --git a/BotUpdate/cogs/events.py b/BotUpdate/cogs/events.py deleted file mode 100644 index 1959122..0000000 --- a/BotUpdate/cogs/events.py +++ /dev/null @@ -1,95 +0,0 @@ -import discord -from discord.ext import commands -from utils.config_manager import ColorManager, load_config -import datetime - -class Events(commands.Cog): - def __init__(self, bot): - self.bot = bot - self.config = load_config() - self.color_manager = ColorManager(self.config) - - @commands.Cog.listener() - async def on_message_delete(self, message): - if message.author == self.bot.user: - return - - log_channel_id = self.config.get("log_channel_id") - if not log_channel_id: - return - - channel = self.bot.get_channel(int(log_channel_id)) - if not channel: - return - - embed = discord.Embed( - title="Message Deleted", - color=self.color_manager.get_color("Red"), - timestamp=datetime.datetime.utcnow() - ) - embed.add_field(name="Author", value=message.author.mention) - embed.add_field(name="Channel", value=message.channel.mention) - embed.add_field(name="Content", value=message.content or "No content") - - if message.attachments: - embed.add_field( - name="Attachments", - value="\n".join([a.url for a in message.attachments]) - ) - - embed.set_footer( - text=self.config["defaults"]["footer_text"], - icon_url=self.config["defaults"]["footer_icon"] - ) - await channel.send(embed=embed) - - @commands.Cog.listener() - async def on_message_edit(self, before, after): - if before.author == self.bot.user: - return - - if before.content == after.content: - return - - log_channel_id = self.config.get("log_channel_id") - if not log_channel_id: - return - - channel = self.bot.get_channel(int(log_channel_id)) - if not channel: - return - - embed = discord.Embed( - title="Message Edited", - color=self.color_manager.get_color("Orange"), - timestamp=datetime.datetime.utcnow() - ) - embed.add_field(name="Author", value=before.author.mention) - embed.add_field(name="Channel", value=before.channel.mention) - embed.add_field(name="Before", value=before.content or "No content") - embed.add_field(name="After", value=after.content or "No content") - - embed.set_footer( - text=self.config["defaults"]["footer_text"], - icon_url=self.config["defaults"]["footer_icon"] - ) - await channel.send(embed=embed) - - @commands.Cog.listener() - async def on_command_error(self, ctx, error): - if isinstance(error, commands.CommandNotFound): - return - - if isinstance(error, commands.MissingPermissions): - await ctx.send("You don't have the required permissions to use this command.") - return - - if isinstance(error, commands.MissingRequiredArgument): - await ctx.send(f"Missing required argument: {error.param}") - return - - # For other types of errors, you might want to log them - print(f"An error occurred: {error}") - -async def setup(bot): - await bot.add_cog(Events(bot)) \ No newline at end of file diff --git a/BotUpdate/cogs/fun.py b/BotUpdate/cogs/fun.py deleted file mode 100644 index 7cecc23..0000000 --- a/BotUpdate/cogs/fun.py +++ /dev/null @@ -1,61 +0,0 @@ -import discord -from discord.ext import commands -from utils.config_manager import ColorManager, load_config -from utils.db_manager import add_history -from utils.helper import get_char_image -import unicodedata -import os - -class Fun(commands.Cog): - def __init__(self, bot): - self.bot = bot - self.config = load_config() - self.color_manager = ColorManager(self.config) - - @commands.command() - async def charinfo(self, ctx, *, characters: str): - add_history(ctx.author.id, "charinfo", [characters]) - if len(characters) > 1: - await ctx.send("Please provide only one character for information.") - return - - char = characters[0] - unicode_value = ord(char) - char_name = unicodedata.name(char, "Could not find name!") - char_category = unicodedata.category(char) - - unicode_escape = f"\\u{unicode_value:04x}" - unicode_escape_full = f"\\U{unicode_value:08x}" - python_escape = repr(char) - - embed = discord.Embed( - color=self.color_manager.get_color("Blue"), - title="Character info", - description=f"Information on character: {char}" - ) - - embed.add_field(name="Original character", value=char, inline=True) - embed.add_field(name="Character name", value=char_name, inline=True) - embed.add_field(name="Character category", value=char_category, inline=True) - embed.add_field(name="Unicode value", value=f"U+{unicode_value:04X}", inline=True) - embed.add_field(name="Unicode escape", value=unicode_escape, inline=True) - embed.add_field(name="Full Unicode escape", value=unicode_escape_full, inline=True) - embed.add_field(name="Python escape", value=python_escape, inline=True) - - embed.set_footer( - text=self.config["defaults"]["footer_text"], - icon_url=self.config["defaults"]["footer_icon"] - ) - - image_path = get_char_image(char) - - if image_path: - file = discord.File(image_path, filename="character.png") - embed.set_thumbnail(url="attachment://character.png") - await ctx.send(embed=embed, file=file) - os.remove(image_path) - else: - await ctx.send(embed=embed) - -async def setup(bot): - await bot.add_cog(Fun(bot)) \ No newline at end of file diff --git a/BotUpdate/cogs/md.md b/BotUpdate/cogs/md.md deleted file mode 100644 index 0222207..0000000 --- a/BotUpdate/cogs/md.md +++ /dev/null @@ -1,70 +0,0 @@ -### Approach to Developing a 2FA Email Sending Project Using Custom Domain Email - -#### **Objective:** -You aim to develop a test project that sends Two-Factor Authentication (2FA) emails using Python, leveraging a custom email address with a custom domain (`nerd-bear.org`). The current setup involves GoDaddy for domain registration, Cloudflare for DNS management, and free email forwarding to a Gmail account. However, this setup does not support sending emails directly from the custom domain email address. - -#### **Requirements:** -- **Primary Requirement:** Send emails from the custom domain email address (`nerd-bear.org`) for the 2FA project. -- **Constraints:** The current setup does not support sending emails directly from the custom domain email address. - -#### **Proposed Solution:** - -1. **Set Up a Custom Email Service:** - - **Option 1: Use a Third-Party Email Service Provider (ESP):** - - **Service Providers:** Consider using services like **SendGrid**, **Mailgun**, or **Amazon SES** (Simple Email Service). - - **Steps:** - 1. **Sign Up:** Create an account with the chosen ESP. - 2. **Domain Verification:** Verify your domain (`nerd-bear.org`) with the ESP to ensure you can send emails from it. This usually involves adding DNS records provided by the ESP to your Cloudflare DNS settings. - 3. **API Integration:** Use the ESP's API to send emails from your Python application. Most ESPs provide Python libraries or SDKs for easy integration. - 4. **Custom Email Address:** Configure the ESP to send emails from your custom domain email address (e.g., `noreply@nerd-bear.org`). - - **Example with SendGrid:** - ```python - from sendgrid import SendGridAPIClient - from sendgrid.helpers.mail import Mail - - message = Mail( - from_email='noreply@nerd-bear.org', - to_emails='user@example.com', - subject='Your 2FA Code', - html_content='Your code is: 123456') - - try: - sg = SendGridAPIClient('YOUR_SENDGRID_API_KEY') - response = sg.send(message) - print(response.status_code, response.body, response.headers) - except Exception as e: - print(e.message) - ``` - - - **Option 2: Set Up a Mail Server:** - - **Service Providers:** Consider using **Mailcow**, **Mailu**, or **Postfix/Dovecot** to set up your own mail server. - - **Steps:** - 1. **Server Setup:** Deploy a mail server on a VPS (Virtual Private Server) or a dedicated server. - 2. **Domain Configuration:** Configure the mail server to use your custom domain (`nerd-bear.org`). This involves setting up DNS records (MX, SPF, DKIM, DMARC) in Cloudflare. - 3. **Email Sending:** Use Python's `smtplib` library to send emails from your custom domain email address. - - **Example with SMTP:** - ```python - import smtplib - from email.mime.text import MIMEText - - msg = MIMEText('Your code is: 123456') - msg['Subject'] = 'Your 2FA Code' - msg['From'] = 'noreply@nerd-bear.org' - msg['To'] = 'user@example.com' - - with smtplib.SMTP('your-mail-server.com', 587) as server: - server.starttls() - server.login('noreply@nerd-bear.org', 'your-email-password') - server.sendmail('noreply@nerd-bear.org', 'user@example.com', msg.as_string()) - ``` - -2. **Leverage Existing Infrastructure:** - - **Cloudflare:** Ensure that Cloudflare is configured to allow outbound SMTP traffic if you choose to set up your own mail server. - - **GoDaddy:** Verify that GoDaddy is correctly pointing to Cloudflare for DNS management. - -3. **Security Considerations:** - - **API Keys:** If using an ESP, store API keys securely (e.g., environment variables, encrypted storage). - - **Email Authentication:** Ensure that your emails are authenticated using SPF, DKIM, and DMARC to prevent them from being marked as spam. - -#### **Conclusion:** -The best approach depends on your specific needs, such as the volume of emails, budget, and technical expertise. Using a third-party ESP like SendGrid or Mailgun is generally easier and more scalable, while setting up your own mail server offers more control but requires more technical effort. diff --git a/BotUpdate/cogs/moderation.py b/BotUpdate/cogs/moderation.py deleted file mode 100644 index 85e8db6..0000000 --- a/BotUpdate/cogs/moderation.py +++ /dev/null @@ -1,127 +0,0 @@ -import discord -from discord.ext import commands -from utils.config_manager import ColorManager, load_config -from utils.db_manager import add_history -import datetime - -class Moderation(commands.Cog): - def __init__(self, bot): - self.bot = bot - self.config = load_config() - self.color_manager = ColorManager(self.config) - - @commands.command() - @commands.has_permissions(kick_members=True) - async def kick(self, ctx, member: discord.Member, *, reason="No reason provided"): - add_history(ctx.author.id, "kick", [str(member.id), reason]) - try: - await member.send( - embed=discord.Embed( - title="You've Been Kicked", - description=f"You were kicked from {ctx.guild.name}.\nReason: {reason}", - color=self.color_manager.get_color("Red") - ) - ) - except: - pass # Unable to DM the user - - await member.kick(reason=reason) - embed = discord.Embed( - title="User Kicked", - description=f"{member.mention} has been kicked.\nReason: {reason}", - color=self.color_manager.get_color("Blue") - ) - embed.set_footer( - text=self.config["defaults"]["footer_text"], - icon_url=self.config["defaults"]["footer_icon"] - ) - await ctx.send(embed=embed) - - @commands.command() - @commands.has_permissions(ban_members=True) - async def ban(self, ctx, member: discord.Member, *, reason="No reason provided"): - add_history(ctx.author.id, "ban", [str(member.id), reason]) - try: - await member.send( - embed=discord.Embed( - title="You've Been Banned", - description=f"You were banned from {ctx.guild.name}.\nReason: {reason}", - color=self.color_manager.get_color("Red") - ) - ) - except: - pass # Unable to DM the user - - await member.ban(reason=reason) - embed = discord.Embed( - title="User Banned", - description=f"{member.mention} has been banned.\nReason: {reason}", - color=self.color_manager.get_color("Blue") - ) - embed.set_footer( - text=self.config["defaults"]["footer_text"], - icon_url=self.config["defaults"]["footer_icon"] - ) - await ctx.send(embed=embed) - - @commands.command() - @commands.has_permissions(ban_members=True) - async def unban(self, ctx, *, member): - add_history(ctx.author.id, "unban", [member]) - banned_users = await ctx.guild.bans() - member_name, member_discriminator = member.split('#') - - for ban_entry in banned_users: - user = ban_entry.user - if (user.name, user.discriminator) == (member_name, member_discriminator): - await ctx.guild.unban(user) - embed = discord.Embed( - title="User Unbanned", - description=f"{user.mention} has been unbanned.", - color=self.color_manager.get_color("Blue") - ) - embed.set_footer( - text=self.config["defaults"]["footer_text"], - icon_url=self.config["defaults"]["footer_icon"] - ) - await ctx.send(embed=embed) - return - - await ctx.send(f"User {member} not found in ban list.") - - @commands.command() - @commands.has_permissions(manage_messages=True) - async def timeout(self, ctx, member: discord.Member, duration: int, unit, *, reason="No reason provided"): - add_history(ctx.author.id, "timeout", [str(member.id), str(duration), unit, reason]) - time_units = {"s": "seconds", "m": "minutes", "h": "hours", "d": "days"} - if unit not in time_units: - await ctx.send("Invalid time unit. Use 's' for seconds, 'm' for minutes, 'h' for hours, or 'd' for days.") - return - - time_delta = datetime.timedelta(**{time_units[unit]: duration}) - await member.timeout(time_delta, reason=reason) - - embed = discord.Embed( - title="User Timed Out", - description=f"{member.mention} has been timed out for {duration}{unit}.\nReason: {reason}", - color=self.color_manager.get_color("Blue") - ) - embed.set_footer( - text=self.config["defaults"]["footer_text"], - icon_url=self.config["defaults"]["footer_icon"] - ) - await ctx.send(embed=embed) - - try: - await member.send( - embed=discord.Embed( - title="You were timed out", - description=f"You have been timed out in {ctx.guild.name} for {duration}{unit}.\nReason: {reason}", - color=self.color_manager.get_color("Red") - ) - ) - except: - pass # Unable to DM the user - -async def setup(bot): - await bot.add_cog(Moderation(bot)) \ No newline at end of file diff --git a/BotUpdate/cogs/music.py b/BotUpdate/cogs/music.py deleted file mode 100644 index d3b5470..0000000 --- a/BotUpdate/cogs/music.py +++ /dev/null @@ -1,76 +0,0 @@ -import discord -from discord.ext import commands -from utils.config_manager import ColorManager, load_config -from utils.db_manager import add_history -import yt_dlp - -class Music(commands.Cog): - def __init__(self, bot): - self.bot = bot - self.config = load_config() - self.color_manager = ColorManager(self.config) - - @commands.command() - async def join(self, ctx): - add_history(ctx.author.id, "join") - if ctx.author.voice is None: - await ctx.send("You need to be in a voice channel to use this command.") - return - - channel = ctx.author.voice.channel - await channel.connect() - await ctx.send(f"Joined {channel.name}") - - @commands.command() - async def leave(self, ctx): - add_history(ctx.author.id, "leave") - if ctx.voice_client is None: - await ctx.send("I'm not in a voice channel.") - return - - await ctx.voice_client.disconnect() - await ctx.send("Left the voice channel") - - @commands.command() - async def play(self, ctx, *, query): - add_history(ctx.author.id, "play", [query]) - if ctx.voice_client is None: - if ctx.author.voice: - await ctx.author.voice.channel.connect() - else: - await ctx.send("You are not connected to a voice channel.") - return - - async with ctx.typing(): - try: - with yt_dlp.YoutubeDL({"format": "bestaudio", "noplaylist": "True"}) as ydl: - info = ydl.extract_info(query, download=False) - URL = info["url"] - title = info["title"] - except Exception as e: - await ctx.send(f"An error occurred: {str(e)}") - return - - if ctx.voice_client.is_playing(): - ctx.voice_client.stop() - - FFMPEG_OPTIONS = { - 'before_options': '-reconnect 1 -reconnect_streamed 1 -reconnect_delay_max 5', - 'options': '-vn' - } - audio_source = discord.FFmpegPCMAudio(URL, **FFMPEG_OPTIONS) - ctx.voice_client.play(audio_source) - - embed = discord.Embed( - title="Now Playing", - description=f"Now playing: {title}", - color=self.color_manager.get_color("Blue") - ) - embed.set_footer( - text=self.config["defaults"]["footer_text"], - icon_url=self.config["defaults"]["footer_icon"] - ) - await ctx.send(embed=embed) - -async def setup(bot): - await bot.add_cog(Music(bot)) \ No newline at end of file diff --git a/BotUpdate/cogs/utility.py b/BotUpdate/cogs/utility.py deleted file mode 100644 index f11dbdc..0000000 --- a/BotUpdate/cogs/utility.py +++ /dev/null @@ -1,142 +0,0 @@ -import discord -from discord.ext import commands -from utils.config_manager import ColorManager, load_config -from utils.db_manager import add_history, add_feedback -from utils.helper import fetch_latency, text_to_speech -import os -import asyncio -from deep_translator import GoogleTranslator - -class Utility(commands.Cog): - def __init__(self, bot): - self.bot = bot - self.config = load_config() - self.color_manager = ColorManager(self.config) - - @commands.command() - async def ping(self, ctx): - add_history(ctx.author.id, "ping") - latency = fetch_latency(self.bot) - embed = discord.Embed( - title="Bot Latency", - description=f"The current bot latency is approximately `{latency}ms`", - color=self.color_manager.get_color("Blue") - ) - embed.set_footer( - text=self.config["defaults"]["footer_text"], - icon_url=self.config["defaults"]["footer_icon"] - ) - await ctx.send(embed=embed) - - @commands.command() - async def profile(self, ctx, member: discord.Member = None): - member = member or ctx.author - add_history(ctx.author.id, "profile", [str(member.id)]) - - embed = discord.Embed( - title=f"{member.name}'s Profile", - description="User's public Discord information", - color=self.color_manager.get_color("Blue") - ) - embed.add_field(name="Display Name", value=member.display_name, inline=True) - embed.add_field(name="User ID", value=member.id, inline=True) - embed.add_field(name="Account Created", value=member.created_at.strftime("%d/%m/%y %H:%M:%S"), inline=True) - embed.add_field(name="Joined Server", value=member.joined_at.strftime("%d/%m/%y %H:%M:%S"), inline=True) - embed.add_field(name="Top Role", value=member.top_role.mention, inline=True) - embed.add_field(name="Status", value=str(member.status).title(), inline=True) - - if member.avatar: - embed.set_thumbnail(url=member.avatar.url) - - await ctx.send(embed=embed) - - @commands.command() - async def feedback(self, ctx, *, message): - add_history(ctx.author.id, "feedback", [message]) - if add_feedback(str(ctx.author.id), message): - embed = discord.Embed( - title="Feedback Received", - description="Thank you for your feedback!", - color=self.color_manager.get_color("Green") - ) - else: - embed = discord.Embed( - title="Feedback Error", - description="There was an error submitting your feedback. Please try again later.", - color=self.color_manager.get_color("Red") - ) - - embed.set_footer( - text=self.config["defaults"]["footer_text"], - icon_url=self.config["defaults"]["footer_icon"] - ) - await ctx.send(embed=embed) - - @commands.command() - async def tts(self, ctx, *, text): - add_history(ctx.author.id, "tts", [text]) - if not ctx.author.voice: - await ctx.send("You need to be in a voice channel to use this command.") - return - - output_file = f"./temp/audio/tts_{ctx.message.id}.mp3" - - try: - text_to_speech(text, output_file, self.config.get("tts_mode", "normal")) - except Exception as e: - await ctx.send(f"An error occurred while generating the TTS: {str(e)}") - return - - voice_channel = ctx.author.voice.channel - if ctx.voice_client is None: - vc = await voice_channel.connect() - else: - vc = ctx.voice_client - - if vc.is_playing(): - vc.stop() - - vc.play( - discord.FFmpegPCMAudio(source=output_file), - after=lambda e: asyncio.run_coroutine_threadsafe(vc.disconnect(), self.bot.loop) - ) - - while vc.is_playing(): - await asyncio.sleep(1) - - if os.path.exists(output_file): - os.remove(output_file) - - embed = discord.Embed( - title="TTS Completed", - description=f"Successfully played TTS in {voice_channel.mention}", - color=self.color_manager.get_color("Blue") - ) - embed.set_footer( - text=self.config["defaults"]["footer_text"], - icon_url=self.config["defaults"]["footer_icon"] - ) - await ctx.send(embed=embed) - - @commands.command() - async def translate(self, ctx, *, text): - add_history(ctx.author.id, "translate", [text]) - try: - translator = GoogleTranslator(source="auto", target="en") - translated_text = translator.translate(text) - - embed = discord.Embed( - title="Translation", - description=translated_text, - color=self.color_manager.get_color("Blue") - ) - embed.set_footer( - text=self.config["defaults"]["footer_text"], - icon_url=self.config["defaults"]["footer_icon"] - ) - await ctx.send(embed=embed) - except Exception as e: - await ctx.send(f"An error occurred during translation: {str(e)}") - -async def setup(bot): - await bot.add_cog(Utility(bot)) \ No newline at end of file diff --git a/BotUpdate/config.json b/BotUpdate/config.json deleted file mode 100644 index a2c15ac..0000000 --- a/BotUpdate/config.json +++ /dev/null @@ -1,39 +0,0 @@ -{ - "defaults": { - "prefix": "?", - "footer_text": "This bot is created and hosted by Nerd bear", - "footer_icon": "https://as2.ftcdn.net/v2/jpg/01/17/00/87/1000_F_117008730_0Dg5yniuxPQLz3shrJvLIeBsPfPRBSE1.jpg" - }, - - "bot_version": "0.4.6", - "bot_name": "Memo", - "tts_mode":"fast", - "log_channel_id": "1290060885485948950", - "tts_detector_factory_seed": "0", - "token": "token", - - "colors": { - "Red": "#FFB3BA", - "Coral": "#FFCCB6", - "Orange": "#FFE5B4", - "Gold": "#FFF1B5", - "Yellow": "#FFFFD1", - "Lime": "#DCFFB8", - "Green": "#BAFFC9", - "Teal": "#B5EAD7", - "Cyan": "#C7F2FF", - "Blue": "#B5DEFF", - "Navy": "#C5CAE9", - "Purple": "#D0B8FF", - "Magenta": "#F2B5D4", - "Pink": "#FFCCE5", - "Gray": "#E0E0E0", - "Lavender": "#E6E6FA" - }, - - "guilds": { - "1288144110880030795": { - "prefix": "*" - } - } -} \ No newline at end of file diff --git a/BotUpdate/data/crac.db b/BotUpdate/data/crac.db deleted file mode 100644 index e69de29..0000000 diff --git a/BotUpdate/logs/bot.log b/BotUpdate/logs/bot.log deleted file mode 100644 index e69de29..0000000 diff --git a/BotUpdate/main.py b/BotUpdate/main.py deleted file mode 100644 index 0bca7dc..0000000 --- a/BotUpdate/main.py +++ /dev/null @@ -1,36 +0,0 @@ -import os -import discord -from discord.ext import commands -import json -import logging -from utils.config_manager import load_config - -intents = discord.Intents.all() -config = load_config() - -bot = commands.Bot(command_prefix=config['defaults']['prefix'], intents=intents) - -@bot.event -async def on_ready(): - print(f'Logged in as {bot.user.name} (ID: {bot.user.id})') - print('------') - -async def load_cogs(): - for filename in os.listdir('./cogs'): - if filename.endswith('.py'): - try: - await bot.load_extension(f'cogs.{filename[:-3]}') - print(f'Loaded cog: {filename[:-3]}') - except Exception as e: - print(f'Failed to load cog {filename[:-3]}: {str(e)}') - -async def main(): - logging.basicConfig(filename='logs/bot.log', level=logging.INFO, - format='%(asctime)s:%(levelname)s:%(message)s') - - await load_cogs() - await bot.start(config['token']) - -if __name__ == '__main__': - import asyncio - asyncio.run(main()) \ No newline at end of file diff --git a/BotUpdate/requirements.txt b/BotUpdate/requirements.txt deleted file mode 100644 index 233d67b..0000000 --- a/BotUpdate/requirements.txt +++ /dev/null @@ -1,118 +0,0 @@ -aiohappyeyeballs == 2.4.3 -aiohttp == 3.10.8 -aiosignal == 1.3.1 -aiosqlite == 0.20.0 -annotated-types == 0.7.0 -anyio == 4.6.0 -async-timeout == 4.0.3 -attrs == 24.2.0 -beautifulsoup4 == 4.12.3 -blinker == 1.8.2 -Brotli == 1.1.0 -certifi == 2024.8.30 -cffi == 1.17.1 -charset-normalizer == 3.3.2 -click == 8.1.7 -colorama == 0.4.6 -comtypes == 1.4.7 -cryptography == 43.0.1 -dataclasses-json == 0.6.7 -deep-translator == 1.11.4 -Deprecated == 1.2.14 -discord == 2.3.2 -discord.py == 2.4.0 -disnake == 2.9.2 -distro == 1.9.0 -duckduckgo_search == 6.2.13 -edge-tts == 6.1.12 -fastapi == 0.115.0 -ffmpeg-python == 0.2.0 -Flask == 3.0.3 -Flask-Cors == 5.0.0 -frozenlist == 1.4.1 -future == 1.0.0 -gevent == 24.2.1 -greenlet == 3.1.1 -groq == 0.11.0 -gTTS == 2.5.3 -h11 == 0.14.0 -httpcore == 1.0.5 -httpx == 0.27.2 -idna == 3.10 -itsdangerous == 2.2.0 -Jinja2 == 3.1.4 -joblib == 1.4.2 -jsonpatch == 1.33 -jsonpointer == 3.0.0 -langchain == 0.3.1 -langchain-community == 0.3.1 -langchain-core == 0.3.6 -langchain-groq == 0.2.0 -langchain-ollama == 0.2.0 -langchain-text-splitter == 0.3.0 -langdetect == 1.0.9 -langsmith == 0.1.129 -lxml == 5.3.0 -lyrics-extractor == 3.0.1 -lyricsgenius == 3.0.1 -markdown-it-py == 3.0.0 -MarkupSafe == 2.1.5 -marshmallow == 3.22.0 -mdurl == 0.1.2 -multidict == 6.1.0 -mutagen == 1.47.0 -mypy-extensions == 1.0.0 -nltk == 3.9.1 -numpy == 1.26.4 -ollama == 0.3.3 -orjson == 3.10.7 -packaging == 24.1 -pillow == 10.4.0 -primp == 0.6.3 -pycparser == 2.22 -pycryptodomex == 3.20.0 -pydantic == 2.9.2 -pydantic-settings == 2.5.2 -pydantic_core == 2.23.4 -PyGithub == 2.4.0 -Pygments == 2.18.0 -PyJWT == 2.9.0 -PyNaCl == 1.5.0 -pypiwin32 == 223 -PySide6 == 6.7.3 -PySide6_Addons == 6.7.3 -PySide6_Essentials == 6.7.3 -python-dotenv == 1.0.1 -pyttsx3 == 2.98 -pytube == 15.0.0 -pywin32 == 306 -PyYAML == 6.0.2 -redis == 5.1.0 -regex == 2024.9.11 -requests == 2.32.3 -rich == 13.8.1 -shiboken6 == 6.7.3 -six == 1.16.0 -sniffio == 1.3.1 -soupsieve == 2.6 -spotipy == 2.24.0 -SQLAlchemy == 2.0.35 -starlette == 0.38.6 -tenacity == 8.5.0 -timeout == 0.1.2 -tqdm == 4.66.5 -typing-inspect == 0.9.0 -typing_extensions == 4.12.2 -urllib3 == 2.2.3 -uvicorn == 0.31.0 -websocket == 0.2.1 -websocket-client == 1.8.0 -websockets == 13.1 -Werkzeug == 3.0.4 -wikipedia == 1.4.0 -wrapt == 1.16.0 -yarl == 1.13.1 -youtube-transcript-api == 0.6.2 -yt-dlp == 2024.9.27 -zope.event == 5.0 -zope.interface == 7.0.3 \ No newline at end of file diff --git a/BotUpdate/utils/__init__.py b/BotUpdate/utils/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/BotUpdate/utils/__pycache__/__init__.cpython-312.pyc b/BotUpdate/utils/__pycache__/__init__.cpython-312.pyc deleted file mode 100644 index b9442b52500225722a4b061aa94d3a525065b454..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 165 zcmX@j%ge<81gZIg=^*+sh(HIQS%4zb87dhx8U0o=6fpsLpFwJVxj0+JB?4C8;r`C7C(JG4b)4d6^~g l@p=W7zc_4i^HWN5QtgUZfrc^yaWRPTk(rT^v4|PS0szMND0Kh; diff --git a/BotUpdate/utils/__pycache__/config_manager.cpython-312.pyc b/BotUpdate/utils/__pycache__/config_manager.cpython-312.pyc deleted file mode 100644 index fc6771738038b19e8242a71d4e118c73c33287b6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3422 zcma)9O>7&-6`t8Yk|HHqqAbgiB5zGOHtm}JiR?muaTWblF-p5)+(L>Pn&mE)Whs)G zU0M-A1%_duF3_YFdLWB5sDK`-LJ2?=ZJ_`?#61)N+5=gskg?^hz4%631zgCNzS-rj zNXJ3D#J-uG_vX!;H{X0S{7Y+V3xY>Zw=aGmAoNfAVLgs|Wp5TL1tcK}C(%4DnI!&{ z!ANS6SecPHnT>N2f0v)_9b)0#b3$tYxsYaS^AMTk`4U>iT749R5`2S) zdNq$X>pf!(%msc{UyQ=Yk1ik;FT?ES5Qg6hdXJq$%h-=J8iDcjBXR^I&1HQ{OdfrN zB=%$0@(j7*6eRJ#U}DT1cx{Nt$hXz=EBp!n%inT6s(>S;W0E`my|LNQOlW#Y95=Ek z#+9TjrqY@iPiIq-7}dmFUr@ZEDyc%C^(nRMoL`iA7m-?8HV`)h?+5-&XARRi6t91E9asQ3+p#@Mw%x5zsoseUi zx^R8&?1X%4Ax5IHh4aCI;N=AgK3`93H!@OGlNYj@l2oCWfu*HrD!M3>U}i;k(`X`Q zJMn>k3Jmo}Aa0`?poU-A3LypwRE*K zTK?wS<+jL<^Jar>jR$x8Y5-!n;~7LB9zM(d$~A~S_bVX( zgfK{5FsBl;kq*7-el>Q;pP};H4#7=3glWLzi*^XgGZOO&yGgyl189D3pRD}9`=n=; zZP+JV9>YH2^Xy0HWA0$D%z^h+_I-AxUM^!B-vZ!!`4I&M(1f6*Bsrz!#5x+Mq5v*Q z)Y76Fy(L>oTr;3Xywo2@I;o!eChgP+%PRd4;UOKg z!A;#-py`E{L-48#ASh@!eiApK#&hVWGe4fWA1_8X@V%KG&*`TuYU>BwR1Dm7JVBUt zp};v`>M6Bu&3=xz)NS5odG^=N5me#_9lvKs&}Z=e(KRNr z5BT=69`->G5A_&CV?WM%ZSN*j3P?utSVHrRgn^-9MelOJ(5%b@V+#gjbMp?UJ3%La z&LufO=Y-d^X-Rb1p6yE9DY?Mbv(gf9>z?s+GEKg1ZZjjDO@O4?Gyr+g2q%vdHf7uX zfVvf%fb%F~Tdbe}6QVeW5mcZic2U-d2>qbWsd6%Ij92FhbG@9Ah>}vYNF;Z-F|eT3 z+zq`|y6Csj!>-;!VlA=Wy>W57D|nClz`Y0UNN+L5i=?7UGNC)8X+E^Un9on3Qb2i} zM+vAs|J=gFtJSv-g83PsXATaBJ6N+f-HScs@lkM^unypc0VMl~kvQwv3ZnoY$~lZF zizjovCmWdG=IA=l?_>WXief;&2!-DA-Domv60puvS{9P3MwAS&@o~_T6Cj#$?1E*0 zEdh&?>uO4}-QGjHOn`tayAK!N{N-Cef2-m?Rqg04F0bd-ljVz{^2^t@JFb^K*Q?%+ z`vZmHwc%o};yb;KL24fMv1(ib6Eg;dzhM=X- zi*5j$rV3dM1PR2U01HQ!0+Sa(t8+h;SJVJDlAuydT9iOd%=xRi?xqAZXs8SIB@nk! z)$6-IQMkHxb+@y>(%HY=`O3EUWZ8Mrn3&FMik6ghw2aIOQl1L8z^=?Ag|)Xp6A z1e*Ukb>NT`HI^ol&QDS!LXT6E=LHkV_E-j{$pFE zOvN`q{013lHAt59(N-#sz^l%KxC@6N=Fb(iJviXb)dZFwSs$+dkOU~7n$TYj_r;#IROhv#?0H!I dict: - try: - with open(config_path, "r") as f: - return json.load(f) - except FileNotFoundError: - print(f"WARNING: Config file not found at {config_path}. Using default configuration.") - return {"default_prefix": "?", "guilds": {}} - except json.JSONDecodeError: - print(f"ERROR: Invalid JSON in config file {config_path}. Using default configuration.") - return {"default_prefix": "?", "guilds": {}} - -def save_config(config: dict, config_path: str = "config.json") -> None: - try: - with open(config_path, "w") as f: - json.dump(config, f, indent=4) - except IOError as e: - print(f"ERROR: Failed to save config to {config_path}: {e}") - -class ColorManager: - def __init__(self, config: dict): - self.colors = config.get("colors", {}) - - def get_color(self, color_name: str) -> int: - if color_name not in self.colors: - raise ValueError(f"Color '{color_name}' not found in configuration") - return int(self.colors[color_name].lstrip("#"), 16) - - def list_colors(self) -> list: - return list(self.colors.keys()) - - def create_color_embed(self, title: str, description: str, color_name: str) -> discord.Embed: - try: - color = self.get_color(color_name) - return discord.Embed(title=title, description=description, color=color) - except ValueError as e: - print(f"ERROR: Failed to create color embed: {e}") - return discord.Embed(title=title, description=description) \ No newline at end of file diff --git a/BotUpdate/utils/db_manager.py b/BotUpdate/utils/db_manager.py deleted file mode 100644 index 5afced8..0000000 --- a/BotUpdate/utils/db_manager.py +++ /dev/null @@ -1,55 +0,0 @@ -import sqlite3 -import datetime -import json - -DB_PATH = "./data/memo.db" - -def get_db_connection(): - return sqlite3.connect(DB_PATH) - -def execute_query(query: str, params: tuple = (), fetch: bool = False): - with get_db_connection() as conn: - cursor = conn.cursor() - cursor.execute(query, params) - if fetch: - return cursor.fetchall() - conn.commit() - return True - -def add_feedback(user_id: str, message: str) -> bool: - datetime_value = datetime.datetime.now().strftime("%S:%M:%H %d/%m/%y") - query = "INSERT INTO feedback VALUES (?, ?, ?)" - return execute_query(query, (user_id, message, datetime_value)) - -def add_history(user_id: int, command: str, arguments: list[str] = ["none"]) -> bool: - args_json = json.dumps(arguments) - datetime_value = datetime.datetime.now().strftime("%S:%M:%H %d/%m/%y") - query = "INSERT INTO history (user_id, command, arguments, datetime) VALUES (?, ?, ?, ?)" - return execute_query(query, (user_id, command, args_json, datetime_value)) - -def get_usage(command_name: str) -> tuple[str, str, str]: - query = "SELECT command_name, arguments, level FROM usage WHERE command_name = ?" - result = execute_query(query, (command_name,), fetch=True) - return result[0] if result else None - -def get_all_usages() -> list[tuple[str, str, str]]: - query = "SELECT command_name, arguments, level FROM usage" - return execute_query(query, fetch=True) - -def add_usage(command_name: str, arguments: list[str], level: int) -> bool: - if not 0 <= level <= 3: - raise ValueError("Level must be between 0 and 3") - query = "INSERT INTO usage (command_name, arguments, level) VALUES (?, ?, ?)" - args_json = json.dumps(arguments) - return execute_query(query, (command_name, args_json, str(level))) - -def create_tables(): - with get_db_connection() as conn: - cursor = conn.cursor() - cursor.execute("CREATE TABLE IF NOT EXISTS feedback (user_id TEXT, message TEXT, datetime TEXT)") - cursor.execute("CREATE TABLE IF NOT EXISTS history (user_id INTEGER, command TEXT, arguments TEXT, datetime TEXT)") - cursor.execute("CREATE TABLE IF NOT EXISTS usage (command_name TEXT, arguments TEXT, level TEXT)") - conn.commit() - -# Call this function when initializing the bot to ensure tables exist -create_tables() \ No newline at end of file diff --git a/BotUpdate/utils/helper.py b/BotUpdate/utils/helper.py deleted file mode 100644 index 89eaf91..0000000 --- a/BotUpdate/utils/helper.py +++ /dev/null @@ -1,54 +0,0 @@ -import datetime -import tempfile -from PIL import Image, ImageDraw, ImageFont -from langdetect import detect, DetectorFactory -from langdetect.lang_detect_exception import LangDetectException -from collections import Counter -from gtts import gTTS -import discord - -def set_langdetect_seed(seed: int = 0): - DetectorFactory.seed = seed - -def text_to_speech(text: str, output_file: str, tts_mode: str) -> None: - try: - slow = tts_mode.lower() == "slow" - language = detect(text) - tts = gTTS(text=text, lang=language, slow=slow) - tts.save(output_file) - except Exception as e: - print(f"ERROR_LOG ~ Text-to-speech conversion failed: {e}") - -def log_info(value: str = "None") -> None: - timestamp = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S") - print(f"{timestamp} [INFO] {value}") - -def fetch_latency(client: discord.Client, shouldRound: bool = True) -> float: - latency = client.latency * 1000 - return round(latency) if shouldRound else latency - -def get_char_image(char: str, bg: str = "white", fg: str = "black", format: str = "png") -> str: - try: - img = Image.new("RGB", (200, 200), color=bg) - d = ImageDraw.Draw(img) - try: - font = ImageFont.truetype("arial.ttf", 120) - except IOError: - font = ImageFont.load_default() - d.text((100, 100), char, font=font, fill=fg, anchor="mm") - with tempfile.NamedTemporaryFile(delete=False, suffix=f".{format}") as temp_file: - img.save(temp_file, format=format.upper()) - temp_file_path = temp_file.name - return temp_file_path - except Exception as e: - print(f"ERROR: Failed to generate character image: {e}") - return None - -def detect_language(text: str) -> str: - try: - detections = [detect(text) for _ in range(5)] - most_common = Counter(detections).most_common(1)[0][0] - return most_common - except LangDetectException as e: - print(f"ERROR: Language detection failed: {e}") - return "unknown" \ No newline at end of file diff --git a/README.md b/README.md index e22bb66..5f726d3 100644 --- a/README.md +++ b/README.md @@ -1,228 +1,175 @@ -# Memo Bot - -## Table of Contents -1. [Introduction](#introduction) -2. [Features](#features) -3. [Commands](#commands) -4. [Installation](#installation) -5. [Usage](#usage) -6. [Configuration](#configuration) -7. [Project Structure](#project-structure) -8. [Dependencies](#dependencies) -9. [Development](#development) -10. [Contributing](#contributing) -11. [License](#license) -12. [Support](#support) -13. [Creator](#creator) - -## Introduction - -Memo Bot is a versatile, all-purpose Discord bot designed to enhance server management and user interaction. Currently in active development, Memo Bot offers a wide range of features from moderation tools to fun commands, making it a valuable addition to any Discord server. - -## Features - -1. **Server Moderation** - - Kick users - - Ban and unban users - - Timeout users - - Nickname management - -2. **User Interaction** - - Character information lookup - - Text-to-speech functionality - - Music playback from YouTube - - User profile display - -3. **Bot Management** - - Customizable bot status - - Start/shutdown commands - - Feedback system - -4. **Message Handling** - - Logging of message edits and deletions - - Inappropriate word detection and filtering - -5. **Voice Channel Integration** - - Join and leave voice channels - - Play audio in voice channels - -6. **Customization** - - Configurable command prefix - - Guild-specific settings - -## Commands - -Here's a detailed list of available commands: - -1. `?help`: Displays a help message with all available commands and their usage. - -2. `?kick @user [reason]`: Kicks the mentioned user from the server. Requires kick permissions. - -3. `?ban @user [reason]`: Bans the mentioned user from the server. Requires ban permissions. - -4. `?unban @user`: Unbans the specified user from the server. Requires ban permissions. - -5. `?timeout @user [reason]`: Timeouts the mentioned user for the specified duration. Requires moderate members permission. - -6. `?shutdown`: Shuts down the bot. Requires administrator permissions. - -7. `?start`: Starts the bot if it's offline. Requires administrator permissions. - -8. `?charinfo [character]`: Provides detailed information about the specified character, including Unicode data. - -9. `?tts [message]`: Converts the given text to speech and plays it in the user's current voice channel. - -10. `?play [youtube_url]`: Plays audio from the specified YouTube video in the user's current voice channel. - -11. `?join`: Makes the bot join the user's current voice channel. - -12. `?leave`: Makes the bot leave the current voice channel. - -13. `?profile @user`: Displays detailed profile information about the mentioned user. - -14. `?nick @user [new_nickname]`: Changes the nickname of the mentioned user. Requires manage nicknames permission. - -15. `?feedback [message]`: Allows users to submit feedback about the bot, which is stored in a database. - -## Installation - -1. Clone the repository: - ``` +# Memo Discord Bot + +
+ Memo Bot Logo + + [![License](https://img.shields.io/badge/license-Apache%202.0-blue.svg)](LICENSE) + [![Version](https://img.shields.io/badge/version-0.4.6-brightgreen.svg)](https://github.com/your-username/Memo-bot/releases) + [![Python](https://img.shields.io/badge/python-3.8+-blue.svg)](https://www.python.org/downloads/) + [![Discord.py](https://img.shields.io/badge/disnake-2.8+-blue.svg)](https://github.com/DisnakeDev/disnake) +
+ +## Overview + +Memo Bot is a versatile Discord bot designed to enhance server management and user interaction. From moderation tools to fun commands, Memo Bot provides a comprehensive suite of features to improve your Discord server experience. + +### Key Features + +- 🛡️ **Server Moderation** + - Kick/Ban management + - User timeouts + - Voice channel controls + - Nickname management + +- 🎵 **Voice Features** + - YouTube music playback + - Text-to-speech (TTS) + - Voice channel controls + +- 🔧 **Utility Commands** + - User profiles + - Server statistics + - Character information lookup + - Language translation + +- 🎮 **Fun Commands** + - Random quotes + - Dad jokes + - Coin flips + - And more! + +## Quick Start + +1. **Installation** + ```bash + # Clone the repository git clone https://github.com/your-username/Memo-bot.git - ``` - -2. Navigate to the project directory: - ``` cd Memo-bot - ``` -3. Install the required dependencies: - ``` + # Install dependencies pip install -r requirements.txt - ``` -4. Set up your Discord bot token: - - Create a new application in the [Discord Developer Portal](https://discord.com/developers/applications) - - Create a bot for your application and copy the bot token - - Create a `config.json` file in the project root and add your token: - ```json - { - "token": "YOUR_BOT_TOKEN_HERE" - } - ``` - -5. Set up the SQLite database: - ``` + # Set up the database python setup/create_feedback_table.py python setup/create_history_table.py python setup/create_usage_table.py ``` -## Usage - -1. Run the bot: +2. **Configuration** + - Create a `config.json` file in the project root: + ```json + { + "defaults": { + "prefix": "?", + "footer_text": "Your footer text", + "footer_icon": "Your footer icon URL" + }, + "bot_version": "0.4.6", + "bot_name": "Memo", + "tts_mode": "fast", + "log_channel_id": "YOUR_LOG_CHANNEL_ID" + } ``` - python launcher.py - ``` - -2. Invite the bot to your Discord server: - - Go to the OAuth2 URL generator in your Discord Developer Portal - - Select the "bot" scope and the necessary permissions - - Use the generated URL to invite the bot to your server - -3. Once the bot is in your server, use `?help` to see all available commands. - -## Configuration - -The `config.json` file contains important settings for the bot: - -```json -{ - "defaults": { - "prefix": "?" - }, - "bot_version": "0.4.5", - "bot_name": "Memo", - "tts_mode": "fast", - "guilds": { - "1288144110880030795": { - "prefix": "*" - } - } -} -``` -- `defaults.prefix`: The default command prefix for the bot. -- `bot_version`: The current version of the bot. -- `bot_name`: The name of the bot. -- `tts_mode`: The mode for text-to-speech functionality ("fast" or "slow"). -- `guilds`: Guild-specific settings, including custom prefixes. - -## Project Structure - -- `main/bot.py`: The main bot file containing command implementations and event handlers. -- `launcher.py`: The entry point for running the bot. -- `db_manager/`: Directory containing database management modules. -- `setup/`: Directory containing database setup scripts. -- `temp/audio/`: Directory for temporary audio files used by the TTS feature. -- `website/`: Directory containing HTML files for the bot's website. +3. **Launch** + ```bash + python launcher.py --token YOUR_BOT_TOKEN + ``` -## Dependencies +## Commands -Memo Bot relies on several Python libraries: +Here's a quick overview of the main commands: -- discord.py: The core library for interacting with the Discord API. -- Pillow: Used for image manipulation in the `charinfo` command. -- gTTS: Google Text-to-Speech library for the TTS feature. -- yt_dlp: YouTube downloader used for the music playback feature. -- rich: Used for console output formatting and logging. -- langdetect: Used for language detection in the TTS feature. +### Moderation +- `?kick @user [reason]` - Kick a user +- `?ban @user [reason]` - Ban a user +- `?timeout @user [reason]` - Timeout a user +- `?mute @user [reason]` - Server mute a user +- `?deafen @user [reason]` - Server deafen a user -For a complete list of dependencies, refer to the `requirements.txt` file. +### Voice & Music +- `?play [youtube_url]` - Play music from YouTube +- `?tts [text]` - Convert text to speech +- `?join` - Join voice channel +- `?leave` - Leave voice channel -## Development +### Utility +- `?profile @user` - View user profile +- `?server` - View server info +- `?translate [text]` - Translate text to English +- `?charinfo [character]` - Get character information -Memo Bot is under active development with nearly daily updates. The development process includes: +### Fun +- `?joke` - Get a random dad joke +- `?quote` - Get quote of the day +- `?coin` - Flip a coin -- Regular feature additions and improvements -- Bug fixes and performance optimizations -- Refactoring for better code organization and maintainability -- Implementation of user feedback and feature requests +For a complete list of commands, use `?help` in Discord. -Future development plans include: -- Implementing a music queue system -- Adding more fun and interactive commands -- Improving error handling and user feedback -- Enhancing the configuration system for more granular control +## Project Structure -## Contributing +``` +Memo-bot/ +├── assets/ # Bot assets (logos, emojis) +├── db_manager/ # Database management modules +├── setup/ # Database setup scripts +├── src/ # Main bot source code +│ ├── bot.py # Core bot implementation +│ └── utils/ # Utility functions +├── temp/ # Temporary files +├── website/ # Bot website files +├── config.json # Bot configuration +├── launcher.py # Bot launcher +├── LICENSE # Apache 2.0 license +└── README.md # Project documentation +``` -We welcome contributions to Memo Bot! Here's how you can contribute: +## Development +### Requirements +- Python 3.8 or higher +- Discord Developer Account +- Required Python packages (see requirements.txt) + +### Core Dependencies +- disnake +- gTTS +- yt_dlp +- rich +- click +- deep-translator +- pillow + +### Contributing 1. Fork the repository -2. Create a new branch for your feature or bug fix -3. Make your changes and commit them with clear, descriptive commit messages -4. Push your changes to your fork -5. Submit a pull request to the main repository +2. Create your feature branch (`git checkout -b feature/AmazingFeature`) +3. Commit your changes (`git commit -m 'Add some AmazingFeature'`) +4. Push to the branch (`git push origin feature/AmazingFeature`) +5. Open a Pull Request -Please ensure your code adheres to the existing style conventions and includes appropriate tests. +## Support -## License +- [Documentation](https://Memo.nerd-bear.org/docs) +- [Issue Tracker](https://github.com/your-username/Memo-bot/issues) +- [Discord Support Server](https://discord.gg/your-invite) +- Email: support@nerd-bear.org -This project is licensed under the Apache License 2.0. See the [LICENSE](LICENSE) file for the full license text. +## License -## Support +This project is licensed under the Apache License 2.0 - see the [LICENSE](LICENSE) file for details. -If you need help or want to report a bug, you can: +## Acknowledgments -1. Open an issue on this GitHub repository -2. Join our support Discord server (link to be added) -3. Contact us via email at Memo@nerd-bear.org +- [DisnakeDev](https://github.com/DisnakeDev/disnake) for the Discord API wrapper +- All contributors who have helped improve Memo Bot -## Creator +## Authors -Memo Bot is created and maintained by Nerd Bear. For more information about the creator and other projects, visit [nerd-bear.org](https://nerd-bear.org). +- **Nerd Bear** - *Initial work and maintenance* - [nerd-bear](https://github.com/nerd-bear) --- -Memo Bot © 2024 by Nerd Bear. All rights reserved. \ No newline at end of file +
+ Made with ❤️ by Nerd Bear
+ © 2024 Memo Bot. All rights reserved. +
\ No newline at end of file diff --git a/assets/emojis/webp/codebase.md b/assets/emojis/webp/codebase.md deleted file mode 100644 index 3274c74..0000000 --- a/assets/emojis/webp/codebase.md +++ /dev/null @@ -1,40 +0,0 @@ -# 0_percent_battery.webp - -This is a binary file of the type: Image - -# 25_percent_battery_blinking.webp - -This is a binary file of the type: Image - -# 50_percent_battery.webp - -This is a binary file of the type: Image - -# 75_percent_battery_blinking.webp - -This is a binary file of the type: Image - -# 75_percent_battery.webp - -This is a binary file of the type: Image - -# 100_percent_battery.webp - -This is a binary file of the type: Image - -# active_developer.webp - -This is a binary file of the type: Image - -# help_heart.webp - -This is a binary file of the type: Image - -# linked.webp - -This is a binary file of the type: Image - -# verified_developer.webp - -This is a binary file of the type: Image - diff --git a/changes.md b/changes.md deleted file mode 100644 index 53ca75f..0000000 --- a/changes.md +++ /dev/null @@ -1,7 +0,0 @@ -# Memo Bot Changelog - -## Latest Updates - -+ Added restart command -+ Updated shutdown command to disconect from all voice channels -+ Updated start command to set RPC to the help info \ No newline at end of file diff --git a/codebase.md b/codebase.md deleted file mode 100644 index 49cda20..0000000 --- a/codebase.md +++ /dev/null @@ -1,10196 +0,0 @@ -# .gitignore - -``` -.vscode -``` - -# assets\emojis\gif\0_percent_battery.gif - -This is a binary file of the type: Image - -# assets\emojis\gif\25_percent_battery_blinking.gif - -This is a binary file of the type: Image - -# assets\emojis\gif\50_percent_battery.gif - -This is a binary file of the type: Image - -# assets\emojis\gif\75_percent_battery_blinking.gif - -This is a binary file of the type: Image - -# assets\emojis\gif\75_percent_battery.gif - -This is a binary file of the type: Image - -# assets\emojis\gif\100_percent_battery.gif - -This is a binary file of the type: Image - -# assets\emojis\gif\active_developer.gif - -This is a binary file of the type: Image - -# assets\emojis\gif\help_heart.gif - -This is a binary file of the type: Image - -# assets\emojis\gif\linked.gif - -This is a binary file of the type: Image - -# assets\emojis\gif\verified_developer.gif - -This is a binary file of the type: Image - -# assets\emojis\webp\0_percent_battery.webp - -This is a binary file of the type: Image - -# assets\emojis\webp\25_percent_battery_blinking.webp - -This is a binary file of the type: Image - -# assets\emojis\webp\50_percent_battery.webp - -This is a binary file of the type: Image - -# assets\emojis\webp\75_percent_battery_blinking.webp - -This is a binary file of the type: Image - -# assets\emojis\webp\75_percent_battery.webp - -This is a binary file of the type: Image - -# assets\emojis\webp\100_percent_battery.webp - -This is a binary file of the type: Image - -# assets\emojis\webp\active_developer.webp - -This is a binary file of the type: Image - -# assets\emojis\webp\help_heart.webp - -This is a binary file of the type: Image - -# assets\emojis\webp\linked.webp - -This is a binary file of the type: Image - -# assets\emojis\webp\verified_developer.webp - -This is a binary file of the type: Image - -# assets\logo\editable\variation-1.ai - -This is a binary file of the type: Binary - -# assets\logo\editable\variation-2.ai - -This is a binary file of the type: Binary - -# assets\logo\editable\variation-3.ai - -This is a binary file of the type: Binary - -# assets\logo\editable\variation-4.ai - -This is a binary file of the type: Binary - -# assets\logo\png\bear.png - -This is a binary file of the type: Image - -# assets\logo\png\padded_bear.png - -This is a binary file of the type: Image - -# assets\logo\svg\variation-1.svg - -This is a file of the type: SVG Image - -# assets\logo\svg\variation-2.svg - -This is a file of the type: SVG Image - -# assets\logo\svg\variation-3.svg - -This is a file of the type: SVG Image - -# assets\logo\svg\variation-4.svg - -This is a file of the type: SVG Image - -# BotUpdate\cogs\__init__.py - -```py - -``` - -# BotUpdate\cogs\admin.py - -```py -import discord -from discord.ext import commands -from utils.config_manager import ColorManager, load_config -from utils.db_manager import add_history -import sys -import os - -class Admin(commands.Cog): - def __init__(self, bot): - self.bot = bot - self.config = load_config() - self.color_manager = ColorManager(self.config) - - @commands.command() - @commands.has_permissions(administrator=True) - async def shutdown(self, ctx): - add_history(ctx.author.id, "shutdown") - embed = discord.Embed( - title=f"{self.config['bot_name']} Shutting Down", - description=f"{self.config['bot_name']} is now offline.", - color=self.color_manager.get_color("Red"), - timestamp=ctx.message.created_at - ) - embed.set_footer( - text=self.config["defaults"]["footer_text"], - icon_url=self.config["defaults"]["footer_icon"] - ) - await ctx.send(embed=embed) - await self.bot.close() - - @commands.command() - @commands.has_permissions(administrator=True) - async def start(self, ctx): - add_history(ctx.author.id, "start") - await self.bot.change_presence( - status=discord.Status.online, - activity=discord.Game(name=f"Run {self.config['defaults']['prefix']}help for help") - ) - embed = discord.Embed( - title=f"{self.config['bot_name']} Starting Up", - description=f"{self.config['bot_name']} is now online.", - color=self.color_manager.get_color("Blue"), - timestamp=ctx.message.created_at - ) - embed.set_footer( - text=self.config["defaults"]["footer_text"], - icon_url=self.config["defaults"]["footer_icon"] - ) - await ctx.send(embed=embed) - - @commands.command() - @commands.has_permissions(administrator=True) - async def restart(self, ctx): - add_history(ctx.author.id, "restart") - embed = discord.Embed( - title="Restarting", - description="The restart will take approximately 10 to 30 seconds on average.", - color=self.color_manager.get_color("Blue") - ) - embed.set_footer( - text=self.config["defaults"]["footer_text"], - icon_url=self.config["defaults"]["footer_icon"] - ) - await ctx.send(embed=embed) - await self.bot.close() - os.execv(sys.executable, ['python'] + sys.argv) - -async def setup(bot): - await bot.add_cog(Admin(bot)) -``` - -# BotUpdate\cogs\events.py - -```py -import discord -from discord.ext import commands -from utils.config_manager import ColorManager, load_config -import datetime - -class Events(commands.Cog): - def __init__(self, bot): - self.bot = bot - self.config = load_config() - self.color_manager = ColorManager(self.config) - - @commands.Cog.listener() - async def on_message_delete(self, message): - if message.author == self.bot.user: - return - - log_channel_id = self.config.get("log_channel_id") - if not log_channel_id: - return - - channel = self.bot.get_channel(int(log_channel_id)) - if not channel: - return - - embed = discord.Embed( - title="Message Deleted", - color=self.color_manager.get_color("Red"), - timestamp=datetime.datetime.utcnow() - ) - embed.add_field(name="Author", value=message.author.mention) - embed.add_field(name="Channel", value=message.channel.mention) - embed.add_field(name="Content", value=message.content or "No content") - - if message.attachments: - embed.add_field( - name="Attachments", - value="\n".join([a.url for a in message.attachments]) - ) - - embed.set_footer( - text=self.config["defaults"]["footer_text"], - icon_url=self.config["defaults"]["footer_icon"] - ) - await channel.send(embed=embed) - - @commands.Cog.listener() - async def on_message_edit(self, before, after): - if before.author == self.bot.user: - return - - if before.content == after.content: - return - - log_channel_id = self.config.get("log_channel_id") - if not log_channel_id: - return - - channel = self.bot.get_channel(int(log_channel_id)) - if not channel: - return - - embed = discord.Embed( - title="Message Edited", - color=self.color_manager.get_color("Orange"), - timestamp=datetime.datetime.utcnow() - ) - embed.add_field(name="Author", value=before.author.mention) - embed.add_field(name="Channel", value=before.channel.mention) - embed.add_field(name="Before", value=before.content or "No content") - embed.add_field(name="After", value=after.content or "No content") - - embed.set_footer( - text=self.config["defaults"]["footer_text"], - icon_url=self.config["defaults"]["footer_icon"] - ) - await channel.send(embed=embed) - - @commands.Cog.listener() - async def on_command_error(self, ctx, error): - if isinstance(error, commands.CommandNotFound): - return - - if isinstance(error, commands.MissingPermissions): - await ctx.send("You don't have the required permissions to use this command.") - return - - if isinstance(error, commands.MissingRequiredArgument): - await ctx.send(f"Missing required argument: {error.param}") - return - - # For other types of errors, you might want to log them - print(f"An error occurred: {error}") - -async def setup(bot): - await bot.add_cog(Events(bot)) -``` - -# BotUpdate\cogs\fun.py - -```py -import discord -from discord.ext import commands -from utils.config_manager import ColorManager, load_config -from utils.db_manager import add_history -from utils.helper import get_char_image -import unicodedata -import os - -class Fun(commands.Cog): - def __init__(self, bot): - self.bot = bot - self.config = load_config() - self.color_manager = ColorManager(self.config) - - @commands.command() - async def charinfo(self, ctx, *, characters: str): - add_history(ctx.author.id, "charinfo", [characters]) - if len(characters) > 1: - await ctx.send("Please provide only one character for information.") - return - - char = characters[0] - unicode_value = ord(char) - char_name = unicodedata.name(char, "Could not find name!") - char_category = unicodedata.category(char) - - unicode_escape = f"\\u{unicode_value:04x}" - unicode_escape_full = f"\\U{unicode_value:08x}" - python_escape = repr(char) - - embed = discord.Embed( - color=self.color_manager.get_color("Blue"), - title="Character info", - description=f"Information on character: {char}" - ) - - embed.add_field(name="Original character", value=char, inline=True) - embed.add_field(name="Character name", value=char_name, inline=True) - embed.add_field(name="Character category", value=char_category, inline=True) - embed.add_field(name="Unicode value", value=f"U+{unicode_value:04X}", inline=True) - embed.add_field(name="Unicode escape", value=unicode_escape, inline=True) - embed.add_field(name="Full Unicode escape", value=unicode_escape_full, inline=True) - embed.add_field(name="Python escape", value=python_escape, inline=True) - - embed.set_footer( - text=self.config["defaults"]["footer_text"], - icon_url=self.config["defaults"]["footer_icon"] - ) - - image_path = get_char_image(char) - - if image_path: - file = discord.File(image_path, filename="character.png") - embed.set_thumbnail(url="attachment://character.png") - await ctx.send(embed=embed, file=file) - os.remove(image_path) - else: - await ctx.send(embed=embed) - -async def setup(bot): - await bot.add_cog(Fun(bot)) -``` - -# BotUpdate\cogs\md.md - -```md -### Approach to Developing a 2FA Email Sending Project Using Custom Domain Email - -#### **Objective:** -You aim to develop a test project that sends Two-Factor Authentication (2FA) emails using Python, leveraging a custom email address with a custom domain (`nerd-bear.org`). The current setup involves GoDaddy for domain registration, Cloudflare for DNS management, and free email forwarding to a Gmail account. However, this setup does not support sending emails directly from the custom domain email address. - -#### **Requirements:** -- **Primary Requirement:** Send emails from the custom domain email address (`nerd-bear.org`) for the 2FA project. -- **Constraints:** The current setup does not support sending emails directly from the custom domain email address. - -#### **Proposed Solution:** - -1. **Set Up a Custom Email Service:** - - **Option 1: Use a Third-Party Email Service Provider (ESP):** - - **Service Providers:** Consider using services like **SendGrid**, **Mailgun**, or **Amazon SES** (Simple Email Service). - - **Steps:** - 1. **Sign Up:** Create an account with the chosen ESP. - 2. **Domain Verification:** Verify your domain (`nerd-bear.org`) with the ESP to ensure you can send emails from it. This usually involves adding DNS records provided by the ESP to your Cloudflare DNS settings. - 3. **API Integration:** Use the ESP's API to send emails from your Python application. Most ESPs provide Python libraries or SDKs for easy integration. - 4. **Custom Email Address:** Configure the ESP to send emails from your custom domain email address (e.g., `noreply@nerd-bear.org`). - - **Example with SendGrid:** - \`\`\`python - from sendgrid import SendGridAPIClient - from sendgrid.helpers.mail import Mail - - message = Mail( - from_email='noreply@nerd-bear.org', - to_emails='user@example.com', - subject='Your 2FA Code', - html_content='Your code is: 123456') - - try: - sg = SendGridAPIClient('YOUR_SENDGRID_API_KEY') - response = sg.send(message) - print(response.status_code, response.body, response.headers) - except Exception as e: - print(e.message) - \`\`\` - - - **Option 2: Set Up a Mail Server:** - - **Service Providers:** Consider using **Mailcow**, **Mailu**, or **Postfix/Dovecot** to set up your own mail server. - - **Steps:** - 1. **Server Setup:** Deploy a mail server on a VPS (Virtual Private Server) or a dedicated server. - 2. **Domain Configuration:** Configure the mail server to use your custom domain (`nerd-bear.org`). This involves setting up DNS records (MX, SPF, DKIM, DMARC) in Cloudflare. - 3. **Email Sending:** Use Python's `smtplib` library to send emails from your custom domain email address. - - **Example with SMTP:** - \`\`\`python - import smtplib - from email.mime.text import MIMEText - - msg = MIMEText('Your code is: 123456') - msg['Subject'] = 'Your 2FA Code' - msg['From'] = 'noreply@nerd-bear.org' - msg['To'] = 'user@example.com' - - with smtplib.SMTP('your-mail-server.com', 587) as server: - server.starttls() - server.login('noreply@nerd-bear.org', 'your-email-password') - server.sendmail('noreply@nerd-bear.org', 'user@example.com', msg.as_string()) - \`\`\` - -2. **Leverage Existing Infrastructure:** - - **Cloudflare:** Ensure that Cloudflare is configured to allow outbound SMTP traffic if you choose to set up your own mail server. - - **GoDaddy:** Verify that GoDaddy is correctly pointing to Cloudflare for DNS management. - -3. **Security Considerations:** - - **API Keys:** If using an ESP, store API keys securely (e.g., environment variables, encrypted storage). - - **Email Authentication:** Ensure that your emails are authenticated using SPF, DKIM, and DMARC to prevent them from being marked as spam. - -#### **Conclusion:** -The best approach depends on your specific needs, such as the volume of emails, budget, and technical expertise. Using a third-party ESP like SendGrid or Mailgun is generally easier and more scalable, while setting up your own mail server offers more control but requires more technical effort. - -``` - -# BotUpdate\cogs\moderation.py - -```py -import discord -from discord.ext import commands -from utils.config_manager import ColorManager, load_config -from utils.db_manager import add_history -import datetime - -class Moderation(commands.Cog): - def __init__(self, bot): - self.bot = bot - self.config = load_config() - self.color_manager = ColorManager(self.config) - - @commands.command() - @commands.has_permissions(kick_members=True) - async def kick(self, ctx, member: discord.Member, *, reason="No reason provided"): - add_history(ctx.author.id, "kick", [str(member.id), reason]) - try: - await member.send( - embed=discord.Embed( - title="You've Been Kicked", - description=f"You were kicked from {ctx.guild.name}.\nReason: {reason}", - color=self.color_manager.get_color("Red") - ) - ) - except: - pass # Unable to DM the user - - await member.kick(reason=reason) - embed = discord.Embed( - title="User Kicked", - description=f"{member.mention} has been kicked.\nReason: {reason}", - color=self.color_manager.get_color("Blue") - ) - embed.set_footer( - text=self.config["defaults"]["footer_text"], - icon_url=self.config["defaults"]["footer_icon"] - ) - await ctx.send(embed=embed) - - @commands.command() - @commands.has_permissions(ban_members=True) - async def ban(self, ctx, member: discord.Member, *, reason="No reason provided"): - add_history(ctx.author.id, "ban", [str(member.id), reason]) - try: - await member.send( - embed=discord.Embed( - title="You've Been Banned", - description=f"You were banned from {ctx.guild.name}.\nReason: {reason}", - color=self.color_manager.get_color("Red") - ) - ) - except: - pass # Unable to DM the user - - await member.ban(reason=reason) - embed = discord.Embed( - title="User Banned", - description=f"{member.mention} has been banned.\nReason: {reason}", - color=self.color_manager.get_color("Blue") - ) - embed.set_footer( - text=self.config["defaults"]["footer_text"], - icon_url=self.config["defaults"]["footer_icon"] - ) - await ctx.send(embed=embed) - - @commands.command() - @commands.has_permissions(ban_members=True) - async def unban(self, ctx, *, member): - add_history(ctx.author.id, "unban", [member]) - banned_users = await ctx.guild.bans() - member_name, member_discriminator = member.split('#') - - for ban_entry in banned_users: - user = ban_entry.user - if (user.name, user.discriminator) == (member_name, member_discriminator): - await ctx.guild.unban(user) - embed = discord.Embed( - title="User Unbanned", - description=f"{user.mention} has been unbanned.", - color=self.color_manager.get_color("Blue") - ) - embed.set_footer( - text=self.config["defaults"]["footer_text"], - icon_url=self.config["defaults"]["footer_icon"] - ) - await ctx.send(embed=embed) - return - - await ctx.send(f"User {member} not found in ban list.") - - @commands.command() - @commands.has_permissions(manage_messages=True) - async def timeout(self, ctx, member: discord.Member, duration: int, unit, *, reason="No reason provided"): - add_history(ctx.author.id, "timeout", [str(member.id), str(duration), unit, reason]) - time_units = {"s": "seconds", "m": "minutes", "h": "hours", "d": "days"} - if unit not in time_units: - await ctx.send("Invalid time unit. Use 's' for seconds, 'm' for minutes, 'h' for hours, or 'd' for days.") - return - - time_delta = datetime.timedelta(**{time_units[unit]: duration}) - await member.timeout(time_delta, reason=reason) - - embed = discord.Embed( - title="User Timed Out", - description=f"{member.mention} has been timed out for {duration}{unit}.\nReason: {reason}", - color=self.color_manager.get_color("Blue") - ) - embed.set_footer( - text=self.config["defaults"]["footer_text"], - icon_url=self.config["defaults"]["footer_icon"] - ) - await ctx.send(embed=embed) - - try: - await member.send( - embed=discord.Embed( - title="You were timed out", - description=f"You have been timed out in {ctx.guild.name} for {duration}{unit}.\nReason: {reason}", - color=self.color_manager.get_color("Red") - ) - ) - except: - pass # Unable to DM the user - -async def setup(bot): - await bot.add_cog(Moderation(bot)) -``` - -# BotUpdate\cogs\music.py - -```py -import discord -from discord.ext import commands -from utils.config_manager import ColorManager, load_config -from utils.db_manager import add_history -import yt_dlp - -class Music(commands.Cog): - def __init__(self, bot): - self.bot = bot - self.config = load_config() - self.color_manager = ColorManager(self.config) - - @commands.command() - async def join(self, ctx): - add_history(ctx.author.id, "join") - if ctx.author.voice is None: - await ctx.send("You need to be in a voice channel to use this command.") - return - - channel = ctx.author.voice.channel - await channel.connect() - await ctx.send(f"Joined {channel.name}") - - @commands.command() - async def leave(self, ctx): - add_history(ctx.author.id, "leave") - if ctx.voice_client is None: - await ctx.send("I'm not in a voice channel.") - return - - await ctx.voice_client.disconnect() - await ctx.send("Left the voice channel") - - @commands.command() - async def play(self, ctx, *, query): - add_history(ctx.author.id, "play", [query]) - if ctx.voice_client is None: - if ctx.author.voice: - await ctx.author.voice.channel.connect() - else: - await ctx.send("You are not connected to a voice channel.") - return - - async with ctx.typing(): - try: - with yt_dlp.YoutubeDL({"format": "bestaudio", "noplaylist": "True"}) as ydl: - info = ydl.extract_info(query, download=False) - URL = info["url"] - title = info["title"] - except Exception as e: - await ctx.send(f"An error occurred: {str(e)}") - return - - if ctx.voice_client.is_playing(): - ctx.voice_client.stop() - - FFMPEG_OPTIONS = { - 'before_options': '-reconnect 1 -reconnect_streamed 1 -reconnect_delay_max 5', - 'options': '-vn' - } - audio_source = discord.FFmpegPCMAudio(URL, **FFMPEG_OPTIONS) - ctx.voice_client.play(audio_source) - - embed = discord.Embed( - title="Now Playing", - description=f"Now playing: {title}", - color=self.color_manager.get_color("Blue") - ) - embed.set_footer( - text=self.config["defaults"]["footer_text"], - icon_url=self.config["defaults"]["footer_icon"] - ) - await ctx.send(embed=embed) - -async def setup(bot): - await bot.add_cog(Music(bot)) -``` - -# BotUpdate\cogs\utility.py - -```py -import discord -from discord.ext import commands -from utils.config_manager import ColorManager, load_config -from utils.db_manager import add_history, add_feedback -from utils.helper import fetch_latency, text_to_speech -import os -import asyncio -from deep_translator import GoogleTranslator - -class Utility(commands.Cog): - def __init__(self, bot): - self.bot = bot - self.config = load_config() - self.color_manager = ColorManager(self.config) - - @commands.command() - async def ping(self, ctx): - add_history(ctx.author.id, "ping") - latency = fetch_latency(self.bot) - embed = discord.Embed( - title="Bot Latency", - description=f"The current bot latency is approximately `{latency}ms`", - color=self.color_manager.get_color("Blue") - ) - embed.set_footer( - text=self.config["defaults"]["footer_text"], - icon_url=self.config["defaults"]["footer_icon"] - ) - await ctx.send(embed=embed) - - @commands.command() - async def profile(self, ctx, member: discord.Member = None): - member = member or ctx.author - add_history(ctx.author.id, "profile", [str(member.id)]) - - embed = discord.Embed( - title=f"{member.name}'s Profile", - description="User's public Discord information", - color=self.color_manager.get_color("Blue") - ) - embed.add_field(name="Display Name", value=member.display_name, inline=True) - embed.add_field(name="User ID", value=member.id, inline=True) - embed.add_field(name="Account Created", value=member.created_at.strftime("%d/%m/%y %H:%M:%S"), inline=True) - embed.add_field(name="Joined Server", value=member.joined_at.strftime("%d/%m/%y %H:%M:%S"), inline=True) - embed.add_field(name="Top Role", value=member.top_role.mention, inline=True) - embed.add_field(name="Status", value=str(member.status).title(), inline=True) - - if member.avatar: - embed.set_thumbnail(url=member.avatar.url) - - await ctx.send(embed=embed) - - @commands.command() - async def feedback(self, ctx, *, message): - add_history(ctx.author.id, "feedback", [message]) - if add_feedback(str(ctx.author.id), message): - embed = discord.Embed( - title="Feedback Received", - description="Thank you for your feedback!", - color=self.color_manager.get_color("Green") - ) - else: - embed = discord.Embed( - title="Feedback Error", - description="There was an error submitting your feedback. Please try again later.", - color=self.color_manager.get_color("Red") - ) - - embed.set_footer( - text=self.config["defaults"]["footer_text"], - icon_url=self.config["defaults"]["footer_icon"] - ) - await ctx.send(embed=embed) - - @commands.command() - async def tts(self, ctx, *, text): - add_history(ctx.author.id, "tts", [text]) - if not ctx.author.voice: - await ctx.send("You need to be in a voice channel to use this command.") - return - - output_file = f"./temp/audio/tts_{ctx.message.id}.mp3" - - try: - text_to_speech(text, output_file, self.config.get("tts_mode", "normal")) - except Exception as e: - await ctx.send(f"An error occurred while generating the TTS: {str(e)}") - return - - voice_channel = ctx.author.voice.channel - if ctx.voice_client is None: - vc = await voice_channel.connect() - else: - vc = ctx.voice_client - - if vc.is_playing(): - vc.stop() - - vc.play( - discord.FFmpegPCMAudio(source=output_file), - after=lambda e: asyncio.run_coroutine_threadsafe(vc.disconnect(), self.bot.loop) - ) - - while vc.is_playing(): - await asyncio.sleep(1) - - if os.path.exists(output_file): - os.remove(output_file) - - embed = discord.Embed( - title="TTS Completed", - description=f"Successfully played TTS in {voice_channel.mention}", - color=self.color_manager.get_color("Blue") - ) - embed.set_footer( - text=self.config["defaults"]["footer_text"], - icon_url=self.config["defaults"]["footer_icon"] - ) - await ctx.send(embed=embed) - - @commands.command() - async def translate(self, ctx, *, text): - add_history(ctx.author.id, "translate", [text]) - try: - translator = GoogleTranslator(source="auto", target="en") - translated_text = translator.translate(text) - - embed = discord.Embed( - title="Translation", - description=translated_text, - color=self.color_manager.get_color("Blue") - ) - embed.set_footer( - text=self.config["defaults"]["footer_text"], - icon_url=self.config["defaults"]["footer_icon"] - ) - await ctx.send(embed=embed) - except Exception as e: - await ctx.send(f"An error occurred during translation: {str(e)}") - -async def setup(bot): - await bot.add_cog(Utility(bot)) -``` - -# BotUpdate\config.json - -```json -{ - "defaults": { - "prefix": "?", - "footer_text": "This bot is created and hosted by Nerd bear", - "footer_icon": "https://as2.ftcdn.net/v2/jpg/01/17/00/87/1000_F_117008730_0Dg5yniuxPQLz3shrJvLIeBsPfPRBSE1.jpg" - }, - - "bot_version": "0.4.6", - "bot_name": "Memo", - "tts_mode":"fast", - "log_channel_id": "1290060885485948950", - "tts_detector_factory_seed": "0", - "token": "token", - - "colors": { - "Red": "#FFB3BA", - "Coral": "#FFCCB6", - "Orange": "#FFE5B4", - "Gold": "#FFF1B5", - "Yellow": "#FFFFD1", - "Lime": "#DCFFB8", - "Green": "#BAFFC9", - "Teal": "#B5EAD7", - "Cyan": "#C7F2FF", - "Blue": "#B5DEFF", - "Navy": "#C5CAE9", - "Purple": "#D0B8FF", - "Magenta": "#F2B5D4", - "Pink": "#FFCCE5", - "Gray": "#E0E0E0", - "Lavender": "#E6E6FA" - }, - - "guilds": { - "1288144110880030795": { - "prefix": "*" - } - } -} -``` - -# BotUpdate\data\crac.db - -```db - -``` - -# BotUpdate\logs\bot.log - -```log - -``` - -# BotUpdate\main.py - -```py -import os -import discord -from discord.ext import commands -import json -import logging -from utils.config_manager import load_config - -intents = discord.Intents.all() -config = load_config() - -bot = commands.Bot(command_prefix=config['defaults']['prefix'], intents=intents) - -@bot.event -async def on_ready(): - print(f'Logged in as {bot.user.name} (ID: {bot.user.id})') - print('------') - -async def load_cogs(): - for filename in os.listdir('./cogs'): - if filename.endswith('.py'): - try: - await bot.load_extension(f'cogs.{filename[:-3]}') - print(f'Loaded cog: {filename[:-3]}') - except Exception as e: - print(f'Failed to load cog {filename[:-3]}: {str(e)}') - -async def main(): - logging.basicConfig(filename='logs/bot.log', level=logging.INFO, - format='%(asctime)s:%(levelname)s:%(message)s') - - await load_cogs() - await bot.start(config['token']) - -if __name__ == '__main__': - import asyncio - asyncio.run(main()) -``` - -# BotUpdate\requirements.txt - -```txt -aiohappyeyeballs == 2.4.3 -aiohttp == 3.10.8 -aiosignal == 1.3.1 -aiosqlite == 0.20.0 -annotated-types == 0.7.0 -anyio == 4.6.0 -async-timeout == 4.0.3 -attrs == 24.2.0 -beautifulsoup4 == 4.12.3 -blinker == 1.8.2 -Brotli == 1.1.0 -certifi == 2024.8.30 -cffi == 1.17.1 -charset-normalizer == 3.3.2 -click == 8.1.7 -colorama == 0.4.6 -comtypes == 1.4.7 -cryptography == 43.0.1 -dataclasses-json == 0.6.7 -deep-translator == 1.11.4 -Deprecated == 1.2.14 -discord == 2.3.2 -discord.py == 2.4.0 -disnake == 2.9.2 -distro == 1.9.0 -duckduckgo_search == 6.2.13 -edge-tts == 6.1.12 -fastapi == 0.115.0 -ffmpeg-python == 0.2.0 -Flask == 3.0.3 -Flask-Cors == 5.0.0 -frozenlist == 1.4.1 -future == 1.0.0 -gevent == 24.2.1 -greenlet == 3.1.1 -groq == 0.11.0 -gTTS == 2.5.3 -h11 == 0.14.0 -httpcore == 1.0.5 -httpx == 0.27.2 -idna == 3.10 -itsdangerous == 2.2.0 -Jinja2 == 3.1.4 -joblib == 1.4.2 -jsonpatch == 1.33 -jsonpointer == 3.0.0 -langchain == 0.3.1 -langchain-community == 0.3.1 -langchain-core == 0.3.6 -langchain-groq == 0.2.0 -langchain-ollama == 0.2.0 -langchain-text-splitter == 0.3.0 -langdetect == 1.0.9 -langsmith == 0.1.129 -lxml == 5.3.0 -lyrics-extractor == 3.0.1 -lyricsgenius == 3.0.1 -markdown-it-py == 3.0.0 -MarkupSafe == 2.1.5 -marshmallow == 3.22.0 -mdurl == 0.1.2 -multidict == 6.1.0 -mutagen == 1.47.0 -mypy-extensions == 1.0.0 -nltk == 3.9.1 -numpy == 1.26.4 -ollama == 0.3.3 -orjson == 3.10.7 -packaging == 24.1 -pillow == 10.4.0 -primp == 0.6.3 -pycparser == 2.22 -pycryptodomex == 3.20.0 -pydantic == 2.9.2 -pydantic-settings == 2.5.2 -pydantic_core == 2.23.4 -PyGithub == 2.4.0 -Pygments == 2.18.0 -PyJWT == 2.9.0 -PyNaCl == 1.5.0 -pypiwin32 == 223 -PySide6 == 6.7.3 -PySide6_Addons == 6.7.3 -PySide6_Essentials == 6.7.3 -python-dotenv == 1.0.1 -pyttsx3 == 2.98 -pytube == 15.0.0 -pywin32 == 306 -PyYAML == 6.0.2 -redis == 5.1.0 -regex == 2024.9.11 -requests == 2.32.3 -rich == 13.8.1 -shiboken6 == 6.7.3 -six == 1.16.0 -sniffio == 1.3.1 -soupsieve == 2.6 -spotipy == 2.24.0 -SQLAlchemy == 2.0.35 -starlette == 0.38.6 -tenacity == 8.5.0 -timeout == 0.1.2 -tqdm == 4.66.5 -typing-inspect == 0.9.0 -typing_extensions == 4.12.2 -urllib3 == 2.2.3 -uvicorn == 0.31.0 -websocket == 0.2.1 -websocket-client == 1.8.0 -websockets == 13.1 -Werkzeug == 3.0.4 -wikipedia == 1.4.0 -wrapt == 1.16.0 -yarl == 1.13.1 -youtube-transcript-api == 0.6.2 -yt-dlp == 2024.9.27 -zope.event == 5.0 -zope.interface == 7.0.3 -``` - -# BotUpdate\utils\__init__.py - -```py - -``` - -# BotUpdate\utils\config_manager.py - -```py -import discord -from src.utils.helper import * - - -def load_config(config_path: str = "config.json") -> dict: - try: - with open(config_path, "r") as f: - return json.load(f) - except FileNotFoundError: - print(f"WARNING: Config file not found at {config_path}. Using default configuration.") - return {"default_prefix": "?", "guilds": {}} - except json.JSONDecodeError: - print(f"ERROR: Invalid JSON in config file {config_path}. Using default configuration.") - return {"default_prefix": "?", "guilds": {}} - -def save_config(config: dict, config_path: str = "config.json") -> None: - try: - with open(config_path, "w") as f: - json.dump(config, f, indent=4) - except IOError as e: - print(f"ERROR: Failed to save config to {config_path}: {e}") - -class ColorManager: - def __init__(self, config: dict): - self.colors = config.get("colors", {}) - - def get_color(self, color_name: str) -> int: - if color_name not in self.colors: - raise ValueError(f"Color '{color_name}' not found in configuration") - return int(self.colors[color_name].lstrip("#"), 16) - - def list_colors(self) -> list: - return list(self.colors.keys()) - - def create_color_embed(self, title: str, description: str, color_name: str) -> discord.Embed: - try: - color = self.get_color(color_name) - return discord.Embed(title=title, description=description, color=color) - except ValueError as e: - print(f"ERROR: Failed to create color embed: {e}") - return discord.Embed(title=title, description=description) -``` - -# BotUpdate\utils\db_manager.py - -```py -import sqlite3 -import datetime -import json - -DB_PATH = "./data/memo.db" - -def get_db_connection(): - return sqlite3.connect(DB_PATH) - -def execute_query(query: str, params: tuple = (), fetch: bool = False): - with get_db_connection() as conn: - cursor = conn.cursor() - cursor.execute(query, params) - if fetch: - return cursor.fetchall() - conn.commit() - return True - -def add_feedback(user_id: str, message: str) -> bool: - datetime_value = datetime.datetime.now().strftime("%S:%M:%H %d/%m/%y") - query = "INSERT INTO feedback VALUES (?, ?, ?)" - return execute_query(query, (user_id, message, datetime_value)) - -def add_history(user_id: int, command: str, arguments: list[str] = ["none"]) -> bool: - args_json = json.dumps(arguments) - datetime_value = datetime.datetime.now().strftime("%S:%M:%H %d/%m/%y") - query = "INSERT INTO history (user_id, command, arguments, datetime) VALUES (?, ?, ?, ?)" - return execute_query(query, (user_id, command, args_json, datetime_value)) - -def get_usage(command_name: str) -> tuple[str, str, str]: - query = "SELECT command_name, arguments, level FROM usage WHERE command_name = ?" - result = execute_query(query, (command_name,), fetch=True) - return result[0] if result else None - -def get_all_usages() -> list[tuple[str, str, str]]: - query = "SELECT command_name, arguments, level FROM usage" - return execute_query(query, fetch=True) - -def add_usage(command_name: str, arguments: list[str], level: int) -> bool: - if not 0 <= level <= 3: - raise ValueError("Level must be between 0 and 3") - query = "INSERT INTO usage (command_name, arguments, level) VALUES (?, ?, ?)" - args_json = json.dumps(arguments) - return execute_query(query, (command_name, args_json, str(level))) - -def create_tables(): - with get_db_connection() as conn: - cursor = conn.cursor() - cursor.execute("CREATE TABLE IF NOT EXISTS feedback (user_id TEXT, message TEXT, datetime TEXT)") - cursor.execute("CREATE TABLE IF NOT EXISTS history (user_id INTEGER, command TEXT, arguments TEXT, datetime TEXT)") - cursor.execute("CREATE TABLE IF NOT EXISTS usage (command_name TEXT, arguments TEXT, level TEXT)") - conn.commit() - -# Call this function when initializing the bot to ensure tables exist -create_tables() -``` - -# BotUpdate\utils\helper.py - -```py -import datetime -import tempfile -from PIL import Image, ImageDraw, ImageFont -from langdetect import detect, DetectorFactory -from langdetect.lang_detect_exception import LangDetectException -from collections import Counter -from gtts import gTTS -import discord - -def set_langdetect_seed(seed: int = 0): - DetectorFactory.seed = seed - -def text_to_speech(text: str, output_file: str, tts_mode: str) -> None: - try: - slow = tts_mode.lower() == "slow" - language = detect(text) - tts = gTTS(text=text, lang=language, slow=slow) - tts.save(output_file) - except Exception as e: - print(f"ERROR_LOG ~ Text-to-speech conversion failed: {e}") - -def log_info(value: str = "None") -> None: - timestamp = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S") - print(f"{timestamp} [INFO] {value}") - -def fetch_latency(client: discord.Client, shouldRound: bool = True) -> float: - latency = client.latency * 1000 - return round(latency) if shouldRound else latency - -def get_char_image(char: str, bg: str = "white", fg: str = "black", format: str = "png") -> str: - try: - img = Image.new("RGB", (200, 200), color=bg) - d = ImageDraw.Draw(img) - try: - font = ImageFont.truetype("arial.ttf", 120) - except IOError: - font = ImageFont.load_default() - d.text((100, 100), char, font=font, fill=fg, anchor="mm") - with tempfile.NamedTemporaryFile(delete=False, suffix=f".{format}") as temp_file: - img.save(temp_file, format=format.upper()) - temp_file_path = temp_file.name - return temp_file_path - except Exception as e: - print(f"ERROR: Failed to generate character image: {e}") - return None - -def detect_language(text: str) -> str: - try: - detections = [detect(text) for _ in range(5)] - most_common = Counter(detections).most_common(1)[0][0] - return most_common - except LangDetectException as e: - print(f"ERROR: Language detection failed: {e}") - return "unknown" -``` - -# changes.md - -```md -# Memo Bot Changelog - -## Latest Updates - -+ Added restart command -+ Updated shutdown command to disconect from all voice channels -+ Updated start command to set RPC to the help info -``` - -# config.json - -```json -{ - "defaults": { - "prefix": "?", - "footer_text": "This bot is created and hosted by Nerd bear", - "footer_icon": "https://as2.ftcdn.net/v2/jpg/01/17/00/87/1000_F_117008730_0Dg5yniuxPQLz3shrJvLIeBsPfPRBSE1.jpg" - }, - - "bot_version": "0.4.6", - "bot_name": "Memo", - "tts_mode":"fast", - "log_channel_id": "1290060885485948950", - "tts_detector_factory_seed": "0", - - "colors": { - "Red": "#FFB3BA", - "Coral": "#FFCCB6", - "Orange": "#FFE5B4", - "Gold": "#FFF1B5", - "Yellow": "#FFFFD1", - "Lime": "#DCFFB8", - "Green": "#BAFFC9", - "Teal": "#B5EAD7", - "Cyan": "#C7F2FF", - "Blue": "#B5DEFF", - "Navy": "#C5CAE9", - "Purple": "#D0B8FF", - "Magenta": "#F2B5D4", - "Pink": "#FFCCE5", - "Gray": "#E0E0E0", - "Lavender": "#E6E6FA" - }, - - "guilds": { - "1288144110880030795": { - "prefix": "*" - } - } -} -``` - -# crac.db - -```db - -``` - -# db_manager\__intit__.py - -```py - -``` - -# db_manager\feedback.py - -```py -import sqlite3 -import datetime - - -def add_feedback(user_id: str, message: str) -> bool: - """Uses SQLite to add user's feedback to feedback db table - - ### Params: - `used_id` `str` The user id of the person who submitted the feedback. - `message` `str` The name of the command that the user ran. - - ### Return: - Returns a bool (True on success) - """ - - datetime_value = datetime.datetime.today().now().__format__("%S:%M:%H %d/%m/%y") - - db_connection = sqlite3.connect("./memo.db") - db_cursor = db_connection.cursor() - db_cursor.execute( - f'INSERT INTO feedback VALUES (\'{user_id}\', "{message}", "{datetime_value}")' - ) - db_connection.commit() - - return True - -``` - -# db_manager\history.py - -```py -import sqlite3 -import datetime -import json - -def add_history(user_id: int, guild_id: int, command: str, arguments: list[str] = ["none"]) -> bool: - """Uses SQLite to add user command to history of commands ran - - ### Params: - `user_id` `int` The user id of the person who ran the command. - `guild_id` `int` The guild id of the server that the user ran the command in. - `command` `str` The name of the command that the user ran. - `arguments` `list[str]` The arguments passed in to the command, defaults to ["none"]. - - ### Return: - Returns a bool (True on success) - """ - args_json = json.dumps(arguments) - datetime_value = datetime.datetime.now().strftime("%S:%M:%H %d/%m/%y") - - db_connection = sqlite3.connect("./memo.db") - db_cursor = db_connection.cursor() - - try: - db_cursor.execute( - "INSERT INTO history (user_id, guild_id, command, arguments, datetime) VALUES (?, ?, ?, ?, ?)", - (user_id, guild_id, command, args_json, datetime_value) - ) - db_connection.commit() - return True - except sqlite3.Error as e: - print(f"ERROR_LOG: SQLite error: {e}") - return False - finally: - db_connection.close() -``` - -# db_manager\usage.py - -```py -import sqlite3 -from typing import List, Tuple -import json - -DB_PATH = "./memo.db" - - -def get_db_connection(): - """Create and return a database connection.""" - return sqlite3.connect(DB_PATH) - - -def execute_query(query: str, params: Tuple = (), fetch: bool = False): - """Execute a SQL query and optionally fetch results.""" - with get_db_connection() as conn: - cursor = conn.cursor() - cursor.execute(query, params) - if fetch: - return cursor.fetchall() - conn.commit() - return True - - -def get_usage(command_name: str) -> Tuple[str, str, str]: - """Get usage information for a specific command. - - Args: - command_name (str): The name of the command to retrieve. - - Returns: - Tuple[str, str, str]: A tuple containing (command_name, arguments, level). - Returns None if the command is not found. - """ - query = "SELECT command_name, arguments, level FROM usage WHERE command_name = ?" - result = execute_query(query, (command_name,), fetch=True) - return result[0] if result else None - - -def get_all_usages() -> List[Tuple[str, str, str]]: - """Get usage information for all commands. - - Returns: - List[Tuple[str, str, str]]: A list of tuples, each containing (command_name, arguments, level). - """ - query = "SELECT command_name, arguments, level FROM usage" - return execute_query(query, fetch=True) - - -def add_usage(command_name: str, arguments: List[str], level: int) -> bool: - """Add usage information for a command. - - Args: - command_name (str): The name of the command to add. - arguments (List[str]): The list of arguments the command accepts. - level (int): The permission level of the command (0-3). - - Returns: - bool: True if the operation was successful, False otherwise. - """ - if not 0 <= level <= 3: - raise ValueError("Level must be between 0 and 3") - - query = "INSERT INTO usage (command_name, arguments, level) VALUES (?, ?, ?)" - args_json = json.dumps(arguments) - return execute_query(query, (command_name, args_json, str(level))) -``` - -# help_heart.webp - -This is a binary file of the type: Image - -# launcher.py - -```py -import click -from rich import print as rich_print - - -@click.command() -@click.option("--token", help="Discord bot token", required=True) -def main(token: str): - if not token.strip(): - rich_print("[bold red]ERROR:[/bold red] Invalid token provided.") - rich_print("Usage: python3 ./launcher.py --token ") - raise click.Abort() - - from src.bot import Memo - - try: - Memo.run(token) - except Exception as e: - rich_print(f"[red]{e}[/red]") - click.Abort() - - -if __name__ == "__main__": - main() - -# python ./launcher.py --token "MTI4OTkyMTQ3NjYxNDU1MzY3Mg.GNo3VX.kjVPN-1ri34TtfuWZ-ADqhSeW56fARaLu7pMnk" -``` - -# LICENSE - -``` - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright 2024 Iona M. - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -``` - -# memo.db - -This is a binary file of the type: Binary - -# README.md - -```md -# Memo Bot - -## Table of Contents -1. [Introduction](#introduction) -2. [Features](#features) -3. [Commands](#commands) -4. [Installation](#installation) -5. [Usage](#usage) -6. [Configuration](#configuration) -7. [Project Structure](#project-structure) -8. [Dependencies](#dependencies) -9. [Development](#development) -10. [Contributing](#contributing) -11. [License](#license) -12. [Support](#support) -13. [Creator](#creator) - -## Introduction - -Memo Bot is a versatile, all-purpose Discord bot designed to enhance server management and user interaction. Currently in active development, Memo Bot offers a wide range of features from moderation tools to fun commands, making it a valuable addition to any Discord server. - -## Features - -1. **Server Moderation** - - Kick users - - Ban and unban users - - Timeout users - - Nickname management - -2. **User Interaction** - - Character information lookup - - Text-to-speech functionality - - Music playback from YouTube - - User profile display - -3. **Bot Management** - - Customizable bot status - - Start/shutdown commands - - Feedback system - -4. **Message Handling** - - Logging of message edits and deletions - - Inappropriate word detection and filtering - -5. **Voice Channel Integration** - - Join and leave voice channels - - Play audio in voice channels - -6. **Customization** - - Configurable command prefix - - Guild-specific settings - -## Commands - -Here's a detailed list of available commands: - -1. `?help`: Displays a help message with all available commands and their usage. - -2. `?kick @user [reason]`: Kicks the mentioned user from the server. Requires kick permissions. - -3. `?ban @user [reason]`: Bans the mentioned user from the server. Requires ban permissions. - -4. `?unban @user`: Unbans the specified user from the server. Requires ban permissions. - -5. `?timeout @user [reason]`: Timeouts the mentioned user for the specified duration. Requires moderate members permission. - -6. `?shutdown`: Shuts down the bot. Requires administrator permissions. - -7. `?start`: Starts the bot if it's offline. Requires administrator permissions. - -8. `?charinfo [character]`: Provides detailed information about the specified character, including Unicode data. - -9. `?tts [message]`: Converts the given text to speech and plays it in the user's current voice channel. - -10. `?play [youtube_url]`: Plays audio from the specified YouTube video in the user's current voice channel. - -11. `?join`: Makes the bot join the user's current voice channel. - -12. `?leave`: Makes the bot leave the current voice channel. - -13. `?profile @user`: Displays detailed profile information about the mentioned user. - -14. `?nick @user [new_nickname]`: Changes the nickname of the mentioned user. Requires manage nicknames permission. - -15. `?feedback [message]`: Allows users to submit feedback about the bot, which is stored in a database. - -## Installation - -1. Clone the repository: - \`\`\` - git clone https://github.com/your-username/Memo-bot.git - \`\`\` - -2. Navigate to the project directory: - \`\`\` - cd Memo-bot - \`\`\` - -3. Install the required dependencies: - \`\`\` - pip install -r requirements.txt - \`\`\` - -4. Set up your Discord bot token: - - Create a new application in the [Discord Developer Portal](https://discord.com/developers/applications) - - Create a bot for your application and copy the bot token - - Create a `config.json` file in the project root and add your token: - \`\`\`json - { - "token": "YOUR_BOT_TOKEN_HERE" - } - \`\`\` - -5. Set up the SQLite database: - \`\`\` - python setup/create_feedback_table.py - python setup/create_history_table.py - python setup/create_usage_table.py - \`\`\` - -## Usage - -1. Run the bot: - \`\`\` - python launcher.py - \`\`\` - -2. Invite the bot to your Discord server: - - Go to the OAuth2 URL generator in your Discord Developer Portal - - Select the "bot" scope and the necessary permissions - - Use the generated URL to invite the bot to your server - -3. Once the bot is in your server, use `?help` to see all available commands. - -## Configuration - -The `config.json` file contains important settings for the bot: - -\`\`\`json -{ - "defaults": { - "prefix": "?" - }, - "bot_version": "0.4.5", - "bot_name": "Memo", - "tts_mode": "fast", - "guilds": { - "1288144110880030795": { - "prefix": "*" - } - } -} -\`\`\` - -- `defaults.prefix`: The default command prefix for the bot. -- `bot_version`: The current version of the bot. -- `bot_name`: The name of the bot. -- `tts_mode`: The mode for text-to-speech functionality ("fast" or "slow"). -- `guilds`: Guild-specific settings, including custom prefixes. - -## Project Structure - -- `main/bot.py`: The main bot file containing command implementations and event handlers. -- `launcher.py`: The entry point for running the bot. -- `db_manager/`: Directory containing database management modules. -- `setup/`: Directory containing database setup scripts. -- `temp/audio/`: Directory for temporary audio files used by the TTS feature. -- `website/`: Directory containing HTML files for the bot's website. - -## Dependencies - -Memo Bot relies on several Python libraries: - -- discord.py: The core library for interacting with the Discord API. -- Pillow: Used for image manipulation in the `charinfo` command. -- gTTS: Google Text-to-Speech library for the TTS feature. -- yt_dlp: YouTube downloader used for the music playback feature. -- rich: Used for console output formatting and logging. -- langdetect: Used for language detection in the TTS feature. - -For a complete list of dependencies, refer to the `requirements.txt` file. - -## Development - -Memo Bot is under active development with nearly daily updates. The development process includes: - -- Regular feature additions and improvements -- Bug fixes and performance optimizations -- Refactoring for better code organization and maintainability -- Implementation of user feedback and feature requests - -Future development plans include: -- Implementing a music queue system -- Adding more fun and interactive commands -- Improving error handling and user feedback -- Enhancing the configuration system for more granular control - -## Contributing - -We welcome contributions to Memo Bot! Here's how you can contribute: - -1. Fork the repository -2. Create a new branch for your feature or bug fix -3. Make your changes and commit them with clear, descriptive commit messages -4. Push your changes to your fork -5. Submit a pull request to the main repository - -Please ensure your code adheres to the existing style conventions and includes appropriate tests. - -## License - -This project is licensed under the Apache License 2.0. See the [LICENSE](LICENSE) file for the full license text. - -## Support - -If you need help or want to report a bug, you can: - -1. Open an issue on this GitHub repository -2. Join our support Discord server (link to be added) -3. Contact us via email at Memo@nerd-bear.org - -## Creator - -Memo Bot is created and maintained by Nerd Bear. For more information about the creator and other projects, visit [nerd-bear.org](https://nerd-bear.org). - ---- - -Memo Bot © 2024 by Nerd Bear. All rights reserved. -``` - -# setup\clear_feedback_table.py - -```py -import sqlite3 - -db_connection = sqlite3.connect("./memo.db") -db_cursor = db_connection.cursor() -db_cursor.execute("DROP TABLE feedback") -db_cursor.execute("CREATE TABLE feedback(used_id, message, datetime)") -db_connection.commit() -``` - -# setup\clear_history_table.py - -```py -import sqlite3 - -db_connection = sqlite3.connect("./memo.db") -db_cursor = db_connection.cursor() -db_cursor.execute("DROP TABLE history") -db_cursor.execute("CREATE TABLE history(user_id, guild_id, command, arguments, datetime)") -db_connection.commit() -``` - -# setup\clear_usage_table.py - -```py -import sqlite3 - -db_connection = sqlite3.connect("./memo.db") -db_cursor = db_connection.cursor() -db_cursor.execute("DROP TABLE usage") -db_cursor.execute("CREATE TABLE usage(command_name, arguments, level)") -db_connection.commit() -``` - -# setup\create_feedback_table.py - -```py -import sqlite3 - -db_connection = sqlite3.connect("./memo.db") -db_cursor = db_connection.cursor() -db_cursor.execute("CREATE TABLE feedback(used_id, message, datetime)") -db_connection.commit() -``` - -# setup\create_history_table.py - -```py -import sqlite3 - -db_connection = sqlite3.connect("./memo.db") -db_cursor = db_connection.cursor() -db_cursor.execute("CREATE TABLE history(user_id, guild_id, command, arguments, datetime)") -db_connection.commit() -``` - -# setup\create_usage_table.py - -```py -import sqlite3 - -db_connection = sqlite3.connect("./memo.db") -db_cursor = db_connection.cursor() -db_cursor.execute("CREATE TABLE usage(command_name, arguments, level)") -db_connection.commit() -``` - -# src\bot.py - -```py -import asyncio -import datetime -import os -import random -import sys -import functools -import unicodedata - -import disnake -from disnake.ext import commands -from disnake.ui import Button, Select, Modal, TextInput, View - -from rich import print as richPrint -from rich.console import Console -from rich.markdown import Markdown -from rich.panel import Panel -from deep_translator import GoogleTranslator - -import yt_dlp - -from db_manager import history, feedback -from src.utils.helper import * - -log_info("Loaded all needed imports", True) - - -CONFIG_PATH = "config.json" -log_info("Loaded config path", True) - -log_info("Loading Config", True) -config = load_config(CONFIG_PATH) -log_info("Completed loading config", True) - -log_info("Loading default values into Memory", True) -color_manager = ColorManager(config) -log_info("Initialized color manager", True) - -FOOTER_TEXT = config["defaults"].get("footer_text") -log_info("Loaded footer text", True) -FOOTER_ICON = config["defaults"].get("footer_icon") -log_info("Loaded footer icon", True) - -BOT_PREFIX = config["defaults"].get("prefix", "?") -log_info("Loaded bot prefix", True) -BOT_NAME = config.get("bot_name", "Memo Bot") -log_info("Loaded bot name", True) -BOT_VERSION = config.get("bot_version", "1.0.0") -log_info("Loaded bot version", True) - -TTS_MODE = config.get("tts_mode", "normal") -log_info("Loaded tts mode", True) - -LOGGING_CHANNEL_ID = int(config.get("log_channel_id", 0)) -log_info("Loaded logging channel id", True) - -intents = disnake.Intents.all() -log_info("Initialized intents", True) -Memo = commands.Bot(command_prefix="/", intents=intents) -log_info("Initialized bot", True) -console = Console() -log_info("Initialized console", True) - -set_langdetect_seed(config.get("tts_detector_factory_seed", 0)) -log_info("Loaded tts detector factory seed", True) - -bot_active = True -log_info("Initialized bot to be active", True) -log_info("Completed loading default values into Memory", True) - - -async def get_info_text() -> str: - return f""" - {BOT_NAME} v{BOT_VERSION} - Logged in as {Memo.user.name} (ID: {Memo.user.id}) - Connected to {len(Memo.guilds)} guilds - Bot is ready to use. Ping: {fetch_latency(Memo)}ms - Prefix: {BOT_PREFIX} - Initialization complete. - """ - - -def debug_command(func): - @functools.wraps(func) - async def wrapper(message: disnake.Message, *args: any, **kwargs: any): - embed = disnake.Embed( - title="Warning", - description=f"WARNING! This is a dev/debug command and will not be included in full release v1.0.0", - color=color_manager.get_color("Orange"), - ) - embed.set_footer( - text=FOOTER_TEXT, - icon_url=FOOTER_ICON, - ) - await message.channel.send(embed=embed) - return await func(message, *args, **kwargs) - - return wrapper - - -@Memo.event -async def on_ready() -> None: - markdown = Markdown(f"# Discord {BOT_NAME} version {BOT_VERSION}") - console.print(markdown) - - info_text = await get_info_text() - panel = Panel( - info_text, title=f"{BOT_NAME} v{BOT_VERSION} Initialization Info", expand=False - ) - - console.print(panel) - - channel = Memo.get_channel(LOGGING_CHANNEL_ID) - - if channel: - embed = disnake.Embed( - title=f"{BOT_NAME} v{BOT_VERSION} Initialization Info", - description=info_text, - color=color_manager.get_color("Blue"), - timestamp=datetime.datetime.utcnow(), - ) - embed.set_footer( - text=FOOTER_TEXT, - icon_url=FOOTER_ICON, - ) - await channel.send(embed=embed) - - await Memo.change_presence( - activity=disnake.Game(name=f"Run {BOT_PREFIX}help for help") - ) - - -@Memo.event -async def on_message(message: disnake.Message) -> None: - global bot_active - - if message.author == Memo.user: - return - - if isinstance(message.channel, disnake.DMChannel): - await send_error_embed( - message, - "Please run in server", - "When running commands or interacting with the bot, please do so in the server as we do not currently support DM interactions.", - FOOTER_TEXT, - FOOTER_ICON, - color_manager, - ) - return - - if not message.content.startswith(BOT_PREFIX): - if bot_active == False: - return - content = message.content.lower() - if any(word in content for word in ["nigger", "nigga", "negro", "nigro"]): - await handle_inappropriate_word(message) - if Memo.user in message.mentions: - await message.channel.send( - f"Hello {message.author.mention}! You mentioned me. How can I help you?" - ) - return - - if message.content.startswith("?") and len(message.content.strip()) <= 1: - return - - if not bot_active and message.content != f"{BOT_PREFIX}start": - embed = disnake.Embed( - title="Bot Offline", - description=f"{BOT_NAME} is currently offline. Use {BOT_PREFIX}start to activate.", - color=color_manager.get_color("Red"), - ) - embed.set_footer( - text=FOOTER_TEXT, - icon_url=FOOTER_ICON, - ) - await message.channel.send(embed=embed) - return - - command = message.content.split()[0][len(BOT_PREFIX) :].lower() - args = message.content.split()[1:] - - history.add_history( - SHA3.hash_256(str(message.author.id)), - SHA3.hash_256(str(message.guild)), - command, - args, - ) - - match command: - case "help": - await help_command(message) - - case "timeout": - await timeout_command(message) - - case "kick": - await kick_command(message) - - case "ban": - await ban_command(message) - - case "unban": - await unban_command(message) - - case "shutdown": - await shutdown_command(message) - - case "start": - await start_command(message) - - case "charinfo": - await charinfo_command(message) - - case "join": - await join_vc_command(message) - - case "leave": - await leave_vc_command(message) - - case "tts": - await tts_command(message) - - case "play": - await play_command(message) - - case "profile": - await profile_command(message) - - case "nick": - await nick_command(message) - - case "feedback": - await feedback_command(message) - - case "restart": - await restart_command(message) - - case "translate": - await translate_command(message) - - case "ping": - await ping_command(message) - - case "server": - await server_command(message) - - case "joke": - await joke_command(message) - - case "coin": - await coin_command(message) - - case "quote": - await quote_command(message) - - case "mute": - await vc_mute_command(message) - - case "unmute": - await vc_unmute_command(message) - - case "deafen": - await vc_deafen_command(message) - - case "undeafen": - await vc_undeafen_command(message) - - case _: - embed = disnake.Embed( - title="Invalid Command", - description=f"The command you are running is not valid. Please run `?help` for a list of commands and their usages!", - color=color_manager.get_color("Red"), - ) - embed.set_footer( - text=FOOTER_TEXT, - icon_url=FOOTER_ICON, - ) - await message.channel.send(embed=embed) - return - - -async def handle_inappropriate_word(message: disnake.Message) -> None: - user = message.author - channel = message.channel - - dm_embed = disnake.Embed( - title="Inappropriate Word Detected", - description=f"{BOT_NAME} has detected an inappropriate word! Please do not send racist words in our server! Moderators have been informed!", - color=0xFF697A, - ) - dm_embed.add_field( - name="Rules", - value="Please read our rules before sending such messages!", - inline=False, - ) - dm_embed.add_field(name="Server", value=f"{message.guild.name}", inline=False) - dm_embed.set_footer( - text=FOOTER_TEXT, - icon_url=FOOTER_ICON, - ) - dm_embed.set_thumbnail(url=message.guild.icon.url) - - try: - await user.send(embed=dm_embed) - except disnake.errors.Forbidden: - pass - - await message.delete() - - channel_embed = disnake.Embed( - title="Inappropriate Word Detected", - description=f"User {user.mention} tried to send a word that is marked not allowed!", - color=0xFF697A, - ) - channel_embed.set_footer( - text=FOOTER_TEXT, - icon_url=FOOTER_ICON, - ) - await channel.send(embed=channel_embed) - - -async def help_command(message: disnake.Message) -> None: - embed = fetch_help_embed( - color_manager, BOT_NAME, BOT_VERSION, BOT_PREFIX, FOOTER_TEXT, FOOTER_ICON - ) - await message.channel.send(embed=embed) - - -async def kick_command(message: disnake.Message) -> None: - if not message.author.guild_permissions.kick_members: - embed = disnake.Embed( - title="Permission Denied", - description="You don't have permission to use this command.", - color=color_manager.get_color("Red"), - ) - embed.set_footer( - text=FOOTER_TEXT, - icon_url=FOOTER_ICON, - ) - await message.channel.send(embed=embed) - return - - if len(message.mentions) < 1: - embed = disnake.Embed( - title="Invalid Usage", - description=f"Please mention a user to kick. Usage: {BOT_PREFIX}kick @user [reason]", - color=color_manager.get_color("Red"), - ) - embed.set_footer( - text=FOOTER_TEXT, - icon_url=FOOTER_ICON, - ) - await message.channel.send(embed=embed) - return - - member = message.mentions[0] - reason = " ".join(message.content.split()[2:]) or "No reason provided" - - try: - await member.send( - embed=disnake.Embed( - title="You've wBeen Kicked", - description=f"You were kicked from {message.guild.name}.\nReason: {reason}", - color=color_manager.get_color("Red"), - ) - ) - except: - pass - - await member.kick(reason=reason) - embed = disnake.Embed( - title="User Kicked", - description=f"{member.mention} has been kicked.\nReason: {reason}", - color=color_manager.get_color("Blue"), - ) - embed.set_footer( - text=FOOTER_TEXT, - icon_url=FOOTER_ICON, - ) - await message.channel.send(embed=embed) - - -async def ban_command(message: disnake.Message) -> None: - if not message.author.guild_permissions.ban_members: - embed = disnake.Embed( - title="Permission Denied", - description="You don't have permission to use this command.", - color=color_manager.get_color("Red"), - ) - embed.set_footer( - text=FOOTER_TEXT, - icon_url=FOOTER_ICON, - ) - await message.channel.send(embed=embed) - return - - if len(message.mentions) < 1: - embed = disnake.Embed( - title="Invalid Usage", - description=f"Please mention a user to ban. Usage: {BOT_PREFIX}ban @user [reason]", - color=color_manager.get_color("Red"), - ) - embed.set_footer( - text=FOOTER_TEXT, - icon_url=FOOTER_ICON, - ) - await message.channel.send(embed=embed) - return - - member = message.guild.get_member(message.mentions[0].id) - - if member is None: - embed = disnake.Embed( - title="Member Not Found", - description=f"Please mention a user to ban. Usage: {BOT_PREFIX}ban @user [reason]", - color=color_manager.get_color("Red"), - ) - embed.set_footer( - text=FOOTER_TEXT, - icon_url=FOOTER_ICON, - ) - await message.channel.send(embed=embed) - return - - reason = " ".join(message.content.split()[2:]) or "No reason provided" - - try: - await member.send( - embed=disnake.Embed( - title="You've Been Banned", - description=f"You were banned from {message.guild.name}.\nReason: {reason}", - color=color_manager.get_color("Red"), - ) - ) - except: - pass - - await member.ban(reason=reason) - embed = disnake.Embed( - title="User Banned", - description=f"{member.mention} has been banned.\nReason: {reason}", - color=color_manager.get_color("Blue"), - ) - embed.set_footer( - text=FOOTER_TEXT, - icon_url=FOOTER_ICON, - ) - await message.channel.send(embed=embed) - - -@debug_command -async def shutdown_command(message: disnake.Message) -> None: - global bot_active - if not message.author.guild_permissions.administrator: - embed = disnake.Embed( - title="Permission Denied", - description="You don't have permission to use this command.", - color=color_manager.get_color("Red"), - ) - embed.set_footer( - text=FOOTER_TEXT, - icon_url=FOOTER_ICON, - ) - await message.channel.send(embed=embed) - return - - bot_active = False - await Memo.change_presence(status=disnake.Status.invisible) - - for vc in Memo.voice_clients: - await vc.disconnect() - - embed = disnake.Embed( - title=f"{BOT_NAME} Shutting Down", - description=f"{BOT_NAME} is now offline.", - color=color_manager.get_color("Red"), - timestamp=datetime.datetime.utcnow(), - ) - embed.set_footer( - text=FOOTER_TEXT, - icon_url=FOOTER_ICON, - ) - await message.channel.send(embed=embed) - - -@debug_command -async def start_command(message: disnake.Message) -> None: - global bot_active - if not message.author.guild_permissions.administrator: - embed = disnake.Embed( - title="Permission Denied", - description="You don't have permission to use this command.", - color=color_manager.get_color("Red"), - ) - embed.set_footer( - text=FOOTER_TEXT, - icon_url=FOOTER_ICON, - ) - await message.channel.send(embed=embed) - return - - bot_active = True - await Memo.change_presence( - status=disnake.Status.online, - activity=disnake.Game(name=f"Run {BOT_PREFIX}help for help"), - ) - embed = disnake.Embed( - title=f"{BOT_NAME} Starting Up", - description=f"{BOT_NAME} is now online.", - color=color_manager.get_color("Blue"), - timestamp=datetime.datetime.utcnow(), - ) - embed.set_footer( - text=FOOTER_TEXT, - icon_url=FOOTER_ICON, - ) - await message.channel.send(embed=embed) - - -async def charinfo_command(message: disnake.Message) -> None: - - try: - argument_text = " ".join(message.content.split()[1:]) - char_text = argument_text[0] - except IndexError: - await message.channel.send( - embed=disnake.Embed( - title="ERROR", - color=color_manager.get_color("Blue"), - description="Please provide a character to get information about.", - ) - ) - return - - unicode_value = ord(char_text) - char_name = unicodedata.name(char_text, "Could not find name!") - char_category = unicodedata.category(char_text) - - unicode_escape = f"\\u{unicode_value:04x}" - unicode_escape_full = f"\\U{unicode_value:08x}" - python_escape = repr(char_text) - - embed = disnake.Embed( - color=color_manager.get_color("Blue"), - title="Character info", - type="rich", - description=f"Information on character: {char_text}", - ) - - embed.add_field(name="Original character", value=char_text, inline=True) - embed.add_field(name="Character name", value=char_name, inline=True) - embed.add_field(name="Character category", value=char_category, inline=True) - embed.add_field(name="Unicode value", value=f"U+{unicode_value:04X}", inline=True) - embed.add_field(name="Unicode escape", value=unicode_escape, inline=True) - embed.add_field(name="Full Unicode escape", value=unicode_escape_full, inline=True) - embed.add_field(name="Python escape", value=python_escape, inline=True) - - embed.set_footer( - text=FOOTER_TEXT, - icon_url=FOOTER_ICON, - ) - - image_path = get_char_image(char_text) - - if image_path: - file = disnake.File(image_path, filename="character.png") - embed.set_thumbnail(url="attachment://character.png") - else: - file = None - - embed.set_footer( - text=FOOTER_TEXT, - icon_url=FOOTER_ICON, - ) - - await message.channel.send(embed=embed, file=file) - - if image_path and os.path.exists(image_path): - os.remove(image_path) - - -async def unban_command(message: disnake.Message) -> None: - if not message.author.guild_permissions.administrator: - embed = disnake.Embed( - title="Permission Denied", - description="You don't have permission to use this command.", - color=color_manager.get_color("Red"), - ) - embed.set_footer( - text=FOOTER_TEXT, - icon_url=FOOTER_ICON, - ) - await message.channel.send(embed=embed) - return - - if len(message.content.strip().split) < 2: - embed = disnake.Embed( - title="Invalid Usage", - description=f"Please mention a user to unban. Usage: {BOT_PREFIX}unban [user_id]", - color=color_manager.get_color("Red"), - ) - embed.set_footer( - text=FOOTER_TEXT, - icon_url=FOOTER_ICON, - ) - await message.channel.send(embed=embed) - return - - member = message.guild.get_member(int(message.content.strip().split()[1])) - - if member is None: - embed = disnake.Embed( - title="Member Not Found", - description=f"Please mention a user to unban. Usage: {BOT_PREFIX}unban [user_id]", - color=color_manager.get_color("Red"), - ) - embed.set_footer( - text=FOOTER_TEXT, - icon_url=FOOTER_ICON, - ) - await message.channel.send(embed=embed) - return - - invite = message.channel.create_invite(reason="Invite unbanned user") - - try: - await member.send( - embed=disnake.Embed( - title="You've Been unbanned", - description=f"You were unbanned from {message.guild.name}", - color=color_manager.get_color("Blue"), - ).add_field(name="Invite link", value=invite) - ) - except: - pass - - try: - await message.guild.unban(user=member) - - except disnake.errors.Forbidden as e: - embed = disnake.Embed( - title="Forbidden", - description=f"Could not unban, {e}", - color=color_manager.get_color("Red"), - ) - embed.set_footer( - text=FOOTER_TEXT, - icon_url=FOOTER_ICON, - ) - await message.channel.send(embed=embed) - return - - except disnake.errors.NotFound as e: - embed = disnake.Embed( - title="Not found", - description=f"Could not unban, {e}", - color=color_manager.get_color("Red"), - ) - embed.set_footer( - text=FOOTER_TEXT, - icon_url=FOOTER_ICON, - ) - await message.channel.send(embed=embed) - return - - except disnake.errors.HTTPException as e: - embed = disnake.Embed( - title="Unknown", - description=f"Could not unban, {e}", - color=color_manager.get_color("Red"), - ) - embed.set_footer( - text=FOOTER_TEXT, - icon_url=FOOTER_ICON, - ) - await message.channel.send(embed=embed) - return - - embed = disnake.Embed( - title="User Unbanned", - description=f"{member.mention} has been unbanned.", - color=color_manager.get_color("Red"), - ) - embed.set_footer( - text=FOOTER_TEXT, - icon_url=FOOTER_ICON, - ) - await message.channel.send(embed=embed) - - -async def timeout_command(message: disnake.Message) -> None: - if not message.author.guild_permissions.moderate_members: - embed = disnake.Embed( - title="Permission Denied", - description="You don't have permission to use this command.", - color=color_manager.get_color("Red"), - ) - embed.set_footer( - text=FOOTER_TEXT, - icon_url=FOOTER_ICON, - ) - await message.channel.send(embed=embed) - return - - args = message.content.split()[1:] - if len(args) < 3: - embed = disnake.Embed( - title="Invalid Usage", - description=f"Usage: {BOT_PREFIX}timeout @user [reason]", - color=color_manager.get_color("Red"), - ) - embed.set_footer( - text=FOOTER_TEXT, - icon_url=FOOTER_ICON, - ) - await message.channel.send(embed=embed) - return - - member = message.mentions[0] if message.mentions else None - if not member: - embed = disnake.Embed( - title="Invalid Usage", - description="Please mention a user to timeout.", - color=color_manager.get_color("Red"), - ) - embed.set_footer( - text=FOOTER_TEXT, - icon_url=FOOTER_ICON, - ) - await message.channel.send(embed=embed) - return - - try: - duration = int(args[1]) - unit = args[2].lower() - - except ValueError: - embed = disnake.Embed( - title="Invalid Usage", - description="Duration must be a number.", - color=color_manager.get_color("Red"), - ) - embed.set_footer( - text=FOOTER_TEXT, - icon_url=FOOTER_ICON, - ) - await message.channel.send(embed=embed) - return - - reason = " ".join(args[3:]) if len(args) > 3 else "No reason provided" - - if message.author.top_role <= member.top_role: - embed = disnake.Embed( - title="Permission Denied", - description="You cannot timeout this user as they have an equal or higher role.", - color=color_manager.get_color("Red"), - ) - embed.set_footer( - text=FOOTER_TEXT, - icon_url=FOOTER_ICON, - ) - await message.channel.send(embed=embed) - return - - time_units = {"s": "seconds", "m": "minutes", "h": "hours", "d": "days"} - if unit not in time_units: - embed = disnake.Embed( - title="Invalid Usage", - description="Invalid time unit. Use 's' for seconds, 'm' for minutes, 'h' for hours, or 'd' for days.", - color=color_manager.get_color("Red"), - ) - embed.set_footer( - text=FOOTER_TEXT, - icon_url=FOOTER_ICON, - ) - await message.channel.send(embed=embed) - return - - time_delta = datetime.timedelta(**{time_units[unit]: duration}) - - try: - await member.timeout(time_delta, reason=reason) - embed = disnake.Embed( - title="User Timed Out", - description=f"{member.mention} has been timed out for {duration}{unit}.\nReason: {reason}", - color=color_manager.get_color("Blue"), - ) - embed.set_footer( - text=FOOTER_TEXT, - icon_url=FOOTER_ICON, - ) - await message.channel.send(embed=embed) - - except disnake.errors.Forbidden: - embed = disnake.Embed( - title="Permission Error", - description="I don't have permission to timeout this user.", - color=color_manager.get_color("Red"), - ) - embed.set_footer( - text=FOOTER_TEXT, - icon_url=FOOTER_ICON, - ) - await message.channel.send(embed=embed) - - except disnake.errors.HTTPException: - embed = disnake.Embed( - title="Error", - description="Failed to timeout the user. The duration might be too long.", - color=color_manager.get_color("Red"), - ) - embed.set_footer( - text=FOOTER_TEXT, - icon_url=FOOTER_ICON, - ) - await message.channel.send(embed=embed) - - try: - await member.timeout(time_delta, reason=reason) - embed = disnake.Embed( - title="You were timed out", - description=f"You (aka {member.mention}) have been timed out for {duration}{unit}.", - color=color_manager.get_color("Blue"), - ) - embed.add_field(name="reason", value=reason, inline=True) - embed.set_footer( - text=FOOTER_TEXT, - icon_url=FOOTER_ICON, - ) - await member.send(embed=embed) - - except: - pass - - -async def join_vc_command(message: disnake.Message) -> None: - try: - channel = Memo.get_channel(message.author.voice.channel.id) - await channel.connect() - except Exception as e: - richPrint(e) - - -async def leave_vc_command(message: disnake.Message) -> None: - try: - await message.guild.voice_client.disconnect() - except Exception as e: - pass - - -async def tts_command(message: disnake.Message) -> None: - text = " ".join(message.content.split()[1:]) - - if not text: - embed = disnake.Embed( - title="Missing arguments", - description=f"Please make sure you pass some text for the TTS command. Usage: {BOT_PREFIX}tts [message]", - color=color_manager.get_color("Red"), - ) - embed.set_footer( - text=FOOTER_TEXT, - icon_url=FOOTER_ICON, - ) - await message.channel.send(embed=embed) - return - return - - output_file = f"./temp/audio/{random.randint(0, 9)}{random.randint(0, 9)}{random.randint(0, 9)}{random.randint(0, 9)}{random.randint(0, 9)}{random.randint(0, 9)}{random.randint(0, 9)}{random.randint(0, 9)}{random.randint(0, 9)}{random.randint(0, 9)}{random.randint(0, 9)}{random.randint(0, 9)}.mp3" - - try: - text_to_speech(text, output_file, TTS_MODE) - except Exception as e: - embed = disnake.Embed( - title="Error occurred", - description=f"A issue occurred during the generation of the Text-to-Speech mp3 file! Usage: {BOT_PREFIX}tts [message]", - color=color_manager.get_color("Red"), - ) - embed.set_footer( - text=FOOTER_TEXT, - icon_url=FOOTER_ICON, - ) - await message.channel.send(embed=embed) - return - - try: - voice_channel = message.author.voice.channel - except: - embed = disnake.Embed( - title="Join voice channel", - description=f"Please join a voice channel to use this command! Usage: {BOT_PREFIX}tts [message]", - color=color_manager.get_color("Red"), - ) - embed.set_footer( - text=FOOTER_TEXT, - icon_url=FOOTER_ICON, - ) - await message.channel.send(embed=embed) - return - - try: - vc = await voice_channel.connect() - except disnake.ClientException: - vc = message.guild.voice_client - - if vc.is_playing(): - vc.stop() - - vc.play( - disnake.FFmpegPCMAudio(source=output_file), - after=lambda e: asyncio.run_coroutine_threadsafe(vc.disconnect(), Memo.loop), - ) - - while vc.is_playing(): - await asyncio.sleep(0.1) - - if os.path.exists(output_file): - os.remove(output_file) - - embed = disnake.Embed( - title="Ended TTS", - description=f"Successfully generated and played TTS file. Disconnecting from <#{voice_channel.id}>", - color=color_manager.get_color("Blue"), - ) - embed.set_footer( - text=FOOTER_TEXT, - icon_url=FOOTER_ICON, - ) - await message.channel.send(embed=embed) - return - - -async def play_command(message: disnake.Message) -> None: - args = message.content.split(" ", 1) - if len(args) < 2: - await message.channel.send("Please provide a YouTube URL or search term.") - return - - query = args[1] - - try: - voice_channel = message.author.voice.channel - if not voice_channel: - raise AttributeError - except AttributeError: - embed = disnake.Embed( - title="Join voice channel", - description="Please join a voice channel to use this command!", - color=color_manager.get_color("Red"), - ) - embed.set_footer( - text=FOOTER_TEXT, - icon_url=FOOTER_ICON, - ) - await message.channel.send(embed=embed) - return - - try: - vc = await voice_channel.connect() - except disnake.ClientException: - vc = message.guild.voice_client - - if vc.is_playing(): - vc.stop() - - try: - with yt_dlp.YoutubeDL({"format": "bestaudio", "noplaylist": "True"}) as ydl: - info = ydl.extract_info(query, download=False) - URL = info["url"] - title = info["title"] - except Exception as e: - embed = disnake.Embed( - title="Error occurred", - description=f"An issue occurred while trying to fetch the audio: {str(e)}", - color=color_manager.get_color("Red"), - ) - embed.set_footer( - text=FOOTER_TEXT, - icon_url=FOOTER_ICON, - ) - await message.channel.send(embed=embed) - return - - vc.play( - disnake.FFmpegPCMAudio( - URL, - **{ - "before_options": "-reconnect 1 -reconnect_streamed 1 -reconnect_delay_max 5", - "options": "-vn", - }, - ) - ) - - embed = disnake.Embed( - title="Now Playing", - description=f"Now playing: {title}", - color=color_manager.get_color("Blue"), - ) - embed.set_footer( - text=FOOTER_TEXT, - icon_url=FOOTER_ICON, - ) - await message.channel.send(embed=embed) - - -async def profile_command(message: disnake.Message) -> None: - if len(message.mentions) < 1: - embed = disnake.Embed( - title="Invalid Usage", - description=f"Usage: {BOT_PREFIX}profile @user", - color=color_manager.get_color("Red"), - ) - embed.set_footer( - text=FOOTER_TEXT, - icon_url=FOOTER_ICON, - ) - await message.channel.send(embed=embed) - return - - try: - user = message.mentions[0] - - except Exception as e: - embed = disnake.Embed( - title="Invalid Usage", - description=f"Usage: {BOT_PREFIX}profile @user", - color=color_manager.get_color("Red"), - ) - embed.set_footer( - text=FOOTER_TEXT, - icon_url=FOOTER_ICON, - ) - await message.channel.send(embed=embed) - return - - try: - fetched_user = await Memo.fetch_user(user.id) - - except disnake.errors.NotFound as e: - embed = disnake.Embed( - title="Not found", - description=f"Error occurred while fetching user. Usage: {BOT_PREFIX}profile @user", - color=color_manager.get_color("Red"), - ) - embed.set_footer( - text=FOOTER_TEXT, - icon_url=FOOTER_ICON, - ) - await message.channel.send(embed=embed) - return - - except disnake.errors.HTTPException as e: - embed = disnake.Embed( - title="Unknown Error", - description=f"Error occurred while fetching user, but this exception does not have defined behavior. Usage: {BOT_PREFIX}profile @user", - color=color_manager.get_color("Red"), - ) - embed.set_footer( - text=FOOTER_TEXT, - icon_url=FOOTER_ICON, - ) - await message.channel.send(embed=embed) - return - - if user not in message.guild.members: - embed = disnake.Embed( - title="Member not in guild!", - description=f"Please make sure that the user you are searching for exists and is in this guild. Usage: {BOT_PREFIX}profile @user", - color=color_manager.get_color("Red"), - ) - embed.set_footer( - text=FOOTER_TEXT, - icon_url=FOOTER_ICON, - ) - await message.channel.send(embed=embed) - return - - avatar = user.avatar - name = user.display_name - username = user.name - user_id = user.id - status = user.status - creation = user.created_at.strftime("%d/%m/%y %H:%M:%S") - badges = [badge.name for badge in user.public_flags.all()] - banner_url = None - top_role = "<@&" + str(user.roles[-1].id) + ">" - roles: list[str] = [] - print(user.premium_since) - roles_str = "" - - for role in user.roles: - roles.append(f"<@&{role.id}>") - - roles.pop(0) # Removes @everyone role - - for i in range(len(roles)): - roles_str = roles_str + str(roles[i]) - - try: - banner_url = fetched_user.banner.url - except: - pass - - if status == disnake.enums.Status(value="dnd"): - status = "⛔ Do not disturb" - - elif status == disnake.enums.Status(value="online"): - status = "🟢 Online" - - elif status == disnake.enums.Status(value="idle"): - status = "🟡 Idle" - - else: - status = "⚫ Offline" - - embed = disnake.Embed( - title=f"{name}'s Profile", - description="Users public discord information, please don't use for bad or illegal purposes!", - ) - embed.add_field(name="Display Name", value=name, inline=True) - embed.add_field(name="Username", value=username, inline=True) - embed.add_field(name="User ID", value=user_id, inline=True) - embed.add_field(name="Creation Time", value=creation, inline=True) - embed.add_field(name="Status", value=status, inline=True) - embed.add_field(name="Badges", value=badges, inline=True) - embed.add_field(name="Top role", value=top_role, inline=True) - embed.add_field( - name="Roles", - value=("No roles" if roles_str.strip() == "" else roles_str), - inline=True, - ) - embed.set_thumbnail( - url=( - avatar - if avatar - else "https://i.pinimg.com/474x/d6/c1/09/d6c109542c43e5b7c6699761c8c78d16.jpg" - ) - ) - embed.set_footer( - text=FOOTER_TEXT, - icon_url=FOOTER_ICON, - ) - embed.set_image(url=(banner_url if banner_url != None else "")) - embed.color = color_manager.get_color("Blue") - - await message.channel.send(embed=embed) - - -async def nick_command(message: disnake.Message) -> None: - if ( - not message.author.guild_permissions.administrator - | message.author.guild_permissions.administrator - ): - embed = disnake.Embed( - title="Missing permission", - description=f"Missing required permission `manage_nicknames`. Please run `{BOT_PREFIX}help` for more information!", - color=color_manager.get_color("Red"), - ) - embed.set_footer( - text=FOOTER_TEXT, - icon_url=FOOTER_ICON, - ) - await message.channel.send(embed=embed) - return - - if len(message.mentions) < 1: - embed = disnake.Embed( - title="Invalid Usage", - description=f"Usage: {BOT_PREFIX}nick @user [new_nickname]", - color=color_manager.get_color("Red"), - ) - embed.set_footer( - text=FOOTER_TEXT, - icon_url=FOOTER_ICON, - ) - await message.channel.send(embed=embed) - return - - user = message.mentions[0] - - if user not in message.guild.members: - embed = disnake.Embed( - title="Member not in guild!", - description=f"Please make sure that the user you are searching for exists and is in this guild. Usage: {BOT_PREFIX}nick @user [new_nick]", - color=color_manager.get_color("Red"), - ) - embed.set_footer( - text=FOOTER_TEXT, - icon_url=FOOTER_ICON, - ) - await message.channel.send(embed=embed) - return - - args = message.content.split(" ") - - try: - await user.edit(nick=" ".join(args[2:])) - embed = disnake.Embed( - title="Successfully updated nickname!", - description=f"Successfully updated nickname of <@{user.id}> to {" ".join(args[2:])}", - color=color_manager.get_color("Blue"), - ) - embed.set_footer( - text=FOOTER_TEXT, - icon_url=FOOTER_ICON, - ) - await message.channel.send(embed=embed) - return - - except Exception as e: - embed = disnake.Embed( - title="Issue occurred", - description=f"An issue occurred during this operation. This exception was caught by a general handler. {e}", - color=color_manager.get_color("Red"), - ) - embed.set_footer( - text=FOOTER_TEXT, - icon_url=FOOTER_ICON, - ) - await message.channel.send(embed=embed) - return - - -async def feedback_command(message: disnake.Message) -> None: - args = message.content.split()[1:] - feedback_text = " ".join(args) - - if len(args) < 1: - embed = disnake.Embed( - title="Invalid Usage", - description=f"Usage: {BOT_PREFIX}feedback [message]", - color=color_manager.get_color("Red"), - ) - embed.set_footer( - text=FOOTER_TEXT, - icon_url=FOOTER_ICON, - ) - await message.channel.send(embed=embed) - return - - feedback.add_feedback(message.author.id, feedback_text) - - embed = disnake.Embed( - color=color_manager.get_color("Blue"), - title="Recorded Feedback", - description=f"Recorded feedback from <@{message.author.id}>", - ) - embed.add_field(name="Message", value=feedback_text, inline=False) - embed.set_footer( - text=FOOTER_TEXT, - icon_url=FOOTER_ICON, - ) - await message.channel.send(embed=embed) - - -@debug_command -async def restart_command(message: disnake.Message) -> None: - embed = disnake.Embed( - title="Restarting", - description=f"The restart will take approximately 10 to 30 seconds on average.", - color=color_manager.get_color("Blue"), - ) - embed.set_footer( - text=FOOTER_TEXT, - icon_url=FOOTER_ICON, - ) - await message.channel.send(embed=embed) - - for vc in Memo.voice_clients: - await vc.disconnect(force=True) - - if hasattr(Memo.http, "_client_session") and Memo.http._client_session: - await Memo.http._client_session.close() - await asyncio.sleep(0.5) - - try: - await Memo.close() - except: - pass - - os.execv(sys.executable, ["python"] + sys.argv) - - -async def translate_command(message: disnake.Message) -> None: - translate_text = message.content.split(" ", 1)[1] - - try: - translator = GoogleTranslator(source="auto", target="en") - translated_text = translator.translate(translate_text) - - embed = disnake.Embed( - title="Translation", - description=translated_text, - color=color_manager.get_color("Blue"), - ) - embed.set_footer( - text=FOOTER_TEXT, - icon_url=FOOTER_ICON, - ) - - await message.channel.send(embed=embed) - - except Exception as e: - await message.channel.send(f"An error occurred: {str(e)}") - - -async def ping_command(message: disnake.Message) -> None: - bot_latency = fetch_latency(Memo) - - embed = disnake.Embed( - title="Bot latency", - description=f"The current bot latency is approximately `{bot_latency}ms`", - color=color_manager.get_color("Blue"), - ) - embed.set_footer( - text=FOOTER_TEXT, - icon_url=FOOTER_ICON, - ) - - await message.channel.send(embed=embed) - - -async def server_command(message: disnake.Message) -> None: - try: - guild = message.guild - - if not guild.me.guild_permissions.administrator: - embed = disnake.Embed( - title="Permission Denied", - description="You need administrator permissions to gather all server stats.", - color=color_manager.get_color("Red"), - ) - embed.set_footer(text=FOOTER_TEXT, icon_url=FOOTER_ICON) - await message.channel.send(embed=embed) - return - - if Memo.intents.members: - try: - await guild.chunk() - except disnake.HTTPException: - log_info("Failed to fetch all members. Some stats may be incomplete.") - - embed = disnake.Embed( - title=f"{guild.name} Server Stats", - color=color_manager.get_color("Blue"), - timestamp=datetime.datetime.utcnow(), - ) - - if guild.icon: - embed.set_thumbnail(url=guild.icon.url) - - embed.add_field(name="Server ID", value=guild.id, inline=True) - embed.add_field( - name="Owner", - value=guild.owner.mention if guild.owner else "Unknown", - inline=True, - ) - embed.add_field( - name="Created At", - value=f"", - inline=True, - ) - embed.add_field( - name="Boost Level", value=f"Level {guild.premium_tier}", inline=True - ) - embed.add_field( - name="Boost Count", value=guild.premium_subscription_count, inline=True - ) - - total_members = guild.member_count - bots = sum(1 for m in guild.members if m.bot) - embed.add_field(name="Members", value=total_members, inline=True) - embed.add_field(name="Bots", value=bots, inline=True) - - embed.add_field(name="Total Channels", value=len(guild.channels), inline=True) - embed.add_field(name="Roles", value=len(guild.roles), inline=True) - - if guild.description: - embed.add_field(name="Description", value=guild.description, inline=False) - if guild.banner: - embed.set_image(url=guild.banner.url) - - embed.set_footer(text=FOOTER_TEXT, icon_url=FOOTER_ICON) - - await message.channel.send(embed=embed) - - except disnake.Forbidden: - await send_error_embed( - message, - "Permission Error", - "I don't have permission to access some server information.", - FOOTER_TEXT=FOOTER_TEXT, - FOOTER_ICON=FOOTER_ICON, - color_manager=color_manager, - ) - except disnake.HTTPException as e: - await send_error_embed( - message, - "HTTP Error", - f"An HTTP error occurred: {e}", - FOOTER_TEXT=FOOTER_TEXT, - FOOTER_ICON=FOOTER_ICON, - color_manager=color_manager, - ) - except Exception as e: - await send_error_embed( - message, - "Unexpected Error", - f"An unexpected error occurred: {e}", - FOOTER_TEXT=FOOTER_TEXT, - FOOTER_ICON=FOOTER_ICON, - color_manager=color_manager, - ) - log_info(f"Unexpected error in server command: {e}") - - -async def joke_command(message: disnake.Message) -> None: - joke = await fetch_random_joke() - - if joke: - embed = disnake.Embed( - color=color_manager.get_color("Blue"), title="Dad joke", description=joke - ) - embed.set_footer(text=FOOTER_TEXT, icon_url=FOOTER_ICON) - await message.channel.send(embed=embed) - else: - send_error_embed( - message=message, - title="Error", - description="Sorry, I couldn't fetch a joke at the moment.", - FOOTER_TEXT=FOOTER_TEXT, - FOOTER_ICON=FOOTER_ICON, - color_manager=color_manager, - ) - - -async def coin_command(message: disnake.Message) -> None: - embed = disnake.Embed( - title="Coin Flip", - description="The coin is spinning...", - color=color_manager.get_color("Blue"), - ) - embed.set_thumbnail( - url="https://media.istockphoto.com/id/141325539/vector/heads-or-tails.jpg?s=612x612&w=0&k=20&c=V8GPGyuVWFMl4awXzlCp1lhYE5hKiKBybnZocR1i7Uw=" - ) - embed.set_footer(text=FOOTER_TEXT, icon_url=FOOTER_ICON) - - message = await message.channel.send(embed=embed) - - await asyncio.sleep(1.5) - - result = "Heads" if random.choice([True, False]) else "Tails" - embed.description = f"The coin landed on: **{result}**!" - - embed.set_thumbnail( - url=( - "https://e7.pngegg.com/pngimages/547/992/png-clipart-computer-icons-coin-gold-pile-of-gold-coins-gold-coin-gold-thumbnail.png" - if result == "Heads" - else "https://e7.pngegg.com/pngimages/443/910/png-clipart-gold-peso-coin-logo-coin-philippine-peso-peso-coin-gold-coin-text-thumbnail.png" - ) - ) - - await message.edit(embed=embed) - - -async def quote_command(message: disnake.Message) -> None: - quote = fetch_quote_of_the_day() - text = quote[0] - author = quote[1] - - embed = disnake.Embed( - title="Quote of the day", - description=f'"{text}" - {author}', - color=color_manager.get_color("Blue"), - ) - embed.set_footer(text=FOOTER_TEXT, icon_url=FOOTER_ICON) - - await message.channel.send(embed=embed) - - -async def vc_mute_command(message: disnake.Message) -> None: - if len(message.mentions) < 1: - await message.channel.send("Please mention a valid member.") - return - - member = message.guild.get_member(message.mentions[0].id) - - if not member: - await message.channel.send("Please mention a valid member.") - return - - if not member.voice: - await message.channel.send("That user is not in a voice channel.") - return - - member.edit(mute=True) - - -async def vc_unmute_command(message: disnake.Message) -> None: - if len(message.mentions) < 1: - await message.channel.send("Please mention a valid member.") - return - - member = message.guild.get_member(message.mentions[0].id) - - if not member: - await message.channel.send("Please mention a valid member.") - return - - member.edit(mute=False) - - -async def vc_deafen_command(message: disnake.Message) -> None: - if len(message.mentions) < 1: - await message.channel.send("Please mention a valid member.") - return - - member = message.guild.get_member(message.mentions[0].id) - - if not member: - await message.channel.send("Please mention a valid member.") - return - - member.edit(deafen=True) - - -async def vc_undeafen_command(message: disnake.Message) -> None: - if len(message.mentions) < 1: - await message.channel.send("Please mention a valid member.") - return - - member = message.guild.get_member(message.mentions[0].id) - - if not member: - await message.channel.send("Please mention a valid member.") - return - - member.edit(deafen=False) - - -@Memo.event -async def on_message_delete(message: disnake.Message): - if message.author == Memo.user: - return - - channel = Memo.get_channel(LOGGING_CHANNEL_ID) - if not channel: - return - - embed = disnake.Embed( - title="Message Deleted", - color=color_manager.get_color("Red"), - timestamp=datetime.datetime.utcnow(), - ) - embed.add_field(name="Author", value=message.author.mention) - embed.add_field(name="Channel", value=message.channel.mention) - embed.add_field(name="Content", value=message.content or "No content") - - if message.attachments: - embed.add_field( - name="Attachments", value="\n".join([a.url for a in message.attachments]) - ) - - embed.set_footer( - text=FOOTER_TEXT, - icon_url=FOOTER_ICON, - ) - await channel.send(embed=embed) - - -@Memo.event -async def on_message_edit(before: disnake.Message, after: disnake.Message): - if before.author == Memo.user: - return - - channel = Memo.get_channel(LOGGING_CHANNEL_ID) - if not channel: - return - - if before.content == after.content: - return - - embed = disnake.Embed( - title="Message Edited", - color=color_manager.get_color("Orange"), - timestamp=datetime.datetime.utcnow(), - ) - embed.add_field(name="Author", value=before.author.mention) - embed.add_field(name="Channel", value=before.channel.mention) - embed.add_field(name="Before", value=before.content or "No content") - embed.add_field(name="After", value=after.content or "No content") - - embed.set_footer( - text=FOOTER_TEXT, - icon_url=FOOTER_ICON, - ) - await channel.send(embed=embed) - - -@Memo.event -async def on_member_join(member: disnake.Member): - channel = member.guild.text_channels[0] - - if not channel: - return - - embed = disnake.Embed( - title=f"Welcome to the server {member.mention}!", - color=color_manager.get_color("Green"), - timestamp=datetime.datetime.utcnow(), - ) - - embed.add_field( - name="Account Created At", value=f"" - ) - embed.set_thumbnail(member.avatar.url) - embed.set_footer(FOOTER_TEXT, FOOTER_ICON) - await channel.send(embed=embed) - - -@Memo.event -async def on_member_remove(member: disnake.Member): - channel = member.guild.text_channels[0] - - if not channel: - return - - embed = disnake.Embed( - title=f"Goodbye {member.mention}!", - color=color_manager.get_color("Red"), - timestamp=datetime.datetime.utcnow(), - ) - - embed.set_thumbnail(member.avatar.url) - embed.set_footer(FOOTER_TEXT, FOOTER_ICON) - await channel.send(embed=embed) - - -@commands.slash_command(name="help", description="Shows the command help embed") -async def slash_help(interaction: disnake.ApplicationCommandInteraction): - embed = fetch_help_embed( - color_manager, BOT_NAME, BOT_VERSION, BOT_PREFIX, FOOTER_TEXT, FOOTER_ICON - ) - await interaction.response.send_message(embed=embed, ephemeral=True) - - -@commands.slash_command( - name="info", description="Shows important information about the bot." -) -async def slash_info(interaction: disnake.ApplicationCommandInteraction): - embed = fetch_info_embed( - color_manager, BOT_NAME, BOT_VERSION, BOT_PREFIX, FOOTER_TEXT, FOOTER_ICON - ) - await interaction.response.send_message(embed=embed, ephemeral=True) -``` - -# src\utils\helper.py - -```py -from typing import Optional, Tuple, List, Dict, Any, Union -from rich import print as richPrint -import json -import datetime -import disnake -import aiohttp -import requests -import ssl -import os -import urllib3 -from disnake.ext import commands -import tempfile -from langdetect import detect, DetectorFactory -from langdetect.lang_detect_exception import LangDetectException -from PIL import Image, ImageDraw, ImageFont -from collections import Counter -from gtts import gTTS -import hashlib - - -class SHA3: - @staticmethod - def salt_hash( - input_str: str, salt: Optional[bytes] = None - ) -> Tuple[Union[str, bytes], bytes]: - """ - Generate a salted hash of the input string using PBKDF2 HMAC-SHA256. - """ - if salt is None: - salt = SHA3.generate_salt(size=32, hex=True) - encoded_str = input_str.encode("utf-8") - hashed = hashlib.pbkdf2_hmac("sha256", encoded_str, salt, 100000) - return salt, hashed - - @staticmethod - def hash_256(input_str: str) -> str: - """ - Generate a SHA-256 hash of the input string. - """ - encoded_str = input_str.encode("utf-8") - return hashlib.sha3_256(encoded_str).hexdigest() - - @staticmethod - def hash_384(input_str: str) -> str: - """ - Generate a SHA-384 hash of the input string. - """ - encoded_str = input_str.encode("utf-8") - return hashlib.sha3_384(encoded_str).hexdigest() - - @staticmethod - def hash_512(input_str: str) -> str: - """ - Generate a SHA-512 hash of the input string. - """ - encoded_str = input_str.encode("utf-8") - return hashlib.sha3_512(encoded_str).hexdigest() - - @staticmethod - def hash_224(input_str: str) -> str: - """ - Generate a SHA-224 hash of the input string. - """ - encoded_str = input_str.encode("utf-8") - return hashlib.sha3_224(encoded_str).hexdigest() - - @staticmethod - def generate_salt(size: int = 32, hex: bool = True) -> Union[str, bytes]: - """ - Generate a random salt of the specified size. - """ - salt = os.urandom(size).hex() if hex else os.urandom(size) - return salt - - @staticmethod - def compare_hash_to_salted( - stored_salt: bytes, salted_and_hashed: bytes, hashed: str - ) -> bool: - """ - Compare a salted hash to a stored salted hash. - """ - _, new_hash = SHA3.salt_hash(hashed, stored_salt) - return new_hash == salted_and_hashed - - -def set_langdetect_seed(seed: int = 0) -> None: - """ - Set the seed for language detection to ensure consistent results. - """ - DetectorFactory.seed = seed - - -def text_to_speech(text: str, output_file: str, tts_mode: str) -> None: - """ - Convert text to speech and save it to a file. - """ - try: - slow = tts_mode.lower() == "slow" - - language = detect(text) - - tts = gTTS(text=text, lang=language, slow=slow) - tts.save(output_file) - except Exception as e: - richPrint(f"ERROR_LOG ~ Text-to-speech conversion failed: {e}") - - -def load_config(config_path: str = "config.json") -> Dict[str, Any]: - """ - Load the configuration from a JSON file. - """ - try: - with open(config_path, "r") as f: - return json.load(f) - except FileNotFoundError: - richPrint( - f"WARNING: Config file not found at {config_path}. Using default configuration." - ) - return {"default_prefix": "?", "guilds": {}} - except json.JSONDecodeError: - richPrint( - f"ERROR: Invalid JSON in config file {config_path}. Using default configuration." - ) - return {"default_prefix": "?", "guilds": {}} - - -def save_config(config: Dict[str, Any], config_path: str = "config.json") -> None: - """ - Save the configuration to a JSON file. - """ - try: - with open(config_path, "w") as f: - json.dump(config, f, indent=4) - except IOError as e: - richPrint(f"ERROR: Failed to save config to {config_path}: {e}") - - -def log_info(value: str = "None", startup_log: bool = False) -> None: - """ - Log an information message with a timestamp. - """ - timestamp = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S") - print(timestamp, end=" ") - richPrint( - f"[bold][blue]INFO[/blue][/bold] {"[purple]startup.[/purple]" if startup_log else ""}{value}" - ) - - -def fetch_latency(client: commands.Bot, shouldRound: bool = True) -> float: - """ - Fetch the latency of the Discord client. - """ - latency = client.latency * 1000 - return round(latency) if shouldRound else latency - - -async def send_error_embed( - message: disnake.Message, - title: str, - description: str, - FOOTER_TEXT: str, - FOOTER_ICON: str, - color_manager: "ColorManager", -) -> None: - """ - Send an error embed to the specified Discord message channel. - """ - embed = disnake.Embed( - title=title, - description=description, - color=color_manager.get_color("Red"), - ) - embed.set_footer(text=FOOTER_TEXT, icon_url=FOOTER_ICON) - await message.channel.send(embed=embed) - - -def get_char_image( - char: str, bg: str = "white", fg: str = "black", format: str = "png" -) -> Optional[str]: - """ - Generate an image of a single character. - """ - try: - img = Image.new("RGB", (200, 200), color=bg) - d = ImageDraw.Draw(img) - - try: - font = ImageFont.truetype("arial.ttf", 120) - except IOError: - font = ImageFont.load_default() - - d.text((100, 100), char, font=font, fill=fg, anchor="mm") - - with tempfile.NamedTemporaryFile( - delete=False, suffix=f".{format}" - ) as temp_file: - img.save(temp_file, format=format.upper()) - temp_file_path = temp_file.name - - return temp_file_path - except Exception as e: - richPrint(f"ERROR: Failed to generate character image: {e}") - return None - - -def detect_language(text: str) -> str: - """ - Detect the language of the given text using multiple attempts for improved accuracy. - """ - try: - detections = [detect(text) for _ in range(5)] - most_common = Counter(detections).most_common(1)[0][0] - return most_common - except LangDetectException as e: - richPrint(f"ERROR: Language detection failed: {e}") - return "unknown" - - -def fetch_help_embed( - color_manager: "ColorManager", - bot_name: str, - bot_version: str, - bot_prefix: str, - footer_text: str, - footer_icon: str, -) -> disnake.Embed: - """ - Create and return a help embed for the bot. - """ - help_embed = disnake.Embed( - color=color_manager.get_color("Blue"), - title=f"{bot_name} Help Information", - description=f"Here are the available commands (prefix: {bot_prefix}):", - ) - help_embed.set_footer(text=footer_text, icon_url=footer_icon) - - commands = { - "help": {"desc": "Show this help message", "usage": f"{bot_prefix}help"}, - "charinfo": { - "desc": "Shows information and a image of the character provided", - "usage": f"{bot_prefix}charinfo [character]", - }, - "tts": { - "desc": "Join the vc you are in and uses Text-to-Speech to say your text", - "usage": f"{bot_prefix}tts [input_text]", - }, - "nick": { - "desc": "Changes guild specific username of a member (Mod only)", - "usage": f"{bot_prefix}nick @user [new_nick]", - }, - "feedback": { - "desc": "Adds your feedback to our database", - "usage": f"{bot_prefix}feedback [message]", - }, - "play": { - "desc": "Plays a song in the voice channel you are in", - "usage": f"{bot_prefix}play [youtube_url]", - }, - "profile": { - "desc": "Gets information about the user", - "usage": f"{bot_prefix}profile @user", - }, - "server": { - "desc": "Gets information about the server", - "usage": f"{bot_prefix}server", - }, - "joke": { - "desc": "Fetches a random dad joke", - "usage": f"{bot_prefix}joke", - }, - "coin": { - "desc": "Flips a coin, and lands on heads or tails", - "usage": f"{bot_prefix}coin", - }, - "quote": { - "desc": "Fetches a random quote of the day", - "usage": f"{bot_prefix}quote", - }, - "ping": { - "desc": "Gets the ping (latency) of the Discord Bot", - "usage": f"{bot_prefix}ping", - }, - "translate": { - "desc": "Translates the provided text to english", - "usage": f"{bot_prefix}translate [text]", - }, - "timeout": { - "desc": "Timeout a user for a specified duration (Mod only)", - "usage": f"{bot_prefix}timeout @user [reason]", - }, - "kick": { - "desc": "Kick a user from the server (Mod only)", - "usage": f"{bot_prefix}kick @user [reason]", - }, - "ban": { - "desc": "Ban a user from the server (Admin only)", - "usage": f"{bot_prefix}ban @user [reason]", - }, - "unban": { - "desc": "Unbans a user from the server (Admin only)", - "usage": f"{bot_prefix}unban [user_id]", - }, - } - - for cmd, info in commands.items(): - help_embed.add_field( - name=f"{bot_prefix}{cmd}", - value=f"{info['desc']}\nUsage: `{info['usage']}`", - inline=False, - ) - - return help_embed - - -def fetch_info_embed( - color_manager: "ColorManager", bot_name: str, bot_version: str, bot_prefix: str -) -> disnake.Embed: - """ - Create and return an info embed for the bot. - """ - info_embed = disnake.Embed( - color=color_manager.get_color("Blue"), - title=f"{bot_name} v{bot_version} Info", - description=f"Here is some general information about the bot, please keep in mind that the bot is in development.", - ) - - info_embed.add_field(name="Command Information", value=f"Prefix: `{bot_prefix}`") - - -async def fetch_random_joke() -> Optional[str]: - """ - Fetch a random joke from an API. - """ - url = "https://icanhazdadjoke.com/" - headers = {"Accept": "application/json"} - - async with aiohttp.ClientSession() as session: - async with session.get(url, headers=headers) as response: - if response.status == 200: - data = await response.json() - return data["joke"] - else: - return None - - -def fetch_quote_of_the_day() -> Union[Tuple[str, str], str]: - """ - Fetch the quote of the day from an API. - Returns either a tuple of (quote, author) or an error message string. - """ - urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning) - url = "https://api.quotable.io/random" - - try: - context = ssl.create_default_context() - context.check_hostname = False - context.verify_mode = ssl.CERT_NONE - - response = requests.get(url, verify=False) - response.raise_for_status() - data = response.json() - - quote = data["content"] - author = data["author"] - - return quote, author - - except requests.RequestException as e: - return f"An error occurred: {e}" - - -class ColorManager: - """ - Manage colors for Discord embeds and other color-related functionality. - """ - - def __init__(self, config: dict): - """ - Initialize the ColorManager with a configuration dictionary. - - Args: - config (dict): A dictionary containing color configurations. - """ - self.colors: dict = config.get("colors", {}) - - def get_color(self, color_name: str) -> int: - """ - Get the integer representation of a color by its name. - - Args: - color_name (str): The name of the color to retrieve. - - Returns: - int: The integer representation of the color. - - Raises: - ValueError: If the color name is not found in the configuration. - """ - if color_name not in self.colors: - raise ValueError(f"Color '{color_name}' not found in configuration") - return int(self.colors[color_name].lstrip("#"), 16) - - def list_colors(self) -> list: - """ - Get a list of all available color names. - - Returns: - list: A list of color names. - """ - return list(self.colors.keys()) - - def create_color_embed( - self, title: str, description: str, color_name: str - ) -> disnake.Embed: - """ - Create a Discord embed with the specified color. - - Args: - title (str): The title of the embed. - description (str): The description of the embed. - color_name (str): The name of the color to use for the embed. - - Returns: - discord.Embed: The created Discord embed. - """ - try: - color = self.get_color(color_name) - return disnake.Embed(title=title, description=description, color=color) - except ValueError as e: - richPrint(f"ERROR: Failed to create color embed: {e}") - return disnake.Embed(title=title, description=description) -``` - -# website\404.html - -```html - - - - - - 404 - Page Not Found | Memo Bot - - - - - - - - -
-
-

404

-

Oops! Page not found

-

It seems like Memo Bot couldn't find the page you're looking for.

-
- - Return to Homepage - - -
-
-
- - - - - -``` - -# website\articles\add-feedback.html - -```html - - - - - - Memo Bot - Feedback Guide - - - - - - - - - - - - - - - - - -
-
-
-
-
-

Submitting Feedback for Memo Bot

-
-
- -
-
- Author Avatar -
-

Nerd Bear

-

Memo Bot Developer

-
-
- -
- - - - - - 3 min read -
- -
-

The Importance of Your Feedback

-

Your feedback is crucial for the continuous improvement of Memo Bot. Whether you've encountered a bug, have a feature request, or simply want to share your thoughts, we want to hear from you! The feedback command makes it easy to submit your input directly through Discord.

- -

Using the Feedback Command

-

Submitting feedback is straightforward with the ?feedback command. Here's how to use it:

-
?feedback [your message]
-

Replace [your message] with your actual feedback. Be as detailed as possible to help us understand your thoughts or the issue you're experiencing.

- -

Examples of Good Feedback

-

Here are some examples of effective feedback submissions:

-
    -
  • ?feedback The ?play command sometimes fails to join the voice channel. Could you look into this?
  • -
  • ?feedback I love the ?profile command! It would be great if it could also show the user's top 3 most active channels.
  • -
  • ?feedback The bot seems to lag when processing commands in servers with over 1000 members. Any way to optimize this?
  • -
- -

What Happens After You Submit Feedback

-

After submitting your feedback:

-
    -
  1. Your feedback is securely stored in our database.
  2. -
  3. The development team regularly reviews all feedback submissions.
  4. -
  5. Your input may influence future updates and improvements to Memo Bot.
  6. -
  7. For urgent issues, consider also reaching out through our support channels.
  8. -
- -

Best Practices for Submitting Feedback

-
    -
  • Be specific: Provide as much detail as possible about your experience or suggestion.
  • -
  • One idea per submission: If you have multiple suggestions, submit them separately for easier processing.
  • -
  • Be constructive: Explain not just what you dislike, but how you think it could be improved.
  • -
  • Include context: Mention your server size, the command you were using, or any relevant settings.
  • -
- -

Your feedback plays a vital role in shaping the future of Memo Bot. We appreciate every submission and take your input seriously in our development process.

- -
-

Pro Tip:

-

If you're reporting a bug, try to include steps to reproduce the issue. This helps our development team identify and fix the problem more quickly!

-
-
-
-
- -
-

Comments

-

No comments could be found for this article

-
-
- - - - - - -``` - -# website\articles\articles.html - -```html - - - - - - Memo Bot - Articles - - - - - - - - - - - - - - - - - -
-

Memo Bot Articles

- -
- -
-
-

Configuration Guide

-

Learn how to configure Memo Bot for your server's needs.

-
-
- Author Avatar - Nerd Bear -
- 5 min read -
- Read More → -
-
- - -
-
-

Commands Guide

-

Explore all available commands and how to use them effectively.

-
-
- Author Avatar - Nerd Bear -
- 8 min read -
- Read More → -
-
- - -
-
-

Submitting Feedback

-

Learn how to submit feedback to help improve Memo Bot.

-
-
- Author Avatar - Nerd Bear -
- 3 min read -
- Read More → -
-
-
-
- - - - - - -``` - -# website\articles\commands-guide.html - -```html - - - - - - Memo Bot - Commands Guide - - - - - - - - - - - - - - - - - -
-
-
-
-
-

Memo Bot Commands Guide

-
-
- -
-
- Author Avatar -
-

Nerd Bear

-

Memo Bot Developer

-
-
- -
- - - - - - 4 min read -
- -
-

Getting Started with Memo Bot Commands

-

Memo Bot comes packed with a variety of commands to help you manage your server and engage with your community. In this guide, we'll walk you through the most important commands and how to use them effectively.

- -

Basic Command Structure

-

All Memo Bot commands start with a prefix. By default, this prefix is set to "?", but it can be customized in the config file. Here's the basic structure of a command:

-
?commandName [argument1] [argument2] ...
- -

Essential Commands

- -

1. Help Command

-

The help command is your go-to for information about all available commands:

-
?help
-

This will display a list of all available commands along with a brief description of each.

- -

2. Moderation Commands

-

Memo Bot offers several moderation commands to help you manage your server:

-
    -
  • Kick: ?kick @user [reason]
  • -
  • Ban: ?ban @user [reason]
  • -
  • Unban: ?unban @user
  • -
  • Timeout: ?timeout @user <duration> <unit> [reason]
  • -
-

Remember, you need the appropriate permissions to use these commands.

- -

3. Fun and Utility Commands

-

Memo Bot also includes commands for entertainment and utility:

-
    -
  • Character Info: ?charinfo [character]
  • -
  • Text-to-Speech: ?tts [message]
  • -
  • Play Music: ?play [youtube_url]
  • -
  • User Profile: ?profile @user
  • -
- -

4. Bot Management Commands

-

For server administrators, there are commands to manage the bot itself:

-
    -
  • Shutdown: ?shutdown
  • -
  • Start: ?start
  • -
  • Change Nickname: ?nick @user [new_nickname]
  • -
- -

Advanced Usage Tips

-

Here are some tips to help you get the most out of Memo Bot:

-
    -
  • Use the ?help command followed by a specific command name for detailed usage information.
  • -
  • When using moderation commands, always provide a reason to maintain transparency.
  • -
  • The ?tts command is great for making announcements in voice channels.
  • -
  • Use ?profile to quickly get information about a user, including their roles and join date.
  • -
- -

Troubleshooting Common Issues

-

If you're experiencing issues with commands, try these steps:

-
    -
  1. Ensure you're using the correct prefix (default is "?").
  2. -
  3. Check that you have the necessary permissions for the command.
  4. -
  5. Verify that the bot is online and has the required permissions in your server.
  6. -
  7. If a command isn't working, try restarting the bot using the ?shutdown and ?start commands (admin only).
  8. -
- -

Remember, the key to effectively using Memo Bot is experimentation. Don't be afraid to try out different commands and see how they can benefit your server!

- -
-

Pro Tip:

-

Create a dedicated channel for bot commands to keep your main chat channels clutter-free. This also helps new users learn how to interact with the bot by seeing others use it.

-
-
-
-
- -
-

Comments

-

No comments could be found for this article

-
-
- - - - - - -``` - -# website\articles\config-guide.html - -```html - - - - - - Memo Bot - Config Guide - - - - - - - - - - - - - - - - - -
-
-
-
-
-

Memo Bot Config Guide

-
-
- -
-
- Author Avatar -
-

Nerd Bear

-

Memo Bot Developer

-
-
- -
- - - - - - 5 min read -
- -
-

Understanding the Config File

-

The config file for Memo Bot is a JSON file named config.json. It contains various settings that control the bot's behavior. Let's dive into its structure and how you can customize it to suit your needs.

- -
-{
-    "defaults": {
-        "prefix": "?",
-        "footer_text": "This bot is created and hosted by Nerd bear",
-        "footer_icon": "https://as2.ftcdn.net/v2/jpg/01/17/00/87/1000_F_117008730_0Dg5yniuxPQLz3shrJvLIeBsPfPRBSE1.jpg"
-    },
-    "bot_version": "0.4.6",
-    "bot_name": "Memo",
-    "tts_mode": "fast",
-    "log_channel_id": "1290060885485948950",
-    "tts_detector_factory_seed": "0",
-    "colors": {
-        "Red": "#FFB3BA",
-        "Blue": "#B5DEFF"
-        // ... other colors ...
-    },
-    "guilds": {
-        "1288144110880030795": {
-            "prefix": "*"
-        }
-    }
-}
-                    
- -

Key Sections:

-
    -
  • defaults: Contains default settings for the bot.
  • -
  • bot_version: The current version of the bot.
  • -
  • bot_name: The name of the bot.
  • -
  • tts_mode: The mode for text-to-speech functionality.
  • -
  • log_channel_id: The ID of the channel where logs will be sent.
  • -
  • colors: A list of color codes used for various bot functions.
  • -
  • guilds: Server-specific settings, such as custom prefixes.
  • -
- -

How to Modify the Config File

-

Customizing your Memo Bot installation is straightforward. Follow these steps to modify the config file:

-
    -
  1. Locate the config.json file in your bot's root directory.
  2. -
  3. Open the file with a text editor (e.g., Notepad++, Visual Studio Code).
  4. -
  5. Make your desired changes, ensuring to maintain the correct JSON format.
  6. -
  7. Save the file after making changes.
  8. -
  9. Restart the bot for the changes to take effect.
  10. -
- -

Common Modifications

-

Let's explore some common modifications you might want to make to your Memo Bot configuration:

- -

Changing the Default Prefix

-

To change the default prefix, modify the "prefix" value under "defaults":

-
-"defaults": {
-    "prefix": "!",  // Change '?' to your desired prefix
-    ...
-}
-                    
- -

Setting a Custom Prefix for a Specific Server

-

To set a custom prefix for a specific server, add or modify an entry under "guilds":

-
-"guilds": {
-    "YOUR_SERVER_ID": {
-        "prefix": "$"  // Replace with your desired prefix
-    }
-}
-                    
- -

Changing the Bot Name

-

To change the bot's name, modify the "bot_name" value:

-
-"bot_name": "Your New Bot Name",
-                    
- -

Modifying Colors

-

To change or add colors, modify the "colors" section:

-
-"colors": {
-    "Red": "#FF0000",
-    "Blue": "#0000FF",
-    "CustomColor": "#HEXCODE"
-}
-                    
- -

Important Notes

-

Before you start tweaking your config file, keep these important points in mind:

-
    -
  • Always backup your config file before making changes.
  • -
  • Ensure your JSON syntax is correct to avoid errors.
  • -
  • Some changes may require a bot restart to take effect.
  • -
  • Be cautious when changing critical settings like log_channel_id.
  • -
- -

Remember, customizing your Memo Bot is all about making it work best for your server and community. Don't be afraid to experiment with different settings to find what works best for you!

- -
-

Pro Tip:

-

Consider using a JSON validator tool to check your config file for syntax errors before restarting your bot. This can save you time and prevent potential issues.

-
-
-
-
- -
-

Comments

-

No comments could be found for this article

-
-
- - - - - - -``` - -# website\commands\ban\index.html - -```html - - - - - - Memo Bot - Ban Command - - - - - - - - - - - - - - - - -
- -
-
- ← Back to Commands - Moderation -
-

Ban Command

-

Permanently remove a user from your server

-
- - -
- -
- -
-

Usage

-
- ?ban @user [reason] -
-

The ban command allows moderators to permanently remove a user from the server. The user cannot rejoin unless unbanned.

-
-

Arguments:

-
    -
  • @user - The user to ban (mention required)
  • -
  • reason - Optional: Reason for the ban
  • -
-
-
- - -
-

Examples

-
-
-

Basic ban:

-
?ban @UserName
-
-
-

Ban with reason:

-
?ban @UserName 7 Repeated violations of server rules
-
-
-
- - -
-

Bot Response

-
-
-
-
- Memo Bot -
-
-
-

User Banned

-

@UserName has been banned.

-

Reason: Repeated violations of server rules

-
-
-
-
-
-
- - -
- -
-

Required Permissions

-
    -
  • - - - - Ban Members -
  • -
-
- -
-

Cooldown

-

No cooldown

-
- -
-

Related Commands

- -
- -
-

Additional Notes

-
    -
  • The bot must have a role higher than the banned user
  • -
  • Banned users cannot rejoin with invites
  • -
  • The bot will attempt to DM the user the reason for their ban
  • -
  • Server owner cannot be banned
  • -
  • Ban is logged in the server's audit log
  • -
-
-
-
-
- - - - - - -``` - -# website\commands\charinfo\index.html - -```html - - - - - - Memo Bot - Character Info Command - - - - - - - - - - - - - - - - -
- -
- -

Character Info Command

-

Get detailed Unicode information about any character

-
- - -
- -
- -
-

Usage

-
- ?charinfo [character] -
-

The charinfo command provides detailed Unicode information about any character, including emojis, special characters, and letters.

-
-

Arguments:

-
    -
  • character - The character you want to analyze
  • -
-
-
- - -
-

Information Provided

-
-
-

Basic Info:

-
    -
  • Original character
  • -
  • Character name
  • -
  • Character category
  • -
-
-
-

Unicode Data:

-
    -
  • Unicode value (U+XXXX)
  • -
  • Unicode escape sequence
  • -
  • Full Unicode escape
  • -
-
-
-

Additional Info:

-
    -
  • Python escape sequence
  • -
  • Character preview
  • -
  • Visual representation
  • -
-
-
-
- - -
-

Examples

-
-
-

Get info about an emoji:

-
?charinfo 😀
-
-
-

Get info about a special character:

-
?charinfo ♠
-
-
-

Get info about a letter:

-
?charinfo A
-
-
-
- - -
-

Bot Response

-
-
-
-
- Memo Bot -
-
-
-

Character info

-

Information on character: A

-

Original character: A

-

Character name: LATIN CAPITAL LETTER A

-

Character category: Lu

-

Unicode value: U+0041

-

Unicode escape: \u0041

-

Full Unicode escape: \U00000041

-

Python escape: 'A'

-
-
-
-
-
-
- Memo Bot -
-
-
-

ERROR

-

Please provide a character to get information about.

-
-
-
-
-
-
- - -
- -
-

Required Permissions

-
    -
  • - - - - None required -
  • -
-
- -
-

Cooldown

-

No cooldown

-
- -
-

Supported Characters

-
    -
  • Standard letters
  • -
  • Numbers
  • -
  • Emojis
  • -
  • Special symbols
  • -
  • Unicode characters
  • -
-
- -
-

Common Uses

-
    -
  • Finding Unicode values
  • -
  • Getting character names
  • -
  • Learning character categories
  • -
  • Getting escape sequences
  • -
  • Character analysis
  • -
-
-
-
-
- - - - - - -``` - -# website\commands\coin\index.html - -```html - - - - - - Memo Bot - Coin Flip Command - - - - - - - - - - - - - - - - -
- -
- -

Coin Flip Command

-

Flip a virtual coin and get heads or tails

-
- - -
- -
- -
-

Usage

-
- ?coin -
-

The coin command flips a virtual coin and displays the result. The bot will first announce it's flipping the coin, then show whether it landed on heads or tails.

-
-

Arguments:

-
    -
  • None required - Simply type ?coin
  • -
-
-
- - -
-

How It Works

-
-
-

The coin flip happens in two steps:

-
    -
  1. Bot announces "Flipping a coin..."
  2. -
  3. Result is shown: "The coin landed on heads/tails!"
  4. -
-
-
-
- - -
-

Example

-
-
-

Flip a coin:

-
?coin
-
-
-
- - -
-

Bot Response

-
-
-
-
- Memo Bot -
-
-
-

Flipping a coin...

-
-
-
-
-
-
- Memo Bot -
-
-
-

The coin landed on heads! 🪙

-
-
-
-
-
-
- - -
- -
-

Required Permissions

-
    -
  • - - - - None required -
  • -
-
- -
-

Cooldown

-

No cooldown

-
- -
-

Possible Results

-
    -
  • Heads
  • -
  • Tails
  • -
-
- -
-

Best Used For

-
    -
  • Making random decisions
  • -
  • Settling debates
  • -
  • Simple games
  • -
  • Quick choices
  • -
  • Team selection
  • -
-
- -
-

Good to Know

-
    -
  • Results are random
  • -
  • 50/50 probability
  • -
  • Shows flipping animation
  • -
  • Works in any channel
  • -
  • Instant results
  • -
-
-
-
-
- - - - - - -``` - -# website\commands\feedback\index.html - -```html - - - - - - Memo Bot - Feedback Command - - - - - - - - - - - - - - - - -
- -
-
- ← Back to Commands - Utility -
-

Feedback Command

-

Submit feedback to help improve Memo Bot

-
- - -
- -
- -
-

Usage

-
- ?feedback [message] -
-

The feedback command allows you to submit suggestions, bug reports, or general feedback about Memo Bot. All feedback is stored and reviewed regularly by the development team.

-
-

Arguments:

-
    -
  • message - Your feedback message
  • -
-
-
- - -
-

Feedback Best Practices

-
-
-

Good Feedback Examples:

-
    -
  • Bug reports with steps to reproduce
  • -
  • Specific feature requests
  • -
  • Detailed improvement suggestions
  • -
  • Command enhancement ideas
  • -
-
-
-

Avoid:

-
    -
  • Abuse or harassment
  • -
  • Spam submissions
  • -
  • Very short/vague feedback
  • -
  • Support requests (use ?help instead)
  • -
-
-
-
- - -
-

Examples

-
-
-

Bug report:

-
?feedback The ?play command sometimes fails to join voice channels in servers with over 1000 members
-
-
-

Feature request:

-
?feedback Would be great to have a queue system for the music commands
-
-
-

General feedback:

-
?feedback Love the profile command! Maybe add an option to show favorite channels?
-
-
-
- - -
-

Bot Response

-
-
-
-
- Memo Bot -
-
-
-

Feedback Received

-

Thank you for your feedback! Your message has been stored and will be reviewed by our team.

-
-
-
-
-
-
- Memo Bot -
-
-
-

Error

-

Please provide a feedback message. Usage: ?feedback [message]

-
-
-
-
-
-
- - -
- -
-

Required Permissions

-
    -
  • - - - - None required -
  • -
-
- -
-

Cooldown

-

No cooldown

-
- -
-

What Happens Next?

-
    -
  • Feedback is securely stored
  • -
  • Reviewed by development team
  • -
  • Used to guide improvements
  • -
  • May influence future updates
  • -
-
- -
-

Tips for Good Feedback

-
    -
  • Be specific and detailed
  • -
  • One idea per submission
  • -
  • Include examples if possible
  • -
  • Explain why it matters
  • -
  • Be constructive
  • -
-
-
-
-
- - - - - - -``` - -# website\commands\help\index.html - -```html - - - - - - Memo Bot - Help Command - - - - - - - - - - - - - - - - -
- -
-
- ← Back to Commands - Moderation -
-

Help Command

-

Display a list of all available commands.

-
- - -
- -
- -
-

Usage

-
- ?help -
-

The help command shows you a large embed of all the commands that you can run in the guild along with their short description.

-
- - -
-

Examples

-
-
-

Help:

-
?help
-
-
- - -
-

Bot Response

-
-
-
-
- Memo Bot -
-
-
-

Memo Help Information

-

?tts

-

Join the vc you are in and uses Text-to-Speech to say your text
Usage: ?tts [input_text]

-
-
-
-
-
-
- - -
- -
-

Required Permissions

-
    -
  • - - - - None -
  • -
-
- -
-

Cooldown

-

No cooldown

-
- -
-

Related Commands

- -
- -
-

Additional Notes

-
    -
  • There are some commands that are marked as secret/easter egg commands and are not documented.
  • -
-
-
-
-
- - - - - - -``` - -# website\commands\index.html - -```html - - - - - - Memo Bot - Commands - - - - - - - - - - - - - - - - - -
-
- - Memo Bot - -

Command List

-

Explore all available commands for Memo Bot

-
- -
-
- - -
-
- -
-
-
-
-

?kick

- Moderation -
-

Kick a user from the server with an optional reason.

-
- -
- -
-
-
-

?ban

- Moderation -
-

Ban a user from the server with an optional reason.

-
- -
- -
-
-
-

?unban

- Moderation -
-

Unban a previously banned user.

-
- -
- -
-
-
-

?timeout

- Moderation -
-

Timeout a user for a specified duration.

-
- -
- -
-
-
-

?nick

- Moderation -
-

Change a user's nickname.

-
- -
- -
-
-
-

?play

- Music -
-

Play a song from YouTube in your voice channel.

-
- -
- -
-
-
-

?join

- Music -
-

Make the bot join your voice channel.

-
- -
- -
-
-
-

?leave

- Music -
-

Make the bot leave the voice channel.

-
- -
- -
-
-
-

?help

- Utility -
-

Display a list of all available commands.

-
- -
- -
-
-
-

?profile

- Utility -
-

View detailed information about a user's profile.

-
- -
- -
-
-
-

?feedback

- Utility -
-

Submit feedback about the bot.

-
- -
- -
-
-
-

?translate

- Utility -
-

Translate text to English from any language.

-
- -
- -
-
-
-

?ping

- Utility -
-

Check the bot's current latency.

-
- -
- -
-
-
-

?server

- Utility -
-

View detailed information about the server.

-
- -
- -
-
-
-

?charinfo

- Fun -
-

Get detailed information about a character or emoji.

-
- -
- -
-
-
-

?tts

- Fun -
-

Convert text to speech in a voice channel.

-
- -
- -
-
-
-

?joke

- Fun -
-

Get a random dad joke.

-
- -
- -
-
-
-

?coin

- Fun -
-

Flip a coin and get heads or tails.

-
- -
- -
-
-
-

?quote

- Fun -
-

Get the quote of the day.

-
- -
-
-
- - - - - - - -``` - -# website\commands\join\index.html - -```html - - - - - - Memo Bot - Join Command - - - - - - - - - - - - - - - - -
- -
-
- ← Back to Commands - Music -
-

Join Command

-

Make the bot join your current voice channel

-
- - -
- -
- -
-

Usage

-
- ?join -
-

The join command makes Memo Bot join your current voice channel. You must be in a voice channel for this command to work.

-
-

Arguments:

-
    -
  • None required - Bot joins your current voice channel
  • -
-
-
- - -
-

Example

-
-
-

Basic usage:

-
?join
-
-
-
- - -
-

Bot Response

-
-
-
-
- Memo Bot -
-
-
-

Joined Voice Channel

-

Successfully joined General

-
-
-
-
-
-
- Memo Bot -
-
-
-

Error

-

You must be in a voice channel to use this command.

-
-
-
-
-
- - -
-

Voice Channel Requirements

-
-
-

For the command to work:

-
    -
  • You must be in a voice channel
  • -
  • The voice channel must be visible to the bot
  • -
  • The bot must have permission to join the channel
  • -
  • The voice channel must not be at capacity
  • -
-
-
-
-
- - -
- -
-

Required Permissions

-
    -
  • - - - - Connect -
  • -
  • - - - - View Channel -
  • -
-
- -
-

Cooldown

-

No cooldown

-
- -
-

Related Commands

- -
- -
-

Common Issues

-
    -
  • User not in a voice channel
  • -
  • Bot missing permissions
  • -
  • Voice channel at capacity
  • -
  • Region voice server issues
  • -
-
- -
-

Good to Know

-
    -
  • Bot stays in channel until disconnected
  • -
  • Will automatically disconnect after inactivity
  • -
  • Can be used before playing music
  • -
  • Works in any accessible voice channel
  • -
-
-
-
-
- - - - - - -``` - -# website\commands\joke\index.html - -```html - - - - - - Memo Bot - Joke Command - - - - - - - - - - - - - - - - -
- -
- -

Joke Command

-

Get a random dad joke to lighten the mood

-
- - -
- -
- -
-

Usage

-
- ?joke -
-

The joke command returns a random dad joke. Each time you use the command, you'll get a different joke!

-
-

Arguments:

-
    -
  • None required - Simply type ?joke
  • -
-
-
- - -
-

Example Jokes

-
-
-

Sample Responses:

-
    -
  • "Why don't eggs tell jokes? They'd Memok up!"
  • -
  • "What do you call a fake noodle? An impasta!"
  • -
  • "Why did the scarecrow win an award? He was outstanding in his field!"
  • -
-
-
-
- - -
-

Example

-
-
-

Get a random joke:

-
?joke
-
-
-
- - -
-

Bot Response

-
-
-
-
- Memo Bot -
-
-
-

Dad Joke Time! 😄

-

Why don't eggs tell jokes?

-

They'd Memok up!

-
-
-
-
-
-
- - -
- -
-

Required Permissions

-
    -
  • - - - - None required -
  • -
-
- -
-

Cooldown

-

No cooldown

-
- -
-

Features

-
    -
  • Random selection
  • -
  • Family-friendly content
  • -
  • Classic dad humor
  • -
  • Different joke every time
  • -
-
- -
-

Best Used For

-
    -
  • Breaking the ice
  • -
  • Lightening the mood
  • -
  • Starting conversations
  • -
  • Having a quick laugh
  • -
-
- -
-

Good to Know

-
    -
  • All jokes are dad jokes
  • -
  • Content is always clean
  • -
  • Jokes may repeat eventually
  • -
  • Works in any channel
  • -
-
-
-
-
- - - - - - -``` - -# website\commands\kick\index.html - -```html - - - - - - Memo Bot - Kick Command - - - - - - - - - - - - - - - - -
- -
-
- ← Back to Commands - Moderation -
-

Kick Command

-

Remove a user from your server temporarily

-
- - -
- -
- -
-

Usage

-
- ?kick @user [reason] -
-

The kick command allows moderators to remove a user from the server. The user can rejoin with a new invite.

-
-

Arguments:

-
    -
  • @user - The user to kick (mention required)
  • -
  • reason - Optional reason for the kick
  • -
-
-
- - -
-

Examples

-
-
-

Basic kick:

-
?kick @UserName
-
-
-

Kick with reason:

-
?kick @UserName Spamming in general chat
-
-
-
- - -
-

Bot Response

-
-
-
-
- Memo Bot -
-
-
-

User Kicked

-

@UserName has been kicked.

-

Reason: Spamming in general chat

-
-
-
-
-
-
- - -
- -
-

Required Permissions

-
    -
  • - - - - Kick Members -
  • -
-
- -
-

Cooldown

-

No cooldown

-
- -
-

Related Commands

- -
- -
-

Additional Notes

-
    -
  • The bot must have a role higher than the kicked user
  • -
  • Kicked users can rejoin with a new invite
  • -
  • The bot will attempt to DM the user the reason for their kick
  • -
-
-
-
-
- - - - - - -``` - -# website\commands\leave\index.html - -```html - - - - - - Memo Bot - Leave Command - - - - - - - - - - - - - - - - -
- -
-
- ← Back to Commands - Music -
-

Leave Command

-

Make the bot leave its current voice channel

-
- - -
- -
- -
-

Usage

-
- ?leave -
-

The leave command makes Memo Bot leave the voice channel it's currently in. The bot must be in a voice channel for this command to work.

-
-

Arguments:

-
    -
  • None required - Bot leaves its current voice channel
  • -
-
-
- - -
-

Example

-
-
-

Basic usage:

-
?leave
-
-
-
- - -
-

Bot Response

-
-
-
-
- Memo Bot -
-
-
-

Left Voice Channel

-

Successfully left General

-
-
-
-
-
-
- Memo Bot -
-
-
-

Error

-

I'm not in a voice channel.

-
-
-
-
-
- - -
-

Command Behavior

-
-
-

When using this command:

-
    -
  • Bot will stop any currently playing audio
  • -
  • Bot will immediately disconnect from the voice channel
  • -
  • Command can be used by any member
  • -
  • No need to be in the same voice channel as the bot
  • -
-
-
-
-
- - -
- -
-

Required Permissions

-
    -
  • - - - - None required -
  • -
-
- -
-

Cooldown

-

No cooldown

-
- -
-

Related Commands

- -
- -
-

Common Issues

-
    -
  • Bot not in any voice channel
  • -
  • Bot temporarily unresponsive
  • -
  • Network connectivity issues
  • -
-
- -
-

Good to Know

-
    -
  • Stops any playing audio
  • -
  • Can be used from any channel
  • -
  • Immediate disconnection
  • -
  • No confirmation needed
  • -
-
-
-
-
- - - - - - -``` - -# website\commands\nick\index.html - -```html - - - - - - Memo Bot - Nickname Command - - - - - - - - - - - - - - - - -
- -
-
- ← Back to Commands - Moderation -
-

Nickname Command

-

Change a user's nickname in the server

-
- - -
- -
- -
-

Usage

-
- ?nick @user [new_nickname] -
-

The nickname command allows moderators to change a user's display name in the server. If no new nickname is provided, it will reset to their original username.

-
-

Arguments:

-
    -
  • @user - The user to rename (mention required)
  • -
  • new_nickname - Optional: New nickname for the user (omit to reset)
  • -
-
-
- - -
-

Nickname Rules

-
-
-

Length Requirements:

-
    -
  • Minimum: 1 character
  • -
  • Maximum: 32 characters
  • -
-
-
-

Restrictions:

-
    -
  • Cannot contain Discord's blocked words
  • -
  • Cannot contain server-specific blocked words
  • -
  • Cannot impersonate other users
  • -
  • Cannot use certain special characters
  • -
-
-
-
- - -
-

Examples

-
-
-

Set new nickname:

-
?nick @UserName Cool Person
-
-
-

Reset nickname:

-
?nick @UserName
-
-
-
- - -
-

Bot Response

-
-
-
-
- Memo Bot -
-
-
-

Nickname Changed

-

Changed nickname for @UserName to "Cool Person"

-
-
-
-
-
-
- Memo Bot -
-
-
-

Error

-

Cannot change nickname: Missing permissions or nickname invalid.

-
-
-
-
-
-
- - -
- -
-

Required Permissions

-
    -
  • - - - - Manage Nicknames -
  • -
-
- -
-

Cooldown

-

No cooldown

-
- -
-

Related Commands

- -
- -
-

Additional Notes

-
    -
  • Bot must have a role higher than the user
  • -
  • Cannot change server owner's nickname
  • -
  • Changes are logged in the audit log
  • -
  • Users with "Change Nickname" permission can change their own nickname
  • -
  • Nickname changes are immediate
  • -
-
- -
-

Common Issues

-
    -
  • Nickname too long (>32 characters)
  • -
  • Contains blocked words or characters
  • -
  • Bot role hierarchy insufficient
  • -
  • User has higher roles than bot
  • -
-
-
-
-
- - - - - - -``` - -# website\commands\ping\index.html - -```html - - - - - - Memo Bot - Ping Command - - - - - - - - - - - - - - - - -
- -
-
- ← Back to Commands - Utility -
-

Ping Command

-

Check the bot's current response time

-
- - -
- -
- -
-

Usage

-
- ?ping -
-

The ping command shows the bot's current latency (response time) in milliseconds. This can help you check if the bot is experiencing any delays or connection issues.

-
-

Arguments:

-
    -
  • None required - Simply type ?ping
  • -
-
-
- - -
-

Understanding Latency

-
-
-

Good Latency:

-

50-150ms

-
-
-

Moderate Latency:

-

150-300ms

-
-
-

High Latency:

-

300ms+

-
-
-
- - -
-

Example

-
-
-

Check bot latency:

-
?ping
-
-
-
- - -
-

Bot Response

-
-
-
-
- Memo Bot -
-
-
-

🏓 Pong!

-

Bot Latency: 87ms

-
-
-
-
-
-
- - -
- -
-

Required Permissions

-
    -
  • - - - - None required -
  • -
-
- -
-

Cooldown

-

No cooldown

-
- -
-

When to Use

-
    -
  • Bot seems unresponsive
  • -
  • Commands are delayed
  • -
  • Checking connection quality
  • -
  • Troubleshooting issues
  • -
-
- -
-

Notes

-
    -
  • Latency varies by region
  • -
  • Results may fluctuate
  • -
  • Lower is better
  • -
  • Simple health check tool
  • -
-
-
-
-
- - - - - - -``` - -# website\commands\play\index.html - -```html - - - - - - Memo Bot - Play Command - - - - - - - - - - - - - - - - -
- -
-
- ← Back to Commands - Music -
-

Play Command

-

Play music from YouTube in your voice channel

-
- - -
- -
- -
-

Usage

-
- ?play youtube_url -
-

The play command allows you to play audio from a YouTube video in your current voice channel.

-
-

Arguments:

-
    -
  • youtube_url - The full URL of a YouTube video
  • -
-
-
- - -
-

URL Requirements

-
-
-

Accepted URL Formats:

-
    -
  • Standard YouTube URLs (youtube.com/watch?v=...)
  • -
  • Short YouTube URLs (youtu.be/...)
  • -
-
-
-

Not Supported:

-
    -
  • YouTube playlists
  • -
  • Non-YouTube URLs
  • -
  • YouTube Shorts
  • -
  • Live streams
  • -
  • Age-restricted videos
  • -
-
-
-
- - -
-

Examples

-
-
-

Play with standard URL:

-
?play https://www.youtube.com/watch?v=dQw4w9WgXcQ
-
-
-

Play with short URL:

-
?play https://youtu.be/dQw4w9WgXcQ
-
-
-
- - -
-

Bot Response

-
-
-
-
- Memo Bot -
-
-
-

Now Playing

-

Title: Never Gonna Give You Up

-

Channel: Rick Astley

-

Duration: 3:32

-
-
-
-
-
-
- Memo Bot -
-
-
-

Error

-

Invalid YouTube URL or video unavailable.

-
-
-
-
-
-
- - -
- -
-

Required Permissions

-
    -
  • - - - - Connect -
  • -
  • - - - - Speak -
  • -
-
- -
-

Cooldown

-

No cooldown

-
- -
-

Related Commands

- -
- -
-

Current Limitations

-
    -
  • No queue system
  • -
  • Cannot pause/resume
  • -
  • No volume control
  • -
  • No skip function
  • -
  • One song at a time
  • -
  • Must wait for current song to finish
  • -
-
- -
-

Requirements

-
    -
  • Must be in a voice channel
  • -
  • Bot must have permission to join
  • -
  • Video must be public
  • -
  • Video must be available in your region
  • -
-
-
-
-
- - - - - - -``` - -# website\commands\profile\index.html - -```html - - - - - - Memo Bot - Profile Command - - - - - - - - - - - - - - - - -
- -
-
- ← Back to Commands - Utility -
-

Profile Command

-

View detailed information about a user's Discord profile

-
- - -
- -
- -
-

Usage

-
- ?profile @user -
-

The profile command displays comprehensive information about a user's Discord profile, including their roles, status, badges, and more.

-
-

Arguments:

-
    -
  • @user - The user to look up (mention required)
  • -
-
-
- - -
-

Displayed Information

-
-
-

Basic Info:

-
    -
  • Display Name
  • -
  • Username
  • -
  • User ID
  • -
  • Account Creation Date
  • -
-
-
-

Status & Roles:

-
    -
  • Current Status (Online/Offline/DND/Idle)
  • -
  • Top Role
  • -
  • All Roles List
  • -
-
-
-

Visual Elements:

-
    -
  • Profile Picture
  • -
  • Banner (if available)
  • -
  • Discord Badges
  • -
-
-
-
- - -
-

Example

-
-
-

Look up user profile:

-
?profile @UserName
-
-
-
- - -
-

Bot Response

-
-
-
-
- Memo Bot -
-
-
-

UserName's Profile

-

Display Name: UserName

-

Username: User#1234

-

User ID: 123456789012345678

-

Creation Time: 17/10/24 12:34:56

-

Status: 🟢 Online

-

Top Role: @Admin

-

Roles: @Admin, @Moderator, @Member

-
-
-
-
-
-
- Memo Bot -
-
-
-

Invalid Usage

-

Usage: ?profile @user

-
-
-
-
-
-
- - -
- -
-

Required Permissions

-
    -
  • - - - - None required -
  • -
-
- -
-

Cooldown

-

No cooldown

-
- -
-

Common Issues

-
    -
  • User not mentioned
  • -
  • User not in server
  • -
  • Invalid user mention
  • -
  • User account deleted
  • -
-
- -
-

Status Indicators

-
    -
  • 🟢 Online
  • -
  • ⛔ Do Not Disturb
  • -
  • 🟡 Idle
  • -
  • ⚫ Offline
  • -
-
- -
-

Notes

-
    -
  • Shows all available badges
  • -
  • Banner shown if available
  • -
  • Shows creation timestamp
  • -
  • Lists all user roles
  • -
  • Default avatar used if none set
  • -
-
-
-
-
- - - - - - -``` - -# website\commands\quote\index.html - -```html - - - - - - Memo Bot - Quote Command - - - - - - - - - - - - - - - - -
- -
- -

Quote Command

-

Get an inspiring quote from a famous person

-
- - -
- -
- -
-

Usage

-
- ?quote -
-

The quote command returns a random famous quote. Each use of the command provides a different quote from history's most notable figures.

-
-

Arguments:

-
    -
  • None required - Simply type ?quote
  • -
-
-
- - -
-

Example Quotes

-
-
-

Sample Responses:

-
    -
  • - "Be the change you wish to see in the world." -
    - Mahatma Gandhi
    -
  • -
  • - "I have not failed. I've just found 10,000 ways that won't work." -
    - Thomas A. Edison
    -
  • -
  • - "Two things are infinite: the universe and human stupidity; and I'm not sure about the universe." -
    - Albert Einstein
    -
  • -
-
-
-
- - -
-

Example

-
-
-

Get a random quote:

-
?quote
-
-
-
- - -
-

Bot Response

-
-
-
-
- Memo Bot -
-
-
-

Quote of the Moment ✨

-

"Success is not final, failure is not fatal: it is the courage to continue that counts."

-

- Winston Churchill

-
-
-
-
-
-
- - -
- -
-

Required Permissions

-
    -
  • - - - - None required -
  • -
-
- -
-

Cooldown

-

No cooldown

-
- -
-

Quote Categories

-
    -
  • Inspirational
  • -
  • Historical
  • -
  • Scientific
  • -
  • Literary
  • -
  • Philosophical
  • -
  • Leadership
  • -
-
- -
-

Best Used For

-
    -
  • Daily inspiration
  • -
  • Starting discussions
  • -
  • Channel messages
  • -
  • Server greetings
  • -
  • Educational content
  • -
-
- -
-

Good to Know

-
    -
  • Quotes from verified sources
  • -
  • Attribution included
  • -
  • Family-friendly content
  • -
  • Works in any channel
  • -
  • Random selection each time
  • -
-
-
-
-
- - - - - - -``` - -# website\commands\server\index.html - -```html - - - - - - Memo Bot - Server Command - - - - - - - - - - - - - - - - -
- -
-
- ← Back to Commands - Utility -
-

Server Command

-

View detailed statistics about the current Discord server

-
- - -
- -
- -
-

Usage

-
- ?server -
-

The server command displays comprehensive statistics and information about the current Discord server, including member counts, boost status, and more.

-
-

Arguments:

-
    -
  • None required - Shows information for current server
  • -
-
-
- - -
-

Displayed Information

-
-
-

Basic Info:

-
    -
  • Server Name
  • -
  • Server ID
  • -
  • Owner
  • -
  • Creation Date
  • -
  • Description (if set)
  • -
-
-
-

Member Stats:

-
    -
  • Total Members
  • -
  • Bot Count
  • -
  • Total Channels
  • -
  • Role Count
  • -
-
-
-

Boost Information:

-
    -
  • Boost Level
  • -
  • Total Boosts
  • -
-
-
-

Visual Elements:

-
    -
  • Server Icon
  • -
  • Server Banner (if set)
  • -
-
-
-
- - -
-

Example

-
-
-

View server stats:

-
?server
-
-
-
- - -
-

Bot Response

-
-
-
-
- Memo Bot -
-
-
-

Server Name Server Stats

-

Server ID: 123456789012345678

-

Owner: @ServerOwner

-

Created At: October 17, 2024 12:34:56 PM UTC

-

Boost Level: Level 2

-

Boost Count: 7

-

Members: 1500

-

Bots: 5

-

Total Channels: 20

-

Roles: 15

-
-
-
-
-
-
- - -
- -
-

Required Permissions

-
    -
  • - - - - None required -
  • -
-
- -
-

Cooldown

-

No cooldown

-
- -
-

Common Issues

-
    -
  • Failed to fetch all members
  • -
  • HTTP connection errors
  • -
  • Permission errors
  • -
-
- -
-

Notes

-
    -
  • Shows server banner if available
  • -
  • Displays server icon if set
  • -
  • Includes timestamp of check
  • -
  • Shows server description if set
  • -
-
-
-
-
- - - - - - -``` - -# website\commands\timeout\index.html - -```html - - - - - - Memo Bot - Timeout Command - - - - - - - - - - - - - - - - -
- -
-
- ← Back to Commands - Moderation -
-

Timeout Command

-

Temporarily restrict a user's ability to interact with the server

-
- - -
- -
- -
-

Usage

-
- ?timeout @user [duration] [unit] [reason] -
-

The timeout command temporarily prevents a user from sending messages, reacting to messages, or joining voice channels.

-
-

Arguments:

-
    -
  • @user - The user to timeout (mention required)
  • -
  • duration - Number value for the timeout duration
  • -
  • unit - Time unit (s = seconds, m = minutes, h = hours, d = days)
  • -
  • reason - Optional: Reason for the timeout
  • -
-
-
- - -
-

Time Units

-
-
-

s (Seconds)

-

Example: ?timeout @user 30 s

-
-
-

m (Minutes)

-

Example: ?timeout @user 5 m

-
-
-

h (Hours)

-

Example: ?timeout @user 2 h

-
-
-

d (Days)

-

Example: ?timeout @user 1 d

-
-
-
- - -
-

Examples

-
-
-

Basic timeout (1 hour):

-
?timeout @UserName 1 h
-
-
-

Timeout with reason:

-
?timeout @UserName 1 d Spamming in general chat
-
-
-

Short timeout (5 minutes):

-
?timeout @UserName 5 m Cool down period
-
-
-
- - -
-

Bot Response

-
-
-
-
- Memo Bot -
-
-
-

User Timed Out

-

@UserName has been timed out for 1 day.

-

Reason: Spamming in general chat

-

Timeout will expire: [timestamp]

-
-
-
-
-
-
- - -
- -
-

Required Permissions

-
    -
  • - - - - Timeout Members -
  • -
-
- -
-

Cooldown

-

No cooldown

-
- -
-

Related Commands

- -
- -
-

Additional Notes

-
    -
  • Maximum timeout duration is 28 days
  • -
  • Bot must have a role higher than the user
  • -
  • Server owner cannot be timed out
  • -
  • The bot will attempt to DM the user
  • -
  • Timeouts are logged in the audit log
  • -
  • Users keep their roles during timeout
  • -
-
- -
-

Limitations

-
    -
  • Cannot combine time units
  • -
  • Time must be a whole number
  • -
  • Timed out users can still read messages
  • -
-
-
-
-
- - - - - - -``` - -# website\commands\translate\index.html - -```html - - - - - - Memo Bot - Translate Command - - - - - - - - - - - - - - - - -
- -
-
- ← Back to Commands - Utility -
-

Translate Command

-

Translate text from any language to English

-
- - -
- -
- -
-

Usage

-
- ?translate [text] -
-

The translate command automatically detects the language of the input text and translates it to English.

-
-

Arguments:

-
    -
  • text - The text you want to translate to English
  • -
-
-
- - -
-

Language Support

-
-
-

Features:

-
    -
  • Automatic language detection
  • -
  • Translation to English only
  • -
  • Support for most world languages
  • -
  • Handles special characters
  • -
-
-
-
- - -
-

Examples

-
-
-

Spanish to English:

-
?translate Hola, ¿cómo estás?
-
-
-

French to English:

-
?translate Bonjour, comment allez-vous?
-
-
-

German to English:

-
?translate Guten Tag, wie geht es dir?
-
-
-
- - -
-

Bot Response

-
-
-
-
- Memo Bot -
-
-
-

Translation

-

Original (Spanish): Hola, ¿cómo estás?

-

English: Hello, how are you?

-
-
-
-
-
-
- Memo Bot -
-
-
-

Error

-

Please provide text to translate. Usage: ?translate [text]

-
-
-
-
-
-
- - -
- -
-

Required Permissions

-
    -
  • - - - - None required -
  • -
-
- -
-

Cooldown

-

No cooldown

-
- -
-

Common Issues

-
    -
  • No text provided
  • -
  • Text too long
  • -
  • Unsupported characters
  • -
  • Connection errors
  • -
-
- -
-

Limitations

-
    -
  • English output only
  • -
  • Text-only translation
  • -
  • No image translation
  • -
  • No custom language selection
  • -
-
- -
-

Tips

-
    -
  • Keep text concise for best results
  • -
  • Proper punctuation helps accuracy
  • -
  • Use complete sentences when possible
  • -
  • Original text is shown for reference
  • -
-
-
-
-
- - - - - - -``` - -# website\commands\tts\index.html - -```html - - - - - - Memo Bot - Text-to-Speech Command - - - - - - - - - - - - - - - - -
- -
- -

Text-to-Speech Command

-

Convert text to speech and play it in a voice channel

-
- - -
- -
- -
-

Usage

-
- ?tts [message] -
-

The TTS command converts your text message into speech and plays it in your current voice channel.

-
-

Arguments:

-
    -
  • message - The text you want to convert to speech
  • -
-
-
- - -
-

Requirements

-
-
-

Before Using:

-
    -
  • You must be in a voice channel
  • -
  • Bot needs permission to join voice channels
  • -
  • Bot needs permission to speak
  • -
  • Text must not be empty
  • -
-
-
-
- - -
-

Examples

-
-
-

Basic message:

-
?tts Hello everyone!
-
-
-

Longer message:

-
?tts Welcome to our Discord server. Hope you enjoy your stay!
-
-
-
- - -
-

Command Behavior

-
-
    -
  1. Bot joins your voice channel
  2. -
  3. Converts text to speech
  4. -
  5. Plays the audio
  6. -
  7. Automatically disconnects after playing
  8. -
  9. Cleans up temporary audio files
  10. -
-
-
- - -
-

Bot Response

-
-
-
-
- Memo Bot -
-
-
-

Ended TTS

-

Successfully generated and played TTS file. Disconnecting from #General

-
-
-
-
-
-
- Memo Bot -
-
-
-

Join voice channel

-

Please join a voice channel to use this command! Usage: ?tts [message]

-
-
-
-
-
-
- - -
- -
-

Required Permissions

-
    -
  • - - - - Connect -
  • -
  • - - - - Speak -
  • -
-
- -
-

Cooldown

-

No cooldown

-
- -
-

Related Commands

- -
- -
-

Common Issues

-
    -
  • Not in a voice channel
  • -
  • Missing message text
  • -
  • Bot lacks permissions
  • -
  • Channel at capacity
  • -
  • TTS generation fails
  • -
-
- -
-

Good to Know

-
    -
  • Auto-disconnects after playing
  • -
  • Stops current audio if playing
  • -
  • Works in any voice channel
  • -
  • Temporary files are cleaned up
  • -
-
-
-
-
- - - - - - -``` - -# website\commands\unban\index.html - -```html - - - - - - Memo Bot - Unban Command - - - - - - - - - - - - - - - - -
- -
-
- ← Back to Commands - Moderation -
-

Unban Command

-

Remove a user's ban and allow them to rejoin the server

-
- - -
- -
- -
-

Usage

-
- ?unban user_id [reason] -
-

The unban command allows moderators to remove a ban from a user, allowing them to rejoin the server with a new invite.

-
-

Arguments:

-
    -
  • user_id - The ID of the user to unban
  • -
  • reason - Optional: Reason for the unban
  • -
-
-
- - -
-

Finding a User's ID

-

To unban a user, you'll need their User ID. Here's how to find it:

-
    -
  1. Enable Developer Mode in Discord (User Settings > App Settings > Advanced > Developer Mode)
  2. -
  3. Check the server's ban list (Server Settings > Bans)
  4. -
  5. Right-click on the user and select "Copy ID"
  6. -
-
-

- Note: User IDs are long numbers, like "123456789012345678" -

-
-
- - -
-

Examples

-
-
-

Basic unban:

-
?unban 123456789012345678
-
-
-

Unban with reason:

-
?unban 123456789012345678 Appeal approved
-
-
-
- - -
-

Bot Response

-
-
-
-
- Memo Bot -
-
-
-

User Unbanned

-

Successfully unbanned User#1234 (123456789012345678)

-

Reason: Appeal approved

-
-
-
-
-
-
- Memo Bot -
-
-
-

Error

-

User is not banned or ID is invalid.

-
-
-
-
-
-
- - -
- -
-

Required Permissions

-
    -
  • - - - - Ban Members -
  • -
-
- -
-

Cooldown

-

No cooldown

-
- -
-

Related Commands

- -
- -
-

Additional Notes

-
    -
  • You must use the user's ID, not their username
  • -
  • The action is logged in the server's audit log
  • -
  • Users must be re-invited after being unbanned
  • -
  • The command works even if the user has left the server
  • -
-
-
-
-
- - - - - - -``` - -# website\donate.html - -```html - - - - - - Memo Bot - Support Development - - - - - - - - - - - - - - - - -
- -
-

Support Memo Bot

-

Help keep Memo Bot running and improving

- -
- - -
-

Why Support Us?

-
-
-
🚀
-

Keep Memo Bot Running

-

Your support helps cover hosting costs and ensures Memo Bot stays online 24/7.

-
-
-
-

Enable New Features

-

Donations help us develop new features and improve existing ones.

-
-
-
💙
-

Support Development

-

Show your appreciation and help motivate continued development.

-
-
-
- - -
-

Donation Tiers

-
- -
-
-

Basic Supporter

-
$5
-
    -
  • - - - - Supporter role in our Discord Server -
  • -
  • - - - - Name in bot credits -
  • -
-
-
- - -
-
MOST POPULAR
-
-

Premium Supporter

-
$10
-
    -
  • - - - - All Basic benefits -
  • -
  • - - - - Early access to features -
  • -
  • - - - - Priority support -
  • -
-
-
- - -
-
-

Elite Supporter

-
$20
-
    -
  • - - - - All Premium benefits -
  • -
  • - - - - Custom role color -
  • -
  • - - - - Feature request priority -
  • -
-
-
-
-
- - -
-

Frequently Asked Questions

-
-
-

How do I claim my rewards?

-

After donating, join our Discord server and open a ticket. Provide your PayPal transaction ID, and we'll set up your rewards within 24 hours.

-
-
-

Is my donation recurring?

-

No, all donations are one-time payments. You can choose to donate again anytime you want to support us further.

-
-
-

How long do rewards last?

-

Rewards are permanent! Once you receive your perks, they'll stay with your account indefinitely.

-
-
-

Can I donate a custom amount?

-

Yes! You can modify the donation amount on PayPal. You'll receive the tier rewards for the nearest tier below your donation amount.

-
-
-
- - -
-

Ready to Support Memo Bot?

-

Your support helps keep Memo Bot free for everyone!

- -
-
- - - - - - -``` - -# website\home.html - -```html - - - - - - Memo - Discord Bot - - - - - - - - - - - - - - - - - -
-
- - Memo Bot - -

Welcome to Memo Bot

-

The ultimate do-it-all Discord bot for moderation and fun!

- -
-
- -
-

Features

-
-
-

Moderation

-

Powerful tools to keep your server safe and clean.

-
-
-

Fun Commands

-

Engage your community with interactive and entertaining commands.

-
-
-

Customization

-

Tailor Memo to fit your server's unique needs.

-
-
-
- -
-
-

- Recent changes to our Privacy Policy. Please review. -

-
-
- - - - - - -``` - -# website\privacy-policy.html - -```html - - - - - - - Memo - Discord Bot | Privacy Policy - - - - - - - - - - - - - - - - - - -
- -
-

1. Information We Collect

- When you use Memo Bot, we may collect certain information such as your Discord user ID, server ID, message content when using bot commands, and other relevant data necessary for the bot's functionality. We also have a Database of all the commands that users ran, and the hashed user ID. This is needed when moderators of a guild want to check what commands a user ran.

- -

2. How We Use Your Information

-

We use the collected information to provide and improve Memo Bot's services, including command execution, server management, and user interaction. We do not sell or share your personal information with third parties.

- -

3. Data Storage and Security

-

We take reasonable measures to protect your data from unauthorized access or disclosure. However, no method of transmission over the internet or electronic storage is 100% secure.

- -

4. Your Rights

-

You have the right to access, correct, or delete your personal information. To exercise these rights, please contact us using the information provided in the "Contact Us" section.

- -

5. Changes to This Privacy Policy

-

We may update our Privacy Policy from time to time. We will notify you of any changes by posting the new Privacy Policy on this page.

- -

6. Compliance with Discord's Policies

-

Memo Bot complies with Discord's Developer Terms of Service and Developer Policy. We do not collect or use any data beyond what is necessary for the bot's functionality and what is allowed by Discord's policies.

- -

7. Children's Privacy

-

Memo Bot is not intended for use by children under the age of 13. We do not knowingly collect personal information from children under 13. If you are a parent or guardian and you are aware that your child has provided us with personal information, - please contact us.

- -

8. Contact Us

-

If you have any questions about this Privacy Policy, please contact us at Memo@nerd-bear.org.

-
-
- - - - -``` - -# website\support.html - -```html - - - - - - Memo Bot - Support - - - - - - - - - - - - - - - - - -
-
- - Memo Bot - -

Support Center

-

Get help with Memo Bot

-
- -
- -
-

Help Articles

-

Browse our collection of help articles to find answers to common questions:

- - - View all articles → - -
- - -
-

Contact Support

-

Can't find what you're looking for? Our support team is here to help!

- -
- - -

Response Time: Within 24 hours

-
- -
-

- Tip: For faster support, please include your server ID and a detailed description of your issue in your email. -

-
-
-
-
- - - - - - -``` - -# website\terms-of-use.html - -```html - - - - - - Memo - Discord Bot | Terms of Use - - - - - - - - - - - - - - - - - -
- - -
-

1. Acceptance of Terms

-

By using Memo Bot, you agree to these Terms of Use. If you disagree with any part of these terms, please do not use our bot.

- -

2. Use of the Bot

-

Memo Bot is provided for Discord server management and entertainment purposes. You agree to use it only for its intended purposes and in compliance with Discord's Terms of Service.

- -

3. User Responsibilities

-

You are responsible for all activities that occur under your Discord account while using Memo Bot. Do not use the bot for any illegal or unauthorized purpose.

- -

4. Modifications to Bot or Terms

-

We reserve the right to modify or discontinue Memo Bot at any time. We may also revise these Terms of Use at our discretion. Continued use of the bot after any changes constitutes acceptance of those changes.

- -

5. Limitation of Liability

-

Memo Bot is provided "as is" without warranties of any kind. We are not liable for any damages or losses related to your use of the bot.

- -

6. Privacy

-

Our use and collection of your information is governed by our Privacy Policy. By using Memo Bot, you consent to our data practices as described in that policy.

- -

7. Termination

-

We may terminate or suspend your access to Memo Bot immediately, without prior notice, for conduct that we believe violates these Terms of Use or is harmful to other users of the bot, us, or third parties, or for any other reason.

- -

8. Governing Law

-

These Terms shall be governed by and construed in accordance with the laws of United States of America and the United Kingdom, without regard to its conflict of law provisions.

- -

9. Contact Us

-

If you have any questions about these Terms, please contact us at Memo@nerd-bear.org.

-
-
- - - - -``` - -# website\versions.html - -```html - - - - - - Memo Bot - Version History - - - - - - - - - - - - - - - - - -
- - -
- -
- - - -
-
-

Memo 0.4.4 Beta pre-release 🧪

-

Program size: ~0.04 MB (~43.1 KB)

-

Release date: 05/10/2024 2:45 AM BST

- Download v0.4.4 - -

This is a simple beta testing release with around 17 simple commands, the commands are: help, charinfo, tts, profile, play, join, leave, timeout, kick, ban, unban, shutdown, start, stream, play, watch, and listen. Nearly daily updates are to be expected.

- -

Warnings

-
    -
  • This version contains the usage of deprecated classes/functions and similar.
  • -
  • Unstable and not defined behaviour, this version might contain errors that are not handled properly or at all and general bugs.
  • -
  • No proper separation, this program version is currently a relative mess and not well structured, which may cause issues when customizing and or setting the bot up.
  • -
  • The charinfo command still has no support for a large number of special characters
  • -
  • Ban & Unban commands don't handle all exceptions and may cause undefined/buggy behaviour
  • -
  • There is no untimeout command and timeouts can only be in one unit of one amount
  • -
  • Status config commands still exist and have not been removed yet
  • -
  • Join/leave commands still not added to help embed
  • -
  • Many commands missing proper or any error handling
  • -
  • More unknown issues may exist
  • -
- -

Change log:

-
    -
  • Changed the default Logger construct-er log output path to ./logs/output.log instead of ./logs/output.log
  • -
  • Added tts command
  • -
  • Added tts command to the help embed
  • -
  • Added leave command
  • -
  • Added join command
  • -
  • Added run logs to join the command
  • -
  • Added run logs to leave command
  • -
  • Added run logs to TTS command
  • -
  • Changed tts command messages to be embedded
  • -
  • Added more error handling to the tts command
  • -
  • Updated tts command success embed to have a channel link and not a name
  • -
  • Added play command
  • -
  • Patched play command to not leave after starting to play
  • -
  • Added play command to help embed
  • -
  • Added profile command
  • -
  • Added profile command to help embed
  • -
  • Added failsafes and exception handling in the profile command
  • -
- -

Update notes:

-

I will remove all status config commands as they affect the bot across all guilds (Servers) and are just added as a proof of concept. The commands and features I will be adding are config files, untimeout commands, voice chat mute commands, per guild config, music features, and other fun features! Another feature, probably the biggest one (since it will allow for a lot of new features) will be the music queue backend change since it will allow for many new features.

- -

Created by Nerd Bear (This version of Memo is open source and under the apache2 license)

-
- -
-

Memo 0.4.3 Beta pre-release 🧪

-

Program size: ~0.03 MB (~30.8 KB)

-

Release date: 04/10/2024 2:17 AM BST

- Download v0.4.3 - -

This is a simple beta testing release with around 12 simple commands, the commands are: help, charinfo, timeout, kick, ban, unban, shutdown, start, stream, play, watch, and listen. Nearly daily updates are to be expected.

- -

Warnings

-
    -
  • This version contains the usage of deprecated classes/functions and similar.
  • -
  • Unstable and not defined behavior, this version might contain errors that are not handled properly or at all and general bugs.
  • -
  • No proper separation, this program version is currently a relative mess and not well structured, which may cause issues when customizing and or setting the bot up.
  • -
  • The charinfo command still has no support for a large number of special characters
  • -
  • Ban & Unban commands don't handle all exceptions and may cause undefined/buggy behavior
  • -
  • There is no untimeout command and timeouts can only be in one unit of one amount
  • -
  • Status config commands still exist and have not been removed yet
  • -
  • More unknown issues may exist
  • -
- -

Change log:

-
    -
  • Added unban command
  • -
  • Added unban command to help embed
  • -
  • Added exception handling to all cases of unban command
  • -
  • Changed Bot Intents from default to all
  • -
  • Changed the Logger class constructer to default to a relative output path
  • -
  • Ran blacklint on source code to increase readability
  • -
  • Specified bot command parameter types for syntax highlighting
  • -
  • Added timeout command
  • -
  • Added timeout command to help embed
  • -
  • Changed the timeout command to send a dm to the user
  • -
- -

Update notes:

-

I will be removing all status config commands as they affect the bot across all guilds (Servers) and are just added as a proof of concept. The commands and features I will be adding are config files, untimeout command, voice chat mute commands, per guild config, music features, and other fun features!

- -

Created by Nerd Bear (This version of Memo is open source and under the apache2 license)

-
- -
-

Memo 0.4.2 Beta pre-release 🧪

-

Program size: ~0.02 MB (~18.3 KB)

-

Release date: 03/10/2024 3:39 AM BST

- Download v0.4.2 - -

This is a simple beta testing release with around 10 simple commands, the commands are: help, charinfo, kick, ban, shutdown, start, stream, play, watch and listen. Nearly daily updates are to be expected.

- -

Warnings

-
    -
  • This version contains the usage of deprecated classes/functions and similar.
  • -
  • Unstable and not defined behaviour, this version might contain errors that are not handled properly or at all and general bugs.
  • -
  • No proper separation, this program version is currently a relative mess and not well structured, which may cause issues when customizing and or setting the bot up.
  • -
  • The charinfo command still has no support for a large number of special characters
  • -
  • More unknown issues may exist
  • -
- -

Change log:

-
    -
  • Removed all logger.info logs
  • -
  • Added footer to the DM_EMBED of the word filter
  • -
  • Added the charinfo command to the help embed
  • -
  • Changed the logger initialization to be a relative logger output path
  • -
  • Added logger info level logs to show what user ran what command when
  • -
- -

Created by Nerd Bear (This version of Memo is open source and under the apache2 license)

-
- -
-

Memo 0.4.1 Beta pre-release 🧪

-

Program size: ~0.02 MB (~18.3 KB)

-

Release date: 02/10/2024 4:09 AM BST

- Download v0.4.1 - -

This is a simple beta testing release with around 10 simple commands, the commands are: help, charinfo, kick, ban, shutdown, start, stream, play, watch and listen. Nearly daily updates are to be expected.

- -

Warnings

-
    -
  • This version contains the usage of deprecated classes/functions and similar.
  • -
  • Unstable and not defined behaviour, this version might contain errors that are not handled properly or at all and general bugs.
  • -
  • No proper separation, this program version is currently a relative mess and not well structured, which may cause issues when customizing and or setting the bot up.
  • -
  • May include hard-coded paths to files that may not exist or path formats meant for another OS
  • -
  • More unknown issues may exist
  • -
- -

Created by Nerd Bear (This version of Memo is open source and under the apache2 license)

-
-
-
- - - - - - -``` - diff --git a/db_manager/history.py b/db_manager/history.py index 8423c0c..a29eebd 100644 --- a/db_manager/history.py +++ b/db_manager/history.py @@ -1,34 +1,91 @@ import sqlite3 import datetime import json +from typing import List, Union -def add_history(user_id: int, guild_id: int, command: str, arguments: list[str] = ["none"]) -> bool: - """Uses SQLite to add user command to history of commands ran - - ### Params: - `user_id` `int` The user id of the person who ran the command. - `guild_id` `int` The guild id of the server that the user ran the command in. - `command` `str` The name of the command that the user ran. - `arguments` `list[str]` The arguments passed in to the command, defaults to ["none"]. - - ### Return: - Returns a bool (True on success) +def sanitize_input(value: Union[int, str, List[str]]) -> Union[int, str, List[str]]: + """Sanitizes input values before database insertion + + Args: + value: The value to sanitize + + Returns: + Sanitized value """ - args_json = json.dumps(arguments) - datetime_value = datetime.datetime.now().strftime("%S:%M:%H %d/%m/%y") + if isinstance(value, int): + return abs(int(value)) + elif isinstance(value, str): + return sqlite3.escape_string(str(value)) + elif isinstance(value, list): + return [sqlite3.escape_string(str(x)) for x in value] + else: + raise ValueError("Invalid input type") + +def add_history(user_id: int, guild_id: int, command: str, arguments: List[str] = ["none"]) -> bool: + """Uses SQLite to add user command to history of commands ran with enhanced security - db_connection = sqlite3.connect("./memo.db") - db_cursor = db_connection.cursor() + Args: + user_id: The user id of the person who ran the command + guild_id: The guild id of the server that the user ran the command in + command: The name of the command that the user ran + arguments: The arguments passed to the command, defaults to ["none"] + Returns: + bool: True on success, False on failure + + Raises: + ValueError: If input validation fails + """ try: - db_cursor.execute( - "INSERT INTO history (user_id, guild_id, command, arguments, datetime) VALUES (?, ?, ?, ?, ?)", - (user_id, guild_id, command, args_json, datetime_value) - ) - db_connection.commit() - return True + clean_user_id = sanitize_input(user_id) + clean_guild_id = sanitize_input(guild_id) + clean_command = sanitize_input(command) + clean_arguments = sanitize_input(arguments) + + if not isinstance(clean_user_id, int) or not isinstance(clean_guild_id, int): + raise ValueError("Invalid ID format") + + if not clean_command: + raise ValueError("Command cannot be empty") + + args_json = json.dumps(clean_arguments, ensure_ascii=True) + + datetime_value = datetime.datetime.now().strftime("%S:%M:%H %d/%m/%y") + + with sqlite3.connect("./memo.db", isolation_level='EXCLUSIVE') as db_connection: + db_connection.set_trace_callback(print) + db_connection.execute("PRAGMA foreign_keys = ON") + db_connection.execute("PRAGMA journal_mode = WAL") + + db_cursor = db_connection.cursor() + + query = """ + INSERT INTO history + (user_id, guild_id, command, arguments, datetime) + VALUES + (?, ?, ?, ?, ?) + """ + + db_cursor.execute(query, ( + clean_user_id, + clean_guild_id, + clean_command, + args_json, + datetime_value + )) + + db_connection.commit() + return True + + except ValueError as e: + print(f"ERROR_LOG: Validation error: {e}") + return False + except json.JSONDecodeError as e: + print(f"ERROR_LOG: JSON encoding error: {e}") + return False except sqlite3.Error as e: - print(f"ERROR_LOG: SQLite error: {e}") + print(f"ERROR_LOG: Database error: {e}") return False - finally: - db_connection.close() \ No newline at end of file + except Exception as e: + print(f"ERROR_LOG: Unexpected error: {e}") + return False \ No newline at end of file diff --git a/memo.db b/memo.db index 1d7779f95043104cd47ddd8daa8ef977160dbc3c..eba1ecdc3b183d392888388ab87da773ccba4ad1 100644 GIT binary patch delta 78 zcmZozz}c{XbAq(sK?Vi}RUl>sVnrZUo~UEYcyMFF0{KM-0-Frj1sD}3b2yaqvH|6k afLH;DnI|@yHy?IrKkUG`{jdX*Ek6L95fR7$ delta 108 zcmZozz}c{XbAq(sZUzPhRUl>sVmTm|pQvNZxO-#50(k+D5EK75AjzP>|C|5YW`Tfb v{9Hhuk{*y?6W?UOF2E=|nZu!+R~e)RikT-inl~SIXg}=0xc#sLlPy00r;ir3 diff --git a/temp/audio/063722105352.mp3 b/temp/audio/063722105352.mp3 deleted file mode 100644 index e7806fe3341d862d229213beb88418935533a2f3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 210816 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

lQDDv69ooZ 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

EZCr@ulLk+b20GNTA3EI$_{@?%P>zXzND~iC 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 diff --git a/temp/audio/743837710520.mp3 b/temp/audio/743837710520.mp3 deleted file mode 100644 index a9a600af50a12a9725b045f8020c41dc185c31fa..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 197184 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%0AB6Snm-#R*6h~tP-h=s2ts06^@iiWR>$%j2o>h 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

)8t)Xiqgq<+ z+3rs6tW+s-r17Ezxe$vGS+9Q)pIUu(BmLHgatX>QP$UV4#zaTmQrYJ5wl8!-eG}=O zc+(#3b1yxCo+ODeG3LLHRu~k|tWsc!Ewf|oSs;Lf9{sMr5GBGL$p5Cif$LTtuQ;|C zazi3GoDX)DsM(r`w);O--)i3kS1Dqq_wb=PT8M%_e?^e0+E>BCrJ3RjB&kiwzdg{Sm-yPiwa*}pUCH=rn5t(N z=j1rnUkv&{s}Z0E;@6?#yZG_mf8PK80*agNu}#B@!wOwvG&8tcmvmAj^&JrqV2M`- zph8C@33WE)3EZ+2=7@NX3Udiac-pIs;eW?kQd5W)C8p7a7>&u6n8=jqqwO>j)AUq) z&51v%WBD%qV<<3xq_h0okDLb`71Ms$5V&tAABu?w7Va-r2$K|}f~tXu0v5G14!i@V zpFX^!0AGLR0xuX(9S$gbtu^y>6*LHG4{oD5xVIK%FtK>l@ghP$_TL>S$gWJmR+QJR ztJwy2Rx@jnWcsVj5D*a52j!XTRY(h3Wr^nT?`$y`9I|;wtid3mi0w?i{eU0r0VjqO z{>-LEPt5)I4+MD7J|UXPm-5ffEgMO*yYUSL?Svc_G~ctwBq;*Rs;*L5r-k*ur$N(5 zMaGtzT9a{91m~P3E3|uOU3RcG=pmNItGOvHGfYNes**lv8e{(8YM-^E-- z?P|Z#>Yz?Gdm+tA)zP^{G-AXr0qrQ2Dhc|&I0~t2+T^RsvE;^-tCX{TO)c}u@)|W~ z2Y7cUuy_6<>2+Ra@XX&}BaZ-qxuvk_i>}ecmy&06r^u_etdfeYZ@SG&}t34d!LdVRwxaB75>4t6SOJ!OS@7{@amqyA2Do0P}kLO8%WD->6~ zi$Xp)PWi)CXo8vgkAWIf-KU*D9Ll3n4~Jmb4UQhk;}g@ksKZn+@BD1+1Vl;T>3QJP z;i-{9kgbZ?!|f8}BlUOwz4@-|`efANZ~^-L4_AyL&hezs!htV%W%|bOvGJmL#)rtf zqL{>x;kG@Kk-`Q#@r)Ys8__G!3Y$7?lt?TY$LR31iTnNW3b(*n`RVr3x5i80y@e`f zNd_P09V*Ipd~cuPaBeMEB1>M%tMAL7gZyJ4{66M zMhTP3r7uwT{@xUyGuvtVX!O8CaJ=(lQmT1>gHjMDnEM=Q zjYnJZSBdXVNTW>@Da%KlSV1H1iJPz}o!E@bR!lo7ITA&OD{u7RDRfI;b3!rG^4f4< z!_5OoUz_{!5`soq@6?MTs_0t3EY5?;_LJgqV`~<>nCvZqt@U4&sLcbu?#`dT`8rK` zhYo)WuXwS-Pa{2Qd->9WF-C&r5&Rt-dOcF3s;D!NPK+sGamB#rWaZ&+9&p*f=a%;4 z{2e2W$<>Gd*&ii}n=0v~htf?e^0+xnm7|sCfS_zZ?_xbS<_cQipi6+p^XKB@5Q(zq zo|7soP7#l`K6k&uekus`t=!cvN_E^M%H1NFXf&qk(8!E0hWid2x_>!P?0S;Y$kdev z^NdmoO;a>OLIlG|U6Uw+g+(Q1A_upkxY~?%{Nc}?a&JK7Lmj0hD>Oa1|MattlEfN) z%TR!r-bqTT{tA@uccRxCDXTP{F&*nrJQRP@32e@H{rRZ%NkQ{>lnwHNOm-Q8S{>)Z zW@d7VFOq3l6Lg%lc2-sycYb!wQuFT^|Q_+ z$%&O9qo8CylytG6prmH3(M5jiobLL%QMZvjfwlw9`mgQ6H+mW>Nl`Lf+QMupkvRDZ z3>pYS5NM!8=4(|OeR=qG>(%GPS>s)QBPwz{kbiq} zBXPz|9wIVa)R}~)xb4iCs9aK@MDKmg-I~zU8~8T91=9QMrvj>heVO=`gxml$N*Wpb zP^fg-@9FmNpJD1?@D4Zl=EBPT;2}xbKYqkpTCZ}cVc|Y_5Ds^!#?K)HTo1s&aP^;^IvB_T1KkMFMsWfmxZ?<~^#6Bkf|do=6t3u8!X{_rWYJqp~A zES|b2R^UwD3PLhHuW;L~oO4|SVR}-p17sbBlXM|b*<1!J`B!S)VxwBfHO6L^+d~tU z%>2K+v{sek1T>O3fnsQ%h~-hC#O6Zci8QM5LABdh+yWrtPPLI_y|CnHYe+YcCfUjz z!XHmGf0lEmcmN%k4zK_2A2wQ?;9Tt$3Fz9?u$>q1XdHEt!+=*(Lx76n72@dBRJ;m;LA70? zKu5#()81)rG%J^cOHH-yfn|kijn(L!cd)8EP)uh~anP~p5Wye)iXQHKEy?6e68F^6tcF_EhEQImv z0k?e@h2lN`MYnr7Pw3){FR%ol`U~8PC#M_Oc4$Aau{B0tH(xP`Ka_Ie!n<_HXhf46 zr0R!1`K3jx<#MjEIW7yL=a?io_Ic$^OYrc!oPEUqdc)G=Wh}iX(QlC1LO&?VdptXpb2m!>8|EhAHm30c$f9=AEuTdhpqM}>#^DX3pWh`0aFL-|LM0l z7HVF=?|Br?bZHM1=jrm0c~)`(Fmc-e)S{knUS(eSNam1CJamdaWA+)e9#Sq?T-P4+ zqoQ~tDmNOmc524vY;Juv87LieaRti;TJaSs1*rK78dhLc&&jJ4jTZ3L6{|1;sE7B3 z0Z*>`yQXc?SkU$5cU0i1LQNaNy_g5 zzw3`i(Wnage#LsAkn@S25Sj}loq&oRd{=aC)$D2ciHBu{{NvmT04kON(&inD`g zh!AD1&qV=~ICqFHd%U6O#DT{`;3lDc%$YgHi>SXKR=rd`U%I0A-CE(sz^#K~4fNgv zPk_%WR&1GV5$G;#4^~Wa9*%V33Q_|3$yugH1yaL)w(r0MD4enIgv}_Bj70 zy&}DCruiMPicg)=Q+Uc@+1x_#&mFA8tv%h=aPWL~Td(w;pOFf|9pqnC?CfPlljmbd zD(m>##y8kw!L;YRcwh0l`S*~y{vW}Khts)P%5nFU*yK243jaX8`V3F@q5Z+~8d23@ z!MouDSbSabY{fend=yf@ADy)i0~zN{5fKUbW5>v;M<;MVzfWiAcL6!d!lTH}1o7U& z(w%FY85y}UA|4n!zpP$XnYi^X+Xl;W$Ct@;ig9rY*ZbmWIorT1e!kRs@b~fvZ9gLjf!{$4O{NO(#*9A*QY;37V=kn3Up~Oej6H0ntoHW_haGv-rl0Uy(5UH_m|uEHCEQuRexLs{qBQ zAmzmJEc!{S6)cOBL0Y0`0O-@ORF8P1x0po4k|qDn?@BF>^b!AXmtwK$7g#2%d$V;0 zd$$`*yUYt}uqzC*aYx`p5$Df<6aPt{cOh*gILS6^X zOh_e!34O6IMuZmt7+HNJ0eD?HMV^$2+92Zu4AxI?c=S+KM8j2w%V+<@bn{N-Y5=J%R7R`E%~qKKN2U#*!eh))6aPEtm_LE@w7hm%g>3 zsRxYouhn7U0Kfpwrfy?_J;1rmM%m~{LQ{22JHn>V*9my&)fDjEV~211z;=*_hC>U7 zq+cI~Udg08wyXOc5M)1pK76yZR$1agR&XI|L6*o7jG{2UVaRaiC5+l3nd#e&%Fl;a zp3!Y}JRU$I_bj`L#US!*Ah1tY8!}XOH=jZTj>vf2p8sJOKHJmDl^1 zLZiP_s-|mlpEfRb^{W&&#!()63Sl3ufA!{#^l)AhC(Trl@{Hg^93fANbC!-aYQoFr z^4PcrzW%!e3=8Q0HX^zIIHB-5R(V4$ZkdV9N{6A|OUfk1S68*G?-@QRqFoS4P|V%i z>ga@sL41G#HW(xdiQMp+M%@KAjh~W~+G%GF9v9uxwpP&Eh!r-1829Tp_D}YVA<#F2 zNS}Sn0R%!mS-_A)_j9-JHpfdJ_4|6MOcp`;Z$~$Nc6*#$2KLqcJEr|aYPBlv#m8VJ za?9ZM2z;uc6#_nAt{x9`e`p8_-vs^8GdJY`KF2u9cYo3%1nGTIwhSShhiIw@S0JFq z@d)6MaLC{wQAa&pL(WKs<*2|a^-|m>hLeqKE3h=kn+tQA4oxC8VmfB`!MSdRe$(m0 zGmGyuiI$l!q7hvt=s@GPcBG*cEuWcczTE|(kR!^$nR>ua#z2W?F&~w3?k9xvy|sPB z|4S5Wt3mJUKL-}S{I19E6s~L8TE@4I*EF3Q-6_-MQ%zP+r%L&UX)31{g>=m99?mtN zLlIJQp2Ug{<)ZHRbTW$whS)8WRAyKHym1LJHad*!mIo!jF1h<~ma`)NJFrqebulq9GYg&nOSa61^ZNty0+> z{|VsB`MW9>&tI524d;B*&n#1e^Ha$q)1Zv7I9F7fz3Ie|`ldy?mW-Lp4lbV3wPfhk zL7QB}`ZM<#37RJ7xF%2^BTb$Kod1g$?!<_MmQlEZ#vnb);2`ph&Ac0jkxNu3$_AGsTodc$o-lSdKPM5)38hIF zF7hjBt8R4E)i%z=60#ZrA=Waddw7m>FFV=M4OUpB!VCqG5)$ly3Iz_Qtv6AS**u@7 z6H#hcM565PWm!e?m?}oy;wY&NkyWA$iOXmoK?OP92C3%gZrva zs)wZTMX^+dV(>pTdWP}&HQMppT`pDJXbSWiw()cfZtwg%JU8$2 z_sxylZNWx+O#q(p@6@zD^tpOM1Xgw&mfwiOO6cRV@t;YvS5#2os|{~Db1K_4F$QRD z!I;(R&N}E2MZ3GNCa) z<+uy>b?4l>Q<1*-1$f+^c&`23#)7Lq;HH1p?tcDnbpCk{Z#Mt0vSS1uvyg86TeAdL z%GU-Va+XcjUl9s&qd0~sk-BumKS5=Z-ubIVJ3l#s9T2SxDbH8wGpYxN=RFD`n}m1C z;eHJ>6C0o-hDbI^`a?a2>-tTLQClpZ+m|5V;gzZPQwCE0U;Q-MBqte^VUlAsW6$jV z^kP5o<>}Scyl*C2U3NY@GZ?RP?4M|TuC+X|JBAzk!b?}d5s(pi!6i&Sp&$_tFcZUV zg)pRO9JYn(TS4;<+}kd3{5AXHH4O2<-{t-(aCrh7N}6aHyE^yYM?O@|~isbFck#E0UoR_I)Un5;^nP z=kkA_ukQ5Q*x1ffqD!aKjE2_>ypr?udM#)U(pLJ;pf|LBx`l9r^~;*-v-830?<-U> z)lqL=7>c}l-q~`$e{@KE9YdB0Do6^VMDAzV9 z?k;rU_n67IJ+G*G?Z;Zy`Li3hKw2guedGO2HYQ?2+`don-$(r>e7aLm{W#G2f7j3~ zYh!SiM7G(|ybx!BQ~N2o>zfJ(D z2Xa5d@fL)*AZwhIjdTDZ58wL_5##lT|786>jHb$B;~t1~3-s^)yTJ7}X()vFw$kPo zNhlr7Sj0=7#2BMgRM=og$v9m8JQS;|H&*GPBZJ9n(t6652BKd{Dps%NDnEBslhcjH zozaEDNHjf*B#@A9kBn(NkSr(H-0z>}FN!P;b?PG@lSGMQ=kHr?^%~n19wQ5#bv$RL zH+pa(ARM@QxFZf@i}r9s4#)gi%t?ejWS_``3SU(hdIRw0 zaI4sn!uO#%@a}c%^=*+YWM0BR7O`NF_=$Vs0%+XGqeJ_pK#@CrPeGxWjjYJoh$a9r zA;ByF_v&+?XNWKHa)b~%T%82l7pdMM!ebh1=Pl#XfBhk}m2BByp(DBMV;078>&H

`A_NK|%Rc@$k@7jrJh%`;V*2sQd=jdO5BGpINVg$`#zAabsJ;B4j%r@L zt)VZkZ-%<|Z}Y%&HfZ=Nle_Z+J)A)Y;BE0M@U)PgYa>WJ5YwbsErvF zttxI-7Z{`~-5up-v4}+)cJJh7`7Xl%0?9-+=Kw|2*jYQP~vCq%|bx zXz(Xr%_*4N{R#4FrHZuZf#GM?@c?Nq4AZi|3Mh?#iqX76pFZm$zK#3|Qc8G1{-q#FXJ z5?j5>=f)OwLtDSi-1q*YNu>_*Pf~wf4+`d@O?6b-_bM#nykOd8`eL<_ue6aLhRGXX zhKJMc8IoT%_nEfFN-a?<0xH;;_32m?rR|JW zngBUJ$8>l`p8|34)(jxqlQI8UoAbK^7cS_xR=;NiWEwDUjm3 zk858+Wi7IeO73iO-|)P`}nxv(@^ZQaD66JyQC~vUmsiS_T#|Tux_|}L( zI4&ZkOQ13b1*Or^=9-3x=&@sW1*qJ~QzjI*q_xoQ_UL%-P;C!coFTR`wn*H{COPH6 z$7)hV>T%-aHzbcOPoRYBrO721kBdrJpVOTNeIUAli1(nC1 zZCZin^}Dfw4O9-6xVqg75*=Bh9CE^#DM)p;3lDRhPD%v$^hmQM+KH_4V9KPHuJWns1)8f zQCo#ss+a;6Y~VI#dLt-9I;^rhKP{ukUv5!aIN~2i*oZFg`WMopPlEQ}r#B!)aN~5O zw9)1Q71L^Ilcq!}2q4S($jnB?;o(0c&}Rk(fa_CFG%YS&Qjxy8Oj^L3SiynPLIWvo zqt6*~vsiY&P-`+svJ^P4G>w73NG3V%VoPDc5Yj}Vt>vH{2+|>x`u%egY$-E^KeLM% zp2HF*%FOw=kyq`CR#U@&ODmVhx<0fb>4Mtdyti90p2y6~9!_{~rcxRB75JYl33ym* zwHB3kWZ(r*181!JMyN;M`HPucoya zxf%pVi8!&xZNujFLR}~IQE|(Mf zxS99MmJr}+3OMyg1%BxZ~%ckhw{wJrFY0Gjk;+;Q(X$=%V z?5S=bm?%rj{&94qXXOnV(aifMNvPi&Fdx2bU{O(^DBi)YH=z54eqn8&T*c93W`(Ir zqA9$$0A`a`8H%JZ4LX1;_r;d;{^=ms5c&EIhXc3>oFw45CO7ciK$XVmSt}X#sm|8Tg+kpoZNDy-P{&yd9big~n&$sh2WfpM94{%EF;^GAytrAuCYlcGFXK}K{bmfW@Va%y3|Oa!+j;>^`H+^}Nf%bp$#qrcd&v_Xp@4;!DKG3 zOScrywO=Dm3a9tgesp_#WYSQUpXGMM&Q)rUS_0Gn44qmvk24-xamXZUQK9ULj+sZ{ zkqnu`>hKJ)(z} zn@Orord{iYPNdffU1{-T(RY3U8doGx{^Ze(B0Cw$M$A9;qT#r^tt-BuEs)9PYhbyC za_@xUtI9pF<*oZ!D^xs&e`oM}iU75`E9kU@6Ds(DBP=_2ugLEO5i>1J6rxx(xK>Xc zVUl8`a2P}*3p7^^)NsfcmQj8M3CcEd@4SEpdp#8$=bzzF08sv=u!vyJ_Sk5#4&uci zmchY-Pf>!kFO}!F)q(MPZXpg4x;E(#mXG$V>hZmkpGC^*lAy$gyhv*ZLd)nKUB7(9 z&$85XtCnE1@Ef3*gs9zx52MUl2sk?X3Rp-kzI;l?7-U;W;MyGQpJ<4U7AP z43iCJq=|;*u9~bo=nWGR8rZW-qb#jkoSf85qa!X2fdGfh)XPU3&`Ghyz%qmQh&iV} zkw(Ziv4AAgM=zRJFp0-XRF6Xi5#qSrGGijV7B%K{kMx7I5GFY&eLT!Ynwe6y%)Me_ zeKMTAtR16jhZ0rO?f7KCn?m=_O`xNiL#i#}L|sa);az`y%FH`%a2;y!O1k8vYP%mqB(s&CH?(TK>& zZ$8b~h2PLq`!S=ez2>0H4-Lc9urP#|fCJW^%KEN94*fbB$p1OMp_$AlKYiGAO*_#O zv0l>EGT+kQz=B;}lZ#HGC3S)&+)Qg?ES6p{Um5ki-KWcoN#;$C|{^}o)RFq$=}IsUc!;|f8vMjS;+;yV5eYS!r_(_r-Ef$1Az z={AdWknjB1^y;Ae$)Ni64J(_61K{1&N6|{zxBJ~M7+X_gO!p0`+^;PB@j6ua6&AA{ zEFEgztMhWDL}m4O93)bK6+6DCPrF|qpZ{uPd%8Zs8uzuQb9p z?X_Quz1qKSoot;fo!}Ncvg3vC7v(9TB4>(Bzf2qll!)UEh{8>pQGED^#i=?$^~*r| z-<($8V#AU#?79BL=~Lc3ufK3oeA!u!K;f~WtH=_P6~s8BSoXA- znvrzmyoqk4aJ~E&Br_M?W>nLowN`3v6ACoe9caq-OjX83_8F845|rz#h)Q^38E&+q z(CV)VhOZaJ8{=|oG`^A>mMwDCcnw#I31n@g)R&~6oGEFNzQj2KBn#0u$qo>d= z3k;714_Xe$--V5nF&>hLWSPK3rB-WggpH_+mpwqGq^Fc5c9RIDG018{jY0D+2bcS! zTp^|^gBlE#zDKNHx{T`=kcU67^mX+-a{i~~o^F-<^{?Ee8xOpAn7+~oFjz`Xe&paW zLYNXF@xMVGfNo$~NV9J4JKbv+02m%|cL{uWb+^Q7#o~=zqj`gxp2Of&cN& zZ%6Th1+l&exHi-sAME^pV7Q zCDXT`piOsnd9yQ2_&gU;W_JHmY**CuG-EW?=GuWOv*@F!%jf57hup^&pr4O}{mL&o z!Kr8;i|{j58Yxoc{V_aRjHX=Ne~4KLGnYtcAO7CW~4%C(8QT+Y_bte#~eYr3onJY z+5M(1K(Gn>Z}Z-eoCI;**?ILyeZoasvfaD~l|D!4JAbyM4=+D>#&0mU6IG+`(SUs~!iRN2cVqkJk&c_IbxOPW zK%4Qq+yq;4*T#9Z#a{>=Ux^H2JNS$ppPWfZ^y&Fhsf&}BD&5!bx1wa3=JX1?q_X8w zxe&F}A~vGevjF5Q@_(!zpAw=d?ysW9C{V~?3?69$M;JU-H^Kt_AsO%Aw5SJ}GA(R} zmuG6S|IYjzZ&fr=4uHYz=d|rLq82%xt%qS2Mg;Sp=MRt_7^gt}EtNT3-dm4`M;7+Z z&&ig>`R-o@3&c-Tfc1jmAPy|D3P1Z6+mIIz??kM{Oa^DnD4&r_7CcM>Ru;m`$Pyt8 zZ^GhMo@F|inURX2OesDbiniOAtBRHH&cT!za%xB@&fIFOR1MXfEen`dHCuc;N=g?3 zetjk$7BY}EV@0n<- zlthf+&$f{cG;mR9@E9|WM|cz`4jnTw6FGXAw^@FZGqWlua-v&b!On4O%s-kB8sR>X zhGPEHX5zXHu>)8v0_#psJmjbB&0`n$UD#DOkm%O&hmY7V^EOgY1wYnLWNGo=^UqIj z6wy_B#Ab92e*2Y^GGTmmQ2pJpf=TrCBmpEDOp}yk_0nI0CB|I^)1H+WyqcP_h1N-|hheRQpXDtKz$G!E zDbc_{|0F4}%v+!Wh@rqM=h48^%s=s7GhIOy6hF8q%j+;dhLJdZy{urlzV14m838#~ z8$+hQl~Yws7hC2m`0H5xd3o1goi>XWJ^N)xBUaZ=9Y7Y)xtQXanF$xl%^QInr>c_{U&5N~7|p^=_Qg|x%&-D;IZZ~w z{JvCvg3PtO!Wu_j;5Xt{)^Aapu3&daFo>TaBYwdB0Pm>taNVa%uuG#rhzY^^)({L9iY=Q;}T@%?q9LS!`s+d2l{L48{piWLxP7hyi-#9dYPeBJqrx<8W@l%_QLF`f9hptii-51+*?AYnlJoiza)4bRep z)JF!b{bh!F5#IHWq}XG%1sj#zKCKJszQ9x)ItoeV~%G9lay>`8iTh+FYM*&kHmGe`%oP zTyJ}_sM2^_Hq{J-K%{{CeJqSxCrk{j{7rCRC9`~*8}vx;se98LH-kR>+a=U=jE-P^ zgPlA-U=YhqqULv0q8W9aL{lpDbHsZvz-h^tkBZ;8Du{%+gRoK2IC$A=4udgP@U`64 zz*%RGCDgs<W38Jq9zbDqu2FJKB#a!^vZ&aPlcG9{nQplhY*M^)o4lse9S$K2TN2KO6AFeX zCI&AhFSvZVTao!B{2wC!_>ttNI$s^JAtm$uF>RZSjdj+xWX0KyZXOPrfKtG9+vb^3 zxM-9eGHB;E-gy12ltNalf{ZZfK$hvfL#zQG3oiOdgN4%r;Vp=H*2U#vxDR_bz@(ks2*EY)R;Mtemq^Qe2+YDy-`#kr&yN zsUF3L{rld3#;7VaLHnp$3%83sAD zUwj}49I2pSo1|1Fh-k(M7QDl+$8&5-0QH?Hyq6q`~<&p(a7{|epEZnUv z5H{%X_gk5X3+dP7`kwZWt|8DA;FF;pz>T1Ye^Vn_u7GVVyN~x@&#&6T;4z-=`SX(H z&p|tuG}&Sq zIJVzwq=E)D`E^#~CzH02)OY@Wbdi2ZV2g2`*%b>U6?E*$8w8hI^FkZW^OL@P2!N1g zz`y;kend9Mt$tV}PJ*7PmsaNPXm8psZ*#!^87@F0+W9NTl$h)*y{8E$kCg})rT_Xd zxG1cFLN(f=HPrmkSz&cy_oYYUDobtG3B8yyQ)1J3=&DP?k+PTfXw{t4r}?A=Oc_1VX=|YzjbY7qqC%LiCJ!Uf zm2Ehe0iPAwSghB%J{|z*ay|MSAH3>!rEt^5Q?gAZVb`3*Yv%%s%^D93RvZZ{hwG)4 zd|4CTQqO@xL8HU)j;j_{5tCYmB$5aTT~^4-kjPgbjVmYpF8MQ){YJuiVR>f_g?pS4 z#vQXuBFce*1ZtL-URe4IlzsCz%TE$__8t=wh#cV}q2}yVKzFH!tood{R{NQT zUH~{&Ixh}GD2l(Cv`RWV4Hj8oimjlJy=K_%{ixTkRlkJ-z^TT*w-jPO06S$2G{jW`zG;G{jj%Ed^Xbjpaf<#g*XO0 zetm_UQM17R-}(2MpO;c4x_UM-mzA&NId-JbwiT3#yf3<^K7jv+2mKndIlOF9`(&Xg zjUp7buy?1N#7&;}|Lc%6(wsJahO%OJKLyC*s*%nTukKhCFt&!xnaZ`H;ucGgh9|ZK zN*U!|{2x(g6%|JlZDHKqT?W_S9^Bo7ySqEV-Ccsa6D(MO;7)Lt;6Z{D2sU?y|K4@$ zq1T$XuTIx=SD)HvAHVyZ@baTdvmeFk?f6F|;=b8a&|#(j0u-LX{DVy4c%c3}^IJRd z-i=seh7*;7lGI&a4!iK&q98&tm^G^gX92`Y^gJwjB7Mfj?bksAvm)z3l^z-o7di zr_8n`id~UlQ4PbxP`nzo4KrGmT*kMPBX|m-t}0V-#uD(Wz=nYOh>|2zlQ8cO(re@3 z;Nyf2sG&$gPag}X$a$r@zW(;eCa zpLfpC1V_4y@$P_gNib*`1Q(Sx&U%Z7*0){bT5>yH`VT;5N8mF@pWI3Q_|*A%-pSVc z^OF|re>kVQ^?G*c)aTG6;E+o9I>D9t5R!2Zh_{GVnwt4T`0i@BjH7<}kjyM9^*TC4j6l6DRP+pAhVcWCt-fn}<9dG?^Wr~Lo%>VE~2&DfU*V!x{`%ANHMoS&L zdB5*Z6~?-@zRho|TbW_WuYnrTX5b^N$jzYRl;kAaVd~;v9DlVq5_0p27sG?w!?Q-t z{B~L|L8?***=?N1TQH^~Q@Ls>$~1bUN*$d?qf@7tE-rgGJcGHjU%qlFMLoH+_*^Tz zQ%w!cSw`#2!7shLyK3HtTMPyD-xb==pW_KdcR(c@;g?6xTO!7l6}KX{uObVa{43?| zw^mk{Kt%*pPog|yQROZO|P!lZh!vjid~t&2I_b?vd7Ps z+rK6|C3ZWB6AHawvPuqZE+!O?72^JnR6_M&R+PFNIZ`xF4kqkQ+L4Mh7(p1WtmPLP zr;#lA;NGJqr3l6yBV05lE7nw%$E-WVg`s#CNF}E!5L|tHT1(Zf2vK~3SWOO6$U&H4 zZDa#6j`TZ^RKt6j<$Q+&TP+SjJa#d z7a4zSe5#E)sL-Y|h;%bcshp4IFop@I+py}fE7u^rX(#hVjf#_#AERU&6J$vRoOKmF z9%@V`jbg86)f<@k9X4VuU{f9t4ZD*Oj@~mde;^jkwd%Tr48h1l@)H|yoF91rb`b}# z36M9GV7U+95(PmW-`JkJimU3N=S#(-K|fP~`L9@oIMPA-&#kY2Hch-pFznFFGO8MY zvCoBBH~)gR{cp1Vd(Z%ZDe?A4b_C<6i^Z3?g`d6tKx)b6EE6pH%GD&Mpx}nK@J)^@ zFxt^1#Hz82n}rT);D*WK+F@vA7<^f@V!=!)mShxFzJ;5nj}Fg(-pl`#l(1f_XX`D+ z;Ci4mr!Q6?#o<&iC|Xq_3$ViN55D5on?5(sT`ZBx+fq*adG(?2ViGv{uWv|ahu7RQ zexjDFYR(kQf65F4_P@f~%(@PDm04kPd(B5@4d0@#GqK>>I>VrSD*upYmNPmvy~M7u zVVY3*-)vq%mP9kBJ+Z$_oNSD87R)6yH>V(C~}yvQt$ zMeh4o&q%+Z!H~E;%YMEpR<+j7GR7Kw{qDZ~{`~*L(ftO}zb$Wh1l_X) zz3~Fkw1Aw>K_AF_Y7r^5nT*MXJCwHDB@-ta0;U=S&bv0sCwmrL@`PLL%w8j}d10OI zG0xuS^awoet9^22JFQ*+JKe8)kSuj{i*hpU*z{6mQJQRU&dC#)CuCsH;x_-}hLoo{ zTW+>*ZsH=AC*YG@i=kQGN2lo?^KiHCo z4JX>+($3yHYT%$(3kQ; z10c@m4(vAivXnOmY@UoV>q?(Eq=Qlq^yQ`_2+jV(gQE0)(~=OC7A83@nqdA_HUp$^ zh|SEcwlp`XzKy{kAi#N_za5Cy_XhXoZvZ?)72%(RbycL#$zEH6?T8MPwf6YqS|q{1 zg4)!k4iucUd~1Y1n~3Aq~k3~WZ-9IFoG zy1qA=1!X8!YC0ddxhOf$K1dy43^|ixeN4-w;Yt?f3Kp8Lk90O))EdXC_B3)D)K#(T z01hH6_9rLJ;q)LduSSa{Oed_4G8>(O`Nx?#FW%RW@>|3B-}v%#`(-01*BZ6O-0C!r z1@c+-W#&_y(OFEf=M-u}H^ z*6_Q^e_?iT4k+B?i@E5^C|D|$|EXXoS0#3EDkSi`D8mfn4~6uV0xOgzJS;@EK>yg2 z9AAA$9ri?AOhxe@EM4D2v?}E`(;DHjvjqJ~cv}fEHh8-l0u%!sdA(c-PRh>jTbn^Z zVle+CvmjVMqrLf%V0TlP(Jt4i_ffj;O!dmQ=ngeibeQspZ1^AsyF{o$EjOlP-OyU{ zsVl$s)8lee&&Mx2|7Uvw(&IH6`dyL>Z#-`Ec4>=je?VqC{LWwDTBmP(p=Yf-d9HVD zEN&itL5;`5ByC};K9`zOIHD|_m?}5{(|tEd`Oz|l+S702^Mb=%4aqj9jsuD0V{!{_~;@<0brdbp~{;?ZIo0qh0=KZP1HMq2= z-rBbT!Q-Jt(P|j7ETKQjkBN|}qVfjD9*yxLdEb8Ov08(|eUAXX{x|O5fM5GO2@n2U z{{~JfC)V4bu>MJf`HP|)7&xUuAQzd)oL%lM* zr-rDSW{EiX8;u^Cq)aHRP;G+n%YfNA2E)G^7_XEaQnnK@m6=z)trxdiUySqfZBI?$ z?Lv<5ue z(_HoXx*tvJ-qZKr7h-we@^-q#L@lZ_wHAHf`s=D~F+#+)UT~zQctpLNIHZCZr=>Zo zs5;M%>dam%2%DrdXlkjUw7|O@*((g9uL$cudsRbD}T)Et=2$mf+E+EG0hw{r^jQP8JO@uDxaW z3G3rQ)ZWa^UGFa=8&$w|Zezv%;0UK}Q|$(NJJgcBgL46lr{KpVAB4Z57k_d%O8M55 zD+#ka)RBm!Xo^W#%E$?S*lD!SPz2KJjYdPv<5Vy=LPJn*KK!q+IR%hJ{Gqgu~Zww<1lQ7P7P7?A`tkg zP_q`yUrQej(tq+9ZN4l;!@dHSe!UXne`s*~{Ml-av!#WTbAj{Y7AGhF-^)`Y;Oue` z{szUmnE(1ub=!xrAiGUg3j+;XC|8nQY8Wq2PV;2iqh@Y7L~spx&OUvhCJ&%?&%ILshcEmF-KrHj9) zebK};xT2oJKKNQa&=XaMX|hb{6bG}2qHtS~@VxBfZTP};JT}`adq5;&(3SLb9chqC z0WUt#EE`mCSfDqeh$fFQjaLBXU!b`YD1y*c-(31o@D}t8-0|IaO$-tOWq-GQ{S$$= zKs77&BspwVKOE+=$KtH?a@{A7O-Evt+*nMcFBE3Hh=u-CU-M>Q+A6(E=1p9o;Sf&} zv{8n2I-5Ng#eK5VC5sOrfAi2`A>iR6OH3oO0&KO_l=3r%dDNT5#P~WNYw88Lwm`c# z0N{{i5tYqCr{ZY@*W$tQ)s2CVug*YZiTA3I>HtZ1Ln;6A-(&Ln=by*R-@Eln z;?`uo<`QmW0?tG+xL89{(|LlLp^=!XLe;uruBq_Tad%m6hioiv?FeElRrc-#os34+P>jat9tuR**KEL(%5c$`QhH z=*A0RTw7rhMGf?iM{$AVgB3Ns^iPMd|plmj4(~4^wB*K7Ptb z`sggk#}?~wxoeT8E(X1eOff^_cF9Yq@sW)UDyuM#`S?;X>C2?EipU$%xhG8ddt=REEB_EuY zyc7!g?g-LEJdAdhPA4Xtrv+eOwhj^7->!;{!PLKXI;DzY~ z`MgXr)Audoy6+154(uZkunA)x|EHdLeiM0P6?W>?KEX@s9Z6w-T|x`nuVULpX>N&2 zVF4Hgn^V!NSXD#P}*0mw0 z!2NC2`r$@Vq9}Qn%Z$HF@kYa4KA#w4I!Uj^$+&j;Ups#f6WzWNo7SQV?9R!x`fCvQ zo;-*c2fCl>Du?bKL-~Dqu9PzDKDSMX#~9i}Sde8*Ucx825}TKjtw9`(G8HomEuqMh z6nCi3=%CiLYt73tmliZOFXlnEb@(u?U>j>YRJRLgmgF?ACnHSYM`0i8em!?v+(ZZS zk2AJ_>!&cb;CnTawqv))^|wo2&y6d;k1yV`(JR4xm19E>Ch6>=ZeA^w8ZG5!n0_no z^Y1-rjHB0^|E1gK)LY;6zKB2<$J|RDe$r_Q1Afsf6D}eWq(Zof zM176ZVoAtzf0zNnl9E)nW@{GT?|R|`PWA@6K^QoSVm8e&?%x^=BHmzNb);lD2Y5v- zk*9W<8A(bKze{V#3uMYAKE-9M0CzvFq^cJE2J_F+Js(Ab^)te@^ui{m=&%&9BvV{O zT~$9csZ#BRgFuHmKp^Ay#-HuO!}Yx6Aj+U?(B*BRt=@ZDtK_L)e8vGOvDMwANRvNS zV7YspIrs2$Pn`*mM7^9ugH%CI$sr=Qc2SyNB%WPlgeNWzc?z;PM4iVV)gW3h0u&7t zG)xGxnR#}w(0c};TBX*KOV>r zinT_!k#a47`S)lX;5;BEFt%jt726mrVsos5e?dZ*m=ee`UyGn>R2NE=@sp5~PH3Ee z|NSaGlQ51{k0)Ep!jWOlS|dkLZ>t*5wZCn2k;UgF&UR046O9_lBTrJMI#4#CTGL^h zQ4_MD&owB?x|o42$28cvJoC_0B|24;X$@e+s7W|1S0csy5cX|7n}XgHi+|vVeU*Zb zplUkPnm1?r4~79A5^~PRd0TcVVIzy8%O}&cMmP#$Xn5}@1bkbJU!q`sAUhWa7o>qG zqz+EB4$3SFMqkF^gHL@#Yj9zd0rQ>DXw=B5kPwDi5Ac%bhF2!{$_56asMtH;CsKMy zTIP>0K;TtBT*&g=L);46?xGM&j*a0Qg?A}1ce(Fv8>4;iyO~#hV++nc(Fdrwh64>% zb_{lB{w$6cw^!?#$vtBFGkkad32fDuF!bA=imOQFbgPx{bwL;k-zpWHX#j(GUB^41N9s2 z8f`s;IxnARy!o)NzP|SUB@l9A$B(2*K8Q4$p=v*JHjr(PR3J8}^YtY1efr z*%Sje#658Q%|DhQg+p#cLpb8Uk_ z-cp>xMob~GT6=j<3+-hy|r=OnsUO(Eo|7M>L)Nq4KDRz~b{}(%j zo=sE~$a!QnC0FKFTPD1k6v)d;ka1e@<+n z?Me2Gn({F{WCrcakh2nJq{|psO^J`7YPpBqT;jpV#I26}lJB=0aERcVrDQhh_4~v# z^XJ}hWTqXn8jA_T#FQX;f7@`ayfz4w!fqHR7Z*e$^CYA2L7?DP0>ow;g$I$f`ZP1<86ja<2>g*%d*~BlkE zxtShUVJ->9IblyAm^hcstQ$ZPl&+aNtob4jcP`xg{qIDyuK+r0rh8`DX*B0uIxEmBZ~s3*AoHK6D}fgZWwaR*Ggmm(4?SDR{7a{YNU z;UK&QUo<^mws%W10N})C9df;*Le!kqHi;+ChTXSN6`&ASFR4;p#>0r#ZZ<4lc8o${ z#3^szu^)xk6P=ycw2Yb}QN_=|KX&Q)`Kom^P7}lk<|m;`hkExf4T1-i^%W$|HKu;! zz`=|gi%us%ROY7+CtFU7Z0}W6Y1wXjYge!Bg=-UY!04D%+boR%{+G0R3)(+R`u<3w z^W#M{WI|3uF3Uh*x(mlXE{{1+m)bz!M73UegWZ7&LEIZHq{@#L7qcpy=VvCS(XtAq zk~JExj97qp!6qLdqc&qrwd9FGMmvt1f)cur>zTOI8u%6jqzcM^GyAOj*8XHXf$FD7 z`bRT>4x$t3egDHoy$|v~0r`g{6DQ<3{CZKAJn27l;%$2C7RC%hs9}siBheDm_UjG; zo`4#u2!#TQ*+c8ppiuoaA>9psYoriR29VuFn2l1@OgmauR`|>+CMDF zZ>8XIVzOq5AGL$-{n1%1e1s0Xs5=6hOyF9bm9{ilJoS+@rpaRm6ql-P*tl%+9af$; z`+yYtDx{F2rY3`=VklaLSt4f!0-uhlfget0n?Ozovs6640gPK8CW?*6B9o$`6tiuS zG&#!!ko2v8^Rm?b!TSQZv3wlFyGUl95HB|Chb}Wt&!gtMpu<25<#Itfo%FiXxihI< zod}q^&;~shK;u3KE}DN>8lAqG>b-u@j7AbI02Ketc5|AWj7Y@jbX6PGn|L)!heYwY zoH^ABiCji*P(pySs)le=^H5ApqgtXAZc{3Dj3zOVoX!&@lZAn*lz`2{$+65~MS`%7 zu2nQ&xreP$*opt4PRvAm?^_RCQJ-Sl4_1W{h%~2=MYJ;kQ^>HNT*mQ*DwGL zYI~NXM;P4@;p*zjE{0HSFvdzR1||73xkg;o!a=9CCU~K`4$NOjn};O{F&?``P~}IV zWpdnowyO{i@hLj8e8ikteZ0nGzeXle+IV4X*ms5*4QaHJzv9oaiAUq7(LWapv2Fcx zxKF!k*0J|ZS3bJ+)2*G&Y~5UhTDP@;gu(v2bgB=`G?qm|D^GXU8)ILlJYqto2F%CA zeG$U%C<&ci;iR{~OJeb&5u440k6s#3;6XX~%XLik34@P>diM$i&5UVWqYE=wl!_5Y z_}CQglhED)74k5%%fG?ht4A<@JDUfb1H|CO){lMeL|SqL3<{ZxSk3mI|<@JQyWlF(lf9B9M& zjvA>cu6{r?q$Z1K*H}KWNS%D<5_B%TlU2PQL_$BwXMMBxIh-$!5Kd5w(adF~g6A0Z z2bjM~t_-BV0)2nE1bOjDJ+S;}4*kU2%)>9?Wc}^)$39SafS3C~m3t+9&HCaY&(7pF zW;n@~PVCsItQfdaqRuAm*UpA0K$=a2r00p=>`)l;STYs^4KxYY8Oe+~>2G}x8-*+v zL1<=rej`(sq21vGr*ofAYfm8uE1~1Y`4U00Z9_Jlxq8c7$mc)2;gh`Z396ZNzEyKY0%@Xltf9?*4^uJQB`@~uOJc4xjlS{q#^&`W& zC;;w%x5;l{s@0aIKTq9J+-N~pMx#;1myqWek)_kJR&QfcCY4}ESg-&6h)tFnL7trH z#Ty)V@VJ`q<`sErY_H=wXkw>9)>~HP5okgn)`u6nY7$@hQC${{@>`yEGesKJS*`@>xApR0<+Al2|Qw+8XvvfBxmdcLQ zpJWx3v&88C)YEFXxzO4N=6zfIwprnJfT>XkGLdsSJKxXrKV{CmXOLs(rx1r;|5_?{Hkg*n$Hl8rC<>#a;TO2>Td)(%-@D98H_9SgnY860G?*k` z$3Q7&FIGw5M@9!T&Q??apxSI-+bR*Ck{fpaiCvYgiW08xPdNXlpQj^XG=SIx^^b-p zND+NgCjH@15M=0?>_?rE1GnkU0<>iEx4rPYjO&O7z6LEHo2W-ZW@vu7ZHm4SbFs_@ z?ckoC3Ng$pc7QisPSQZ&*%Iz-tSM9!!~u?eOiVNY9xhJ}M=qpa8G(YiB=)nNF@x2x z+WCMD9s*Ec8m{ipcW%6DXZblI4ks}$L=}urMpoMQLuo|~g&(-8uYcvFZ5#mTx6vh464R=$u zLk!GsL60nM0WmoAJ**&8N+{f(so2QJJ@2=)Nz~cql%y3j9s*>d z4~YS}#)JU1MB^uvs4y5Ca#g94yCuI&RG1MGZ7=pCWiv_wNbDTfRBv=hG=vO!6dg$& zT|h`^g*1c%y_Ft^Sy-fW1;wTp4)ix-mt)FV82T}a8a6u$j)6N`wMaB1Cp`$n2i|y_3tI>|K;G{i%VCc z^w+9*HrCXMOz#@#CV|FK^VwdF$VyN}uCtILEjh2rDnhsfmFQFeZ3f%N3SV`~`&FBv z`BKi`Xyds`euuY%OnW`wp6hR(9|Tm9?aWq1BRf?@bF7-ja=n`Y$s?UQS9DfHX5tH_ zUbCsAt1iG^C|iY9O}!;a}@oy2e{y{CkbTC z+`_Wje0{pulqR+PYo@t;)1%)U;Bripd17nMr;{kESe-UhSw+_=VQ#*Bx}tBFs-DOs z9al0cSQ5*e(cO@N@9mAKfsbzdJ~bfF;FIyIpQjC1r6dP3Mhx5hNb0T|BEo?>Ql&tw zERj%8$K!`fP=EAMZ`E&EUy^=BGLACXhnuq?>cuWP0UEMt^u6UrwUa-V1xMqhgZYW+ znDpNDt0PXZkf{9!K6}He5#8NrOBhI1H{mMr{H(EJb6imBpW4&@Jh%>w`24jRJ+4^* z`fuf{8g`u9S>Glf7Q)5ST3U2tE-^QhNyM>KY5I{8DvB#h&4HP>`ZTI}pHj#M{_+J7 z1hYUlP@r)EXw_ySq%qMGK8jHl25w8n948TREsbh8CVxr|Rvj&oX0E}TTl>N0iTzN1 z5Ew&}cId!4>L{1^1u z8`xEP{>trpnRROS;NbQpf3G3-QUI?ZY%2DUxx`-*6J8S6Fyi!_eya~eX)JQHo?pJI zI(9w5PXdoYh5?6(K?aMf<|?M;YWho5YA;IURW|Tm^UWHCfM;Nh+TAlAfNSi3%O+-V zhl7&mu(5?f8ypX5P8U;-5M2~k)k#*~0{aB05&favU!!m!nTkSTmZBDIUd>B8Z;6Mz z!Ydmg2Ra=JA5x-oKgxqx4Bx`0Zf4S5wnJbLTKd%Ix}#nK$j{%SNXaf}%gdqtIy%)l^@O>=Ai7!1&4~yq-Eqta=h5 z@bO3r$EgCq$(HzNU}IS^bMd1TVxoxo45hz3P#0h}-7^VX(1^HC|H91F5y#G&ulHEk zHC&Xh*7lvkR+zkZ__iI8Kd?Kw|o0RV2`~TOBeh3XzzcaCg zTtldZ4G!gN2FcW)mJBDKRL;&cG7EkfEvabcbPiHA*toiT4UV!5OHRU)2r{us#O%@u z41T1&lCiLetnz2D5Eu>!&yXQWN)<|Nt7w-lsW=YR;!J4kXY;L0MnaQ5F~Q6^shnt8 zw&8bDMODcG-YUnedueel0v0V?gOxF}he3&6yE$&JO)OJxZ!^v*m)f`;XLL=jM3>%* zy)y_6=q(&25HCNH+{}ovAoyN??M7F73fjNPZ<%xQN5|3#woXMzQT(MJpj#~xhh%1NqFVGx4-9uaN4(;Lzt8) zl=5u-{Mw5eFeG?f9$8hl$~#82HZ0G}#tkIs#9W-7@>gsf5vA*CY5K~5Dutup&#xnC zTeh>o^|LzT+zQF#rMt0cB(_)oLJp}>D`v_^u%X&Y@o0%k9Okip<)}cIw0ccj^#m2J zAis@37G^;lztRDv+MgwY_FMjmaMKVyqW==3sY;*BFiGHw9eeWRsyuTddtG@r{qE?| ze}iu>c0Kcz%JV7`*-qXa`S0`Z3iljSlr_b|Pe_AHPgVV#Ht= z_45mYE~t`*`&X(5oC!rfcK+PzQmr2FON|qUkc>DnE4dy_5Lat9%&ZLhbN{mBrr1z1 zY7AxqkA<>NGMm38=d{D+WQPalK5=dtZx-Dtj){eZn{P_7Nuy8mPhgX%&PFT9(*x2E zv!$H8*OM)?MSDoTN?>E9e4@D}j_pRX+9Q4ri6$0;i=bsNvmX0!Ap>lX?K^eyIy(ej zgff{AAMFhpMyXY&qjTq>&qs{u!>m90EO=khpUMr zR<31@=k!!Tz_1xB!M$4k;Kva~U~DX4HeB}lC{DqQAXH}#a~u~jLes#+MbrnQKFs9z zK=IRJxNm#tM&9?85Aq9{1<5R=m(KKpAG7Ldzxjd^RlI}>-OJ5~>vZoJld=YsO zsX+xkuEQ~0`}p5n9$0DFQwTkL3$6j4kL|62obBzFwcUTf{7cjaApI3ce>=5sV(>-7 z%FE5NccYyvclr0Hu^so^Pd2RQ1WgenF6}FP3cUtZzT}jp_FMJn*kl>#@_Tyfvp59U z>~;OS&}rfd0&IE-h;zTrcdh8@GN;m6TpqupqKCEai19;u+9vF6;Ghdf98c{>~07T=k6Wgb{i*ke;05 zaF+g}dgsA}jg_v9noiiEujYaE&*A$J6o7CA4Tm9qO#};hkDp$FER{U5KvfJb6e4t3 zDOoFRy7h7XQ1pC_QZ!jy0}`PDa?-Umuclg1x_nPuaxt~bjo-6ItQR(XYGd*^ws7sQ z`$U7nb5Q!PiG>ZR=fc#Q%dMKviAx)Ay@8zfefNcRFV;aK{3|1Yo-utRj__&+i`(1p z`Ku!a3y^-*MrYGK`i5(x=j6NH?7eWAl}pZ2skmiuou#$I;F8%!RXq|u)H5Vhot=|7 zM$Bw9BfRUvr0wrYhL4n$SN*KmCEDn_W+Hib`kGgpJ0yQ8jzU~MsQm=|@J`mo5qcs+ zUrJI|wK&6(uy8n`Mi%TuQ1-`R&W4*_3VS{cG9FjN`lh^A_~|m<*v)u({o*GBy3o zOKW>8Sg5#9RG`O9Mg70dg!GndzDO zlxAKnubf}WFMfEvE~m#4qk`AZDf0m+{y(xe$4x2CGJ~gP1nP_uc~B>zOY{HjC>8w7 z1GOQ}Z{B%62Ay<)zD~{_y#)onP4|`%dF2M`^UeF!eNZh*fwdZ)*pL|KiV`qU*3ABU znocNQQHLS9U}i5#d{E%Tix9SofP)T`3W-H9d(E~PZZu9i7{YhyD(3BFVfK^>@=I)odC0X z|HsLnZ?&B{p?$&;cvHty|3Cf+eBM#cou4?hjvs0w*Z7xB^XSsn4g%l^!+Kp=}v;Hzq~m)#HlC6zW>M z6>$w8W+r+4R`h`5qwM@?WQk+jtazJu>0D5x*VS^xNRAK}lWc*3tSe9}+$$LH*Ps)|99vwhtu0QL05vbk48JaLp}}OeIoM|2HmOK_i(l z-=zIs|K7`kefq9{pz>&4$)MscUK&K-60^#rVxD68x0SnFW){1YAzlzs0-H|Us%(5v z2aT*qP|y1#nU5G+!K93P$;ftkKHbH*tmOZ&EdVgn>-fQX){Oflq^-DE7YklU>TK}k=YPTpV8!6O!rlww9?&1F6 zA}xgIv`mc8tQ0_zmk!mctj-TD-pE6)Ryrm2QZ7w^&Tdy7?--OI0FCFz-OHUm`+M>o zhb%X{qL%~sd9%zy@cQv$J^Kqt?;&@Bq(DcgmvVR$As$AkeD1q z^G1)#N<<6+tcED(%LXH8%_w})MTIy>!)&e=68#fd*K}#ABi8l288`b50HVh?7>jE+ zsYr~3!Af?dc4WsFJr3K7B=w${Ukde3jTSf!Wl#%Bp-+kou)LKdNN6F-6<1Yc4ixuv z#65tu^`N(Y2k?vM|J@8Au(1#L0Q5x3*Qz_x_=3`}VB`F$HCce+-M`wAp?e*qzg6F| zS3BU<$Sp@qla`=pM3)U_3t-h6Q-c@)=*EPbX;Mvxm;maFECW=t4N@TdMCa|O2j%|Q z&5tn*nbvZ1{DF=voQsz>EzagsL9VxIqsc$>;D28A?5@>Xl;Iu)-k#B{+3<;zA>{|$ z5|0TxNz__d0&_vnv$x(oaAO@H@UcN;f1dFVxxa@QO!4owOpjKEv5`)3z0^qhulXm@ zwN>I5e-M4R#F`LvCFUyTQdxyu-u36cbj%?A%sj>xW=B=k*Rt>d&KMX>$jG?xQhAG} z=60u#u6iH+?!-~x(Sbk2N7XZCu} z|K2{KwIaF1L1h;ga8&qex3j%|b=!E|ShJl2KoO?3tK^F39{lOJtwr}^rf z6wBk@-(N|b4g%2-vjv;Ky6Ie(^Xk&17_^YMo?ABC8C?t}uBDHcMnzC$j2Ty}4SgZVHm@ zgv2KnMkIJPA6Y^W?g!w@7}dWZF!^#HNM|Dgd;$Hq3^EP^CdD3Kto1n8TP;@5)$w^u z+2}q-!Lih1zBy9cU_0((@%N_uZfA@``I>(26NSnfQ}`pc*vcPMwJ1K{)r6HL{=@VG z9hageJHVp&XWCbSSX=P_*OSiRKmS!NrImmRRVgh3Yb4jF4fY^@-6^?6d3Z^#ds8!& zwXV|*#!7c7wrZ^mBs?#^zo6t+&<^kkAI$lt00Mjq`Z>DY2Yd~+d!jq!lN*l~j@$ z#}l1vfsDi5<~b!YFCV2ec1DW@K(6{~k-dYExw@qj?j&RR)M1IE^zyrYHJ0W(NdF1) zk43uUL!$Aog!S-zytM1wXcj|}-|o{}@YzyeZMiS>uYdcvp(azEp#n6%`rX0TNk)56 zjNUrsMsiZ>-2Mv6*Pg93z8-?70~#;icvIdc?O4Q{SvC@7n1H`eagsVE?=#T=v^)mk zng%CcP8=RJ9J+2dpJb)wpWSe%r#rPVwZsW@6_hPoI8bopG#M9CkiraNRRFkLUu$dR zOJu+4wWz14>!p|CnU5GM03aaqUBL0LpbG%Szh8Z`lt#V1Bbb2O#D-`_r#lDu8mO6a z-AOyHLf6~ur%xg3r~DCAw=^8Bfey1QNoe(()`@@ms0z{5%wzKYh}_=!DF~YBT=v@d zeFDJSYf|I+%QbriWhUt!-C1Tnm$qm#vvO*psNrd3EIWoo<~{lrG@;pFkl~>Whhe7f zzr$h>2lg;X(4&hHkfSMPlRf&`sytYQ>NeHker7JokG^7NNAhfjs*d%?!<}n4K>b2} zUq9VULU17chU(U>2wO^#?S{6YQ_!>JXo6kqUSNz0v%kRupYJWZFb{utwn?TQU5F+J zySv&9eril{)srlp9L&F**IAj{2Z-Gs8!GpA_E#avOJj1Opv-CFc-(VQXhnQ^*opZ5 zey?U$Hhm(0MATSqc9vfPn8|twnAOjU$4%YR8r zQ($W+B89$-Ho$A!1)Kax=f=Rx=VEs@JW;A3-VA!zzx6W+j=bwXtM22lJzIaYSJ)r+ z3jb?n8lKzh#u4R;Z|2)46vaEJCB`4P@ff!>h2mG*^g`TUkgRK$-R)zRj*EvGa~f=X zdS`z;emnkm_Tc2hyZY79eJpL?ZynU`2{}258o^0mkMUqlj}g?GPgn|OU=JY{CMnrj ze9R*rGtVU6#e?-|b&b?5kR=j03I8l&RwGVYj%2U5hwW6P{r}> zZmV;$ymkif7QB9bGM<6=pQ>AxPt$@KBIN$ayw#il$P{K#*Z^V)UnM6zY3r#;=_t}j zYPBita|;`X#dy>&LW|cfK1Mj#up&wC+=YAgkEiwrUH=k$Lx}}&a{d)|6Qwxm_)P%{ zk)cg;z0*E%veK&|>M={8AP!54Bcq3_9tRSNl~Z{Xp9MMm|;{^Kc%;g zmJ7nEAGxzo#A6^tK#7eKl2MW%uB(gc7e4w|N_DMuelYHB@5^Qd^Mh>QK<}@8)h%71 zQa7+62#C}T1RY6EIprcVACy5wIa_FQ;#U3y6n_f7^*dE-`9j)XtsJC#PG~DM_8dwqjl!qYCCAm|C!nS zSU|<+s5P`(e2t^VDxXZOa%B))!dt2aN$q3^44_?L$IdD#etC) zW!I8Ny5i8Y=Ndy$Z5%iQ^KX4Pdjp-{&2MQnEs)h`aCZ{DTCd4VCL0Zz+s2=CA#;#N zg;ba+MHexS?|I6=(28M0oj|i-S%!+1@h0m{P>b1crt3PSS*DeVR^Q`(zYhum&*L7{ zAaLatSbq&erfRcC`6O_xPovA~A&H}Z@F(qHw^;Lxl$VpkY~31z-2zKqPq{KwuY^{a zOkz#QLGl(6og}@`(9c|5Y07=nE3uQMY-G^1QxJl#gEIIxxjF?S#vdejay>f-F#qhk zfBu2?*5P`@QHK5-5Ak+~eMpZrI`GNB+4vFowjaMDuOIM-(oR7F5mi^UdgjWL>A0JL zWdn6%B8%%>dT%>7E?2_FX=kA8iv^aE>tCU@^1G4uSpYXmyBjw|+TX|>BcNfG+0``_ zn+V$3b@X&K?B?bb$tn|u35TXB0f%_D4}T=R7%WO);KLFANJ59)>}h0i(I(MU$^ztR zlGTSyszPWMSOQbPCRD$_O*^r+=^+(HFFuOR2uwh%agcmG;bY!Ij z6uQF7MiTQmroL-v;J4p}WVe?uGCQxeM9*e1HXdvd)C+=psMoSa1Bb2oD&+LVTptwL z@$~xJnzDBUuI~Sqq%{T*6E`gUiJR@)GX~v~SMSl=l|kn}DFaffiloB_p|F*Qqo&@> zK^6m*+rE*PJiKM{i{w$m*i4E=sj6Xh;fA;hh>S!v4&*V%=#XNYM!uC;ihktjAF7Gv ziB^REQBLH7`8(MpZUVskWjTlIz5%Y-!1> z)KmEv$2vvtV?hPe!b8(EnGlH1innyWT+)axpcwohU@tnRNy%|?E0L^&=6;#l*A{B~ z5Bq%`k`AVB(R%883}UFt@iHjvz#U*)<8%=4w7C}i>+B5pu*nT< zKggZ4V=RlRnlI-xXc&en-W~H}WYl6%W-^*f9~fm9UmWJDscAoZcxeQbl+?{m4U8&q z%GbokHm@&9QFL>>ghJ(%zUx10>6wWvAm);{26PXbFq%xnA%0l^iZDF3_xMlYBr7Ok zm@*iNWK5$kz80I^FFRuWn_3F1H(O4?>sWT|vddX&e|WP^N>T~@*8J*Pvprz2PME&d z7Mr1b%z&@;&CiCByCyk9otPNP%N6EpjW(yAnPx0nf7@2p^!V&<{L$hWKOK7 zVW+zncKWR4Owh6kEyLL&{NP#(D+XT9T}mi2ov5a)Y%e9m*Hr@%s z;Q05@`4cgN&QE*VlnPpbO!OtGCD|{Ww}l^e@hv(X66?3t^rq(+AilP(T_Rh5&w0qb zSbe%WG(WB@6FPofXlyL+bBNyYFWCND()ak#n7{F|_)wkKnd?8qu&|SG9BA>+)_Sz0 zXov&%NbRFBc;AM4gqIS1yt`;b-QS=>n<{ z#lT;@JOUJ5XcPoE)NHp;UOf{Ptz0mOvempl*}e!VY!{32}}zDXM|VQ zXlMj}f2K$yVZ4<6JfP3)SJ(-9eE{FyR7G8aTtJ&Z3S0dzADXQ51`TV0-=Ci^ zA8s!fHr^IGF!r;m292YBd4u^+RSX1dAoEutSn}IXbZ>p6YZQpeSc)Z$?)W%-`Yqst zaW9X7g+YBUJHDW$3@p`2J}{GU`us-l!)1%4S&cb}RU*e34jPIlz!Od{%27r5_N!%- z=UM>M#OE&=FHEI2oN^z_cpT?uCC*PGw5;4HaU3LYqr>}@v7+KoO`3Epqrbg!QLJBi`lH-1wt!;56d&1lG$C92B5*4X})^2@Do4b)Kuiwv2IQtRJTD`P^xAxY%X zetZJG?!2~h=_|FjZC~M6ntF4}&H!PvFu2+Batoz?5jeGSRbkew0{xXLmE{PC7;$rQ z%cm>?l}00v7sPGg5|uGHch$L||2>j-dOAD_m1FiKIjUAZ20*)rA2`XsmcSvDI8Q&0 zF4z`kuz21g!WJFGz5Z!Uiu-!ecUgH+8kg3%{euE2YF#r`t}Vw+e*fZ)Uy7w3Tt5Y_ zAECC$@~}beywhjAwafj{Eb@xhk1-_KIaHp#ddTAX1fE&&mGhwQXcPGfuLPrcFh=Ri z_giaTduVH<5C>&=$&HwPvQ}gsbwz7bOE?7RY}}Y(bpn27Ni-PuQcP&c2ec^EWpR8B zX=UG!F|kbH6JFZSef;uRb`|rV;ZB9U@ryCxP=WI=i$K5U*@CH{b3RX*w5c+f2PLRL zaPOWou*q^o5is~29(;Rw?eqlpVQ)v^TjyU*2C4FXd{{yvSE)L;wpfhwTirh6<@;vz z2(kDtfY(gQQT}!#XT*hta|B#6gZt8fw78kVNf_puAH)aI2%j41UOwPIP)FB&1gXv*NFv=^Dh7N)!+ zZr}K209IiA_U8Py+eMA?ML2ZxJbJ!;s$Ls466)8l|A&3ruaLKs;_gm`&f-kaPIi&M zU7PNx+i+c)32;dM)T>COkVGSb-t1m{wYMKGrrCmK)ogYzkgrFFn>ZR>hCJ0RZQY#d zXk2{wdO9E4Ry->4g=&xn+l&!FtT(R$dO>ZfuX#+mB|H9LGij`BEKN(R4hs`&e$Pt1 zA~PDc{vf`O;$&c>f}KZY7F&2U+omQ>w0PsZIP{)BQl(Evd*8o!G@ahRt&-P1dhq?S zFg?;jOiQYcp^T|_@6cKR+{Fl>$c1piT`nMtD&9bo<2J6%N|nxDj$S<;nM;(W(e67Y z?m$Qr+ggeiS@t!0<*=T1kIwCLhFifdL~*S8;nBYX&aEGpr*R-6)VwLiUbc(eS43CE zKE1MHyAgDB2r+vx#&oLYeFXKY0TG5>h_Z9M4&H|g?l{8v?+c~SM%wZ@g2A_7vGpp@HjnkbwRzv=c*BDM&V$6d?ibTH^3s1dWGoHyPE;TG&K@>JNnJ z5uB8?V8dR90H;y&vUnK+7Q~8*a<}QlEN@k+69##h;vjbluvn_ts=sJjs2vy6K0Pgn z*wE%xhw1*se>Ebk_+A7)Y}b6R+M{%dCP`4g1yp? ziB_BzkB6sKJJz~{6|gt1zDGHqjD|pp8B$!u2t94DJ}-aLSWiYI_{JYhI}NVi0sFT{ z-ylR&Gf9W*$qklJWyEWwpK6nEJD4TbM#rGqoP6Y{Nkb!ogk*qmdV!neh98zph&AK4 zd3oxGmf;-#Zdv~cK$(y+J@euMei{J)ElCT7R`x4QajX241C#hy5Q|FV&fVK`{AZiB zQ_!uo_7v|lBcikN@$dEGrppU;0zv8c@gbTo+*SI4$Q5{RrMMK4!xZc~J2haJ( zk0OrtI#)(Q=^u8<>g6i>t%sXE`)~ZY3@`vChy^7epO2S5eJot5SMs$`V>~-(agJNw zh#L{3W9G>ueyDqUq^KR}enEG8{x{+kdV zA>8}afwk@57n!29nAP8wtu+Y~09@{DCMsAhYgZhXUP4k62b_fH~+l?%wLkSoDY7G(v%}OVd}hX z?E6dzMIc)tgGez#1~vN8dOC40A}P8fKdz<*;B1?lG2tG=XP zV%d9{>5se2kr4eUXAp%B3GzD>OvxS9H@q=FgfeUx#aO+?$<;qG@l5op>dn8}i5fl~ zRFYIDZ+2WT>qJFtW5p8l+nfg@?{MvBt#)7p2Y+v}yhG7j8@zKS@M&1BI2>eB!%#40>#f-^Y=6V>cV$dRl_CtwCWVYGOQLFzUZm!Hi@z6* z5)@c}0s}0$P?eHE=*Ebr7`A7CNTs4ycZp(hkZhSoR}oTNIrd`{8|3qy{bob?bD?I+ zqZI{?_y`9!1WSnE%eUjx1>47EL5&R+P(t5MMNW;rp`5WZA_bt(LhzTWa5CVLwphiw zeZapWp?+WU?C9@9J;7GItxmBHlm63ZYSJ}LFEHW4>zV*sq!g<|j6Y>8F4}y*)UpWc>^$_Sz3}<@^?>#MtSB>g1-hac}$?v|E*6{$b$jtU?`Yn(z^AKD;H7 z2wMoZ@VaUQJf7k=K?w7bsZ*9ZlucC|GfrxQzp#l_Y$lI;mwEbms@p9wRbk1_w;!yC zGBwHBX{nnyl{LB?G}j!KY?*?(xLoUaTUC{oE4bl^$JJVbx_Lpc4j%5jIjG!t93#ghI$COijG;_kr{8W^el2 zP>48gFL?+_XqYyhb`Elx6A|DdLZEYa_SZ7YUos{(Bdzhi{B4NIgPh?rbmVi4QXdV@w1EFW zk6dJacb>~b+FW|+zbcbSILOG9EEyRm6)G}lXgSni);Pp((unv5LfE^KU~<01q^c0E zv+E%WLY9Xd(vzM0w@hAMTy=I3EC zOR-1^U#n1OVF;)qs^SoHx;b$oCq3x~lJHuhfbq)qrtR$#eb3GK>Ms7@a*%VRfa9`v z{r^vTE3kfe3k{g=`{1(><+9&&XB??4yD)q!?~Ub|hDkfl25ZtlcAq6IkIcFc^4r;E z6oXOx8+du1TQkNLWMljEZ2bfds&Fvq^A06S{O!C8BSzHGV&cgk1{*V0_IP^Xf~ZP~pWs~L zm}ApTYUhg9z7{-GNNkJ|9F5K3u{O-IJ+jrdb?T1fd;QuiYY&+m#1;zBCcNF!3`M+Z zT80+=@ORzRg=p$zdbR@d)IQdPai3Nl^=}oKS4C>f7%R)qkOP!BCu3;vNTJ^)P~nrs z_!r?}iKGQFQUOI?6y41u^WpSD;B|6aaIUL){##lA$p-@sN9027VdR7ahbDm%mWZD2 z%T4+Ds#Dh<%v`$t7-4lZD*}W3k`mfxjn?lWE)l4Bw+KEmDBA&|pK>VDTo@#ONT7(2 z2-!zaflJO`AoQZ;_&K`X*3UUBw1pkSC{mA@O(aAvL|kYh5oRS#+&U-CdC*SNFAdc7dJI&3?;m<1 zQjg^ev6>0wnDSNhRxIUKYrF~s9I1b=`wCkGmr@-m!WA>rP`5k0drup3SlyY$gmLJ6@RZr?yMH8Y03tbCx!TDZ4 zEhuP#%V}|$$sYoz$g`}qik_My`)oYBJ7F|+GmJA#jy|9}6Fo6@N_!PBmv1+2RS;YP zGJb3PeFLomtz1f=a3N<4Vx{YcezrzK?ovr)!y|T2qZNHXHYh<{jUbY0Svk^bT!;^6 znPhTbz!VAOIG=yxucFm-c-Iee7^*P~4k!)MUi-f~qm()&TZCMMQsdTY~tFhLF`kp@>rsHw}^M`}o z#kcKCDodH|tNa#K(jg@|bb$!J9t5x>T*+o^dwj&D^H=Uh|M^ zEiEz{Dy-^o0n)^mx*s>EZXcxh2cKyj)T}(joJWDX9tn`#*&?I~5ikjQAM^~5P^eYt z_6_Db0o1lIo7FAutL*t9N$N=D@D-S!&shBqgi6m zR?1jXC9FB0S@8M;RDEgaYD}6UQl^G>Zi|45+DfD0AN(`yAc257MXdTO&4%Uh#)A;? z^BeyO?=aXu>Ic^Lb~5&@JPu^ZoSgNn8h<*-VOY5;%xju7SpQ0)3TXQ`u|L1rRfO_& zCU*!|!z2>McR755*z4DQ*EY=RK@ZaNv*Q|02Pk>=gla;7)C#ScM5(;gz0|d)AN*Dk z!uuy#gD^h(kt%(al<2^Qy=HV_eu-&2Cy{v&iIpVYoGUwu%$I+ZVqu8`G6F)2F#^r- z$8YMx**@=;O;{no_i871klAP+Hq7KDwHrci&_9-yp0W4y^8to!xcB<6^1#Iy&@zY_ zL?1{nwt(@?z>9&9yRevi!tpygN*?8@k&}$Iz3$Dh1Zc%0w~(H$6T9n1J?VK2To(Ky zykpG#`#7_VYa`2jO%rdw@ptX?Sj$HlFYcRsc`7+4vE-|W$u3EFBn-?2G!nY9!-@C= z$`%`>f}@Esg2OILAoWJOcL*n%!1%VwW3OUf8Y`8S3Kf_SAI_9P!~o2~3ly zvY|-U(}o?9hPQkC?@I=(XMF+bx(NEmr5Rv&_x+xfA5zxHcaSS1UFMMYPtsuQDsl@KG zeKxBbbCctM`-9&=#K~T6<@#|CDTr&uWo1v(CpSH1W(JEU2S0J(FEQGZB-VTXrgK2u z>3jbje5neYxJF;kicXJn#khs0RnLON)yXl$;ZpDane~D$U*f-klgI@_EQ0E=toFXV z-XghMISx~#76<##IvdL|@I($`6zVj2N;Bn%$(yZ;xXb}b@uc$(-q@q*Qrc9zo01b> ztiCM4g*hftDq=z3XM9F1u}6nFccd>3 zEw2u|Z=(0fWGq@_(e4NfH=7}-EbwpN*a77<|6nwvO!I6~DeNLZBg13=?ny|pnYo6` zpNCV~@Wy}1+I{N##=q9z#U#v0KKB@Z2{4^|p5DB>JPdg40QbJkp~Y%XRj=S>cw#6b zxl5lf(K&>r=q;fdBmso-Ed3b9poBRnAD>vFmoeIuG9$I}IOxQR?~{mEld&<=l%Vn> ziAzdJD)Tyq8XxlzZ~fvDwcv`!4RuYB%MwBFsU{`#lcT`N zbveU16v@sBH_Aat6=hn?5=Ic9p9LC>D(mtFg(}J~5&B^kc2;>&H;Ul-`nM zvMZ8yl9LcqnH)m1kM?C+9DD3^TDIHA-^T}{dLl#oRTmMWaQr;Ai()hMWp)`yX=HX6 zE!bNVMhwgMQ!B3hn8Q9q$s?91m9SciPg~(f%O6~`51K3XXc%)r#v+HocrH*~aAQ`h zaep%CeC<8f`slm`${#>@5!`w}lmflp?%cj|++M|ll8W;8{bzaN_pt&3951@Ac(3W+ z{nIX4+Q9l@JCkkS?&u9e$&h_oGudrsTl{U{*{9fuzYS?$n9`BJReCu7LKe?y9bz`p;#3f_V0cD{S9DV$2jaB%Nc>GULFB=r zi*ult&`5acS%s>{zB6Ou1)`u!ZCI41-t ze4tv23YG37+&r^PSGweW9DCz>bc6=9m5d}+DKix+6(SZVC3?OX5k@L6xm+#P=qeRJ z8b*6E-IZu`yMvemVMq^NF}&MF#%9s^@anAP*VjJdb2`38c*LI>6rM^crqju>c#iv`;ztzZP<<~||&cu|8 z&8kn`>ePoNbX9T7YM?QUcYom722-gY$_4pQSraFddGr(QUZ~ccsy1NS8sTpSp^$th zoMep1Ib!&5K7z?yV}ys~RJMCg%E^m4$#WLc*XUAx)SHYM_90bgKkv+i+YbLP!n33w z5GS|fqBBPS1yb~¨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 IfB(b(197MCfB*mh diff --git a/website/commands/deafen/index.html b/website/commands/deafen/index.html new file mode 100644 index 0000000..da9bba1 --- /dev/null +++ b/website/commands/deafen/index.html @@ -0,0 +1,216 @@ + + + + + + Memo Bot - Deafen Command + + + + + + + + + + + + + + +

+ +
+ +
+
+ ← Back to Commands + Moderation +
+

Deafen Command

+

Prevent a user from hearing audio in voice channels

+
+ + +
+ +
+ +
+

Usage

+
+ ?deafen @user [reason] +
+

The deafen command prevents a user from hearing any audio in voice channels. The user will remain in the voice channel but cannot receive audio.

+
+

Arguments:

+
    +
  • @user - The user to deafen (mention required)
  • +
  • reason - Required: Reason for the deafen
  • +
+
+
+ + +
+

Requirements

+
+
+

Before Using:

+
    +
  • User must be in a voice channel
  • +
  • Bot must have permission to deafen members
  • +
  • Your role must be higher than the target user's role
  • +
  • User must not already be deafened
  • +
  • Reason must be provided
  • +
+
+
+
+ + +
+

Examples

+
+
+

Basic deafen with reason:

+
?deafen @UserName Disruptive behavior in voice chat
+
+
+
+ + +
+

Bot Response

+
+
+
+
+ Memo Bot +
+
+
+

Voice Deafen

+

Deafened @UserName

+

Reason: Disruptive behavior in voice chat

+
+
+
+
+
+
+ Memo Bot +
+
+
+

Error

+

Please mention a valid member and provide a reason. Usage: ?deafen @user [reason]

+
+
+
+
+
+
+ + +
+ +
+

Required Permissions

+
    +
  • + + + + Deafen Members +
  • +
+
+ +
+

Cooldown

+

No cooldown

+
+ +
+

Related Commands

+ +
+ +
+

Additional Notes

+
    +
  • Deafen persists until manually removed
  • +
  • The bot attempts to DM the user when deafened
  • +
  • Action is logged in audit log
  • +
  • Cannot deafen users with higher roles
  • +
  • Requires explicit reason
  • +
+
+ +
+

Common Issues

+
    +
  • User not in voice channel
  • +
  • User already deafened
  • +
  • Missing permissions
  • +
  • Role hierarchy conflicts
  • +
  • No reason provided
  • +
  • Invalid user mention
  • +
+
+
+
+
+ + + + + + \ No newline at end of file diff --git a/website/commands/index.html b/website/commands/index.html index 0e5c8de..01bf4fe 100644 --- a/website/commands/index.html +++ b/website/commands/index.html @@ -122,6 +122,58 @@

?timeout

+
+
+
+

?mute

+ Moderation +
+

Server mutes a member with the provided reason.

+
+ +
+ +
+
+
+

?unmute

+ Moderation +
+

Un server mutes a member with the provided reason.

+
+ +
+ +
+
+
+

?deafen

+ Moderation +
+

Server deafens a member with the provided reason.

+
+ +
+ +
+
+
+

?undeafen

+ Moderation +
+

Un server deafens a member with the provided reason.

+
+ +
+
diff --git a/website/commands/mute/index.html b/website/commands/mute/index.html new file mode 100644 index 0000000..62c0747 --- /dev/null +++ b/website/commands/mute/index.html @@ -0,0 +1,214 @@ + + + + + + Memo Bot - Mute Command + + + + + + + + + + + + + + + + +
+ +
+
+ ← Back to Commands + Moderation +
+

Mute Command

+

Server mute a user in voice channels

+
+ + +
+ +
+ +
+

Usage

+
+ ?mute @user [reason] +
+

The mute command prevents a user from speaking in voice channels. The user will remain in the voice channel but cannot transmit audio.

+
+

Arguments:

+
    +
  • @user - The user to mute (mention required)
  • +
  • reason - Required: Reason for the mute
  • +
+
+
+ + +
+

Requirements

+
+
+

Before Using:

+
    +
  • User must be in a voice channel
  • +
  • Bot must have permission to mute members
  • +
  • Your role must be higher than the target user's role
  • +
  • User must not already be muted
  • +
+
+
+
+ + +
+

Examples

+
+
+

Basic mute with reason:

+
?mute @UserName Disruptive behavior in voice chat
+
+
+
+ + +
+

Bot Response

+
+
+
+
+ Memo Bot +
+
+
+

Voice Mute

+

Muted @UserName

+

Reason: Disruptive behavior in voice chat

+
+
+
+
+
+
+ Memo Bot +
+
+
+

Error

+

Please mention a valid member and provide a reason. Usage: ?mute @user [reason]

+
+
+
+
+
+
+ + +
+ +
+

Required Permissions

+
    +
  • + + + + Mute Members +
  • +
+
+ +
+

Cooldown

+

No cooldown

+
+ +
+

Related Commands

+ +
+ +
+

Additional Notes

+
    +
  • Mute is specific to voice channels
  • +
  • The bot attempts to DM the user when muted
  • +
  • Mute persists until manually unmuted
  • +
  • Action is logged in audit log
  • +
  • Cannot mute users with higher roles
  • +
+
+ +
+

Common Issues

+
    +
  • User not in voice channel
  • +
  • Missing permissions
  • +
  • User already muted
  • +
  • Role hierarchy conflicts
  • +
  • No reason provided
  • +
+
+
+
+
+ + + + + + \ No newline at end of file diff --git a/website/commands/undeafen/index.html b/website/commands/undeafen/index.html new file mode 100644 index 0000000..068fbca --- /dev/null +++ b/website/commands/undeafen/index.html @@ -0,0 +1,214 @@ + + + + + + Memo Bot - Undeafen Command + + + + + + + + + + + + + + + + +
+ +
+
+ ← Back to Commands + Moderation +
+

Undeafen Command

+

Remove a server-wide deafen from a user

+
+ + +
+ +
+ +
+

Usage

+
+ ?undeafen @user [reason] +
+

The undeafen command restores a user's ability to hear in voice channels after being deafened. The user must be in a voice channel for the command to work.

+
+

Arguments:

+
    +
  • @user - The user to undeafen (mention required)
  • +
  • reason - Required: Reason for the undeafen
  • +
+
+
+ + +
+

Requirements

+
+
+

Before Using:

+
    +
  • User must be in a voice channel
  • +
  • User must currently be deafened
  • +
  • Bot must have permission to deafen members
  • +
  • Your role must be higher than the target user's role
  • +
+
+
+
+ + +
+

Examples

+
+
+

Basic undeafen with reason:

+
?undeafen @UserName Deafen duration completed
+
+
+
+ + +
+

Bot Response

+
+
+
+
+ Memo Bot +
+
+
+

Voice Undeafen

+

Undeafened @UserName

+

Reason: Deafen duration completed

+
+
+
+
+
+
+ Memo Bot +
+
+
+

Error

+

Member not in voice channel. Usage: ?undeafen @user [reason]

+
+
+
+
+
+
+ + +
+ +
+

Required Permissions

+
    +
  • + + + + Deafen Members +
  • +
+
+ +
+

Cooldown

+

No cooldown

+
+ +
+

Related Commands

+ +
+ +
+

Additional Notes

+
    +
  • User must be currently deafened
  • +
  • The bot attempts to DM the user when undeafened
  • +
  • Action is logged in audit log
  • +
  • Cannot undeafen users with higher roles
  • +
  • User must be in a voice channel
  • +
+
+ +
+

Common Issues

+
    +
  • User not in voice channel
  • +
  • User not currently deafened
  • +
  • Missing permissions
  • +
  • Role hierarchy conflicts
  • +
  • No reason provided
  • +
+
+
+
+
+ + + + + + \ No newline at end of file diff --git a/BotUpdate/cogs/__init__.py b/website/commands/unmute/index.html similarity index 100% rename from BotUpdate/cogs/__init__.py rename to website/commands/unmute/index.html