diff --git a/bot.py b/bot.py index 35a0d8e..475793b 100644 --- a/bot.py +++ b/bot.py @@ -4,25 +4,37 @@ (C) 2022-2023 - B1ue-Dev """ +import sys +import logging +import time import datetime import interactions from interactions.ext.prefixed_commands import setup, PrefixedHelpCommand from const import TOKEN, VERSION +from utils.utils import get_response +def get_local_time() -> datetime: + """Returns latest UTC+7 time.""" + + utc_time = datetime.datetime.utcnow() + local_time = utc_time + datetime.timedelta(hours=7) + return local_time + +async def get_latest_release_version() -> str: + """Returns the latest version of Articuno on GitHub.""" + + url = f"https://api.github.com/repos/B1ue-Dev/Articuno/releases/latest" + response = await get_response(url) + return response["tag_name"] if __name__ == "__main__": - client = interactions.Client( - activity=interactions.Activity( - name=f"for {VERSION}", - type=interactions.ActivityType.WATCHING, - ), - basic_logging=True, - intents=interactions.Intents.DEFAULT - | interactions.Intents.MESSAGE_CONTENT - | interactions.Intents.GUILD_MEMBERS, - status=interactions.Status.ONLINE, - send_command_tracebacks=False, + logger = logging.getLogger() + logging.Formatter.converter = lambda *args: get_local_time().timetuple() + logging.basicConfig( + format="[%(asctime)s] %(levelname)s:%(name)s:%(message)s", + datefmt="%d/%m/%Y %H:%M:%S", + level=0, ) setup(client, default_prefix="$") @@ -38,7 +50,6 @@ client.load_extension("exts.utils.__init__") client.load_extension("utils.error") - @client.listen(interactions.events.Startup) async def on_startup() -> None: """Fires up READY""" @@ -46,12 +57,37 @@ async def on_startup() -> None: log_time = ( datetime.datetime.utcnow() + datetime.timedelta(hours=7) ).strftime("%d/%m/%Y %H:%M:%S") - print("".join( - [ - f"""[{log_time}] Logged in as {client.user.username}.""", - f"""Latency: {websocket}ms.""", - ], - )) + + print( + "".join( + [ + f"""[{log_time}] Logged in as {client.user.username}.""", + f"""Latency: {websocket}ms.""", + ], + ) + ) + latest_release_version = await get_latest_release_version() + if latest_release_version is not None and latest_release_version > VERSION: + print("".join( + [ + "This Articuno version is not up to date.", + f"Your Articuno version: {VERSION}", + f"Latest version: {latest_release_version}", + ], + )) + else: + print( + """ _ _ + /\ | | (_) + / \ _ __| |_ _ ___ _ _ _ __ ___ + / /\ \ | '__| __| |/ __| | | | '_ \ / _ \ + / ____ \| | | |_| | (__| |_| | | | | (_) | + /_/ \_\_| \__|_|\___|\__,_|_| |_|\___/ + + - By B1ue-Dev - + +You are on latest version. Enjoy using Articuno!""" + ) @client.listen(interactions.events.MessageCreate) async def bot_mentions(_msg: interactions.events.MessageCreate) -> None: @@ -74,5 +110,25 @@ async def bot_mentions(_msg: interactions.events.MessageCreate) -> None: ) await msg.channel.send(embeds=embed) + @client.listen(interactions.events.MessageCreate) + async def bot_mentions(_msg: interactions.events.MessageCreate) -> None: + """Check for bot mentions.""" + msg = _msg.message + if ( + f"@{client.user.id}" in msg.content + or f"<@{client.user.id}>" in msg.content + ): + embed = interactions.Embed( + title="It seems like you mentioned me", + description="".join( + [ + f"I could not help much but noticed you mentioned me.", + f"You can type ``/`` and choose **{client.user.username}**", + f"to see a list of available commands.", + ], + ), + color=0x6AA4C1, + ) + await msg.channel.send(embeds=embed) client.start(TOKEN) diff --git a/const.py b/const.py index b4ca0b5..4aa0cb8 100644 --- a/const.py +++ b/const.py @@ -12,7 +12,7 @@ TOKEN = os.getenv("TOKEN") """The token of the bot.""" -VERSION = "v5.0.1" +VERSION = "v5.0.2" """Bot version.""" LOG_CHANNEL = os.getenv("LOG_CHANNEL") diff --git a/exts/core/__init__.py b/exts/core/__init__.py index 5ac8cb5..7be1311 100644 --- a/exts/core/__init__.py +++ b/exts/core/__init__.py @@ -24,5 +24,5 @@ def setup(client) -> None: datetime.datetime.utcnow() + datetime.timedelta(hours=7) ).strftime("%d/%m/%Y %H:%M:%S") Core(client) - logging.debug("""[%s] Loaded Core extension.""", log_time) + logging.info("Loaded Core extension.") print(f"[{log_time}] Loaded Core extension.") diff --git a/exts/core/author.py b/exts/core/author.py index 812b3a6..944a248 100644 --- a/exts/core/author.py +++ b/exts/core/author.py @@ -4,6 +4,7 @@ (C) 2022-2023 - B1ue-Dev """ +import logging import interactions from interactions.ext.prefixed_commands import ( prefixed_command, @@ -220,3 +221,9 @@ async def _msg_invite(self, ctx: PrefixedContext) -> None: ) await ctx.send(embeds=embed, components=buttons) + + +def setup(client) -> None: + """Setup the extension.""" + Author(client) + logging.info("Loaded Author extension.") diff --git a/exts/core/eval.py b/exts/core/eval.py index f6757cc..2f2cb34 100644 --- a/exts/core/eval.py +++ b/exts/core/eval.py @@ -9,6 +9,7 @@ import inspect import contextlib import traceback +import logging import asyncio import interactions from interactions.ext.paginators import Paginator @@ -33,7 +34,6 @@ def __init__(self, client: interactions.Client) -> None: name="code", description="Code to evaluate.", required=True, - autocomplete=True, ) ], ) @@ -94,22 +94,6 @@ async def eval( else: await ctx.send("None", ephemeral=True) - @interactions.global_autocomplete("code") - async def code_autocomplete( - self, ctx: interactions.AutocompleteContext - ) -> None: - """Autocomplete for `code`""" - s = Script(ctx.input_text).complete()[0:20] - await ctx.send( - [ - { - "name": f"{ctx.input_text + x.complete}", - "value": f"{ctx.input_text + x.complete}", - } - for x in (s if len(s) < 26 else s[0:25]) - ] - ) - @prefixed_command(name="eval") async def _eval(self, ctx: PrefixedContext, *, code: str) -> None: """Evaluates some code.""" @@ -212,3 +196,9 @@ async def shell( ) await paginator.send(ctx) + + +def setup(client) -> None: + """Setup the extension.""" + Eval(client) + logging.info("Loaded Eval extension.") diff --git a/exts/core/help.py b/exts/core/help.py new file mode 100644 index 0000000..a86340e --- /dev/null +++ b/exts/core/help.py @@ -0,0 +1,61 @@ +""" +/help command. + +(C) 2022-2023 - B1ue-Dev +""" + +import interactions +from interactions.ext.paginators import Page, Paginator + + +class Help(interactions.Extension): + def __init__(self, client: interactions.Client) -> None: + self.client: interactions.Client = client + + @interactions.slash_command( + name="help", + description="Get a list of all available commands.", + ) + async def help(self, ctx: interactions.SlashContext) -> None: + """Get a list of all available commands.""" + + embed = interactions.Embed( + title="List of available commands.", + color=0x7CB7D3, + thumbnail=interactions.EmbedAttachment( + url=self.client.user.avatar.url + ), + ) + help_list = [] + i = 0 + + for command_index, command in enumerate( + self.client.application_commands + ): + if isinstance(command, interactions.SlashCommand): + if i == 15: + help_list.append(embed) + i = 0 + embed = interactions.Embed( + title="List of available commands.", + color=0x7CB7D3, + thumbnail=interactions.EmbedAttachment( + url=self.client.user.avatar.url + ), + ) + + if command.sub_cmd_name is None: + embed.add_field( + name=f"/{command.name}", value=command.description + ) + else: + if str(command.sub_cmd_name) != "None": + embed.add_field( + name=f"/{command.name} {command.sub_cmd_name}", + value=f"{command.sub_cmd_description}", + ) + + i += 1 + + paginator = Paginator.create_from_embeds(self.client, *help_list) + await paginator.send(ctx) diff --git a/exts/core/ping.py b/exts/core/ping.py index d75b51f..eccc234 100644 --- a/exts/core/ping.py +++ b/exts/core/ping.py @@ -4,6 +4,7 @@ (C) 2022-2023 - B1ue-Dev """ +import logging import interactions from interactions.ext.prefixed_commands import ( prefixed_command, @@ -71,3 +72,9 @@ async def _ping(self, ctx: PrefixedContext) -> None: ) await ctx.send(embeds=embed) + + +def setup(client) -> None: + """Setup the extension.""" + Ping(client) + logging.info("Loaded Ping extension.") diff --git a/exts/core/stats.py b/exts/core/stats.py index 9734925..3741c88 100644 --- a/exts/core/stats.py +++ b/exts/core/stats.py @@ -4,6 +4,7 @@ (C) 2022-2023 - B1ue-Dev """ +import logging import datetime import platform import interactions @@ -203,3 +204,9 @@ async def _stats(self, ctx: PrefixedContext) -> None: ) await ctx.send(embeds=embed, components=button) + + +def setup(client) -> None: + """Setup the extension.""" + Stats(client) + logging.info("Loaded Stats extension.") diff --git a/exts/fun/__init__.py b/exts/fun/__init__.py index f7c5d29..9a586a4 100644 --- a/exts/fun/__init__.py +++ b/exts/fun/__init__.py @@ -24,5 +24,5 @@ def setup(client) -> None: datetime.datetime.utcnow() + datetime.timedelta(hours=7) ).strftime("%d/%m/%Y %H:%M:%S") Fun(client) - logging.debug("""[%s] Loaded Fun extension.""", log_time) + logging.info("Loaded Fun extension.") print(f"[{log_time}] Loaded Fun extension.") diff --git a/exts/fun/ascii.py b/exts/fun/ascii.py index e79eda6..1994b73 100644 --- a/exts/fun/ascii.py +++ b/exts/fun/ascii.py @@ -231,8 +231,5 @@ async def text( def setup(client) -> None: """Setup the extension.""" - log_time = ( - datetime.datetime.utcnow() + datetime.timedelta(hours=7) - ).strftime("%d/%m/%Y %H:%M:%S") ASCII(client) - logging.debug("""[%s] Loaded ASCII extension.""", log_time) + logging.info("Loaded ASCII extension.") diff --git a/exts/fun/fun.py b/exts/fun/fun.py index 5d7551b..9bf469a 100644 --- a/exts/fun/fun.py +++ b/exts/fun/fun.py @@ -4,6 +4,7 @@ (C) 2022-2023 - B1ue-Dev """ +import logging import random import asyncio import aiohttp @@ -218,7 +219,7 @@ async def gay( async def joke(self, ctx: interactions.SlashContext) -> None: """Sends a random joke.""" - url = "https://some-random-api.ml/joke" + url = "https://some-random-api.com/joke" resp = await get_response(url) embed = interactions.Embed( @@ -323,7 +324,7 @@ async def dictionary( ) -> None: """Defines a word.""" - url = "https://some-random-api.ml/dictionary" + url = "https://some-random-api.com/dictionary" params = {"word": word} resp = await get_response(url, params=params) @@ -383,3 +384,9 @@ async def ai(self, ctx: interactions.SlashContext, message: str) -> None: resp = await resp.json() await ctx.send(content=resp["message"]) + + +def setup(client) -> None: + """Setup the extension.""" + Fun(client) + logging.info("Loaded Fun extension.") diff --git a/exts/fun/google.py b/exts/fun/google.py index bd1a381..62a9899 100644 --- a/exts/fun/google.py +++ b/exts/fun/google.py @@ -4,6 +4,7 @@ (C) 2022-2023 - B1ue-Dev """ +import logging import asyncio import random import interactions @@ -276,3 +277,9 @@ def check(_message: interactions.Message): except KeyError: await ctx.send("No result found.", ephemeral=True) + + +def setup(client) -> None: + """Setup the extension.""" + Google(client) + logging.info("Loaded Google extension.") diff --git a/exts/fun/hug.py b/exts/fun/hug.py index 5342dc6..2939d60 100644 --- a/exts/fun/hug.py +++ b/exts/fun/hug.py @@ -4,6 +4,7 @@ (C) 2022-2023 - B1ue-Dev """ +import logging import io import interactions import aiohttp @@ -99,3 +100,9 @@ async def hug( else None, files=file, ) + + +def setup(client) -> None: + """Setup the extension.""" + Hug(client) + logging.info("Loaded Hug extension.") diff --git a/exts/fun/misc.py b/exts/fun/misc.py index 4d22da8..af56bde 100644 --- a/exts/fun/misc.py +++ b/exts/fun/misc.py @@ -4,6 +4,7 @@ (C) 2022-2023 - B1ue-Dev """ +import logging import random import interactions from utils.utils import get_response @@ -43,7 +44,7 @@ def __init__(self, client: interactions.Client) -> None: # if user.guild_avatar is None # else user.guild_avatar.url # ) - # url = "https://some-random-api.ml/canvas/horny" + # url = "https://some-random-api.com/canvas/horny" # params = { # "avatar": avatar_url, # } @@ -82,7 +83,7 @@ def __init__(self, client: interactions.Client) -> None: # if user.guild_avatar is None # else user.guild_avatar.url # ) - # url = "https://some-random-api.ml/canvas/simpcard" + # url = "https://some-random-api.com/canvas/simpcard" # params = {"avatar": avatar_url} # resp = await get_response(url, params) # img = interactions.File( @@ -144,7 +145,7 @@ async def tweet( nick = user.nick else: nick = username - url = "https://some-random-api.ml/canvas/tweet" + url = "https://some-random-api.com/canvas/tweet" params = { "avatar": user.avatar.url if user.guild_avatar is None @@ -193,7 +194,7 @@ async def youtube( username = user.user.username[:12] + "..." else: username = user.user.username - url = "https://some-random-api.ml/canvas/youtube-comment" + url = "https://some-random-api.com/canvas/youtube-comment" params = { "avatar": user.avatar.url if user.guild_avatar is None @@ -228,7 +229,7 @@ async def amogus( """Amogus.""" await ctx.defer() - url = "https://some-random-api.ml/premium/amongus" + url = "https://some-random-api.com/premium/amongus" params = { "avatar": user.avatar.url if user.guild_avatar is None @@ -263,7 +264,7 @@ async def pet( ) -> None: """Pet someone.""" - url = "https://some-random-api.ml/premium/petpet" + url = "https://some-random-api.com/premium/petpet" params = { "avatar": user.avatar.url if user.guild_avatar is None @@ -282,3 +283,9 @@ async def pet( else None, file=img, ) + + +def setup(client) -> None: + """Setup the extension.""" + Misc(client) + logging.info("Loaded Misc extension.") diff --git a/exts/fun/pokemon.py b/exts/fun/pokemon.py index 28f7bc3..9ec3d8e 100644 --- a/exts/fun/pokemon.py +++ b/exts/fun/pokemon.py @@ -4,6 +4,7 @@ (C) 2022-2023 - B1ue-Dev """ +import logging import json import interactions @@ -186,3 +187,9 @@ async def on_message_create( images=[interactions.EmbedAttachment(url=img)] ) await _msg.channel.send(embeds=embed) + + +def setup(client) -> None: + """Setup the extension.""" + Pokemon(client) + logging.info("Loaded Pokemon extension.") diff --git a/exts/fun/rps.py b/exts/fun/rps.py index df8c5cc..a93feb6 100644 --- a/exts/fun/rps.py +++ b/exts/fun/rps.py @@ -4,6 +4,7 @@ (C) 2022-2023 - B1ue-Dev """ +import logging import random import asyncio import interactions @@ -370,3 +371,9 @@ async def human( except asyncio.TimeoutError: await msg.edit(content="Time's up!", components=[]) break + + +def setup(client) -> None: + """Setup the extension.""" + RPS(client) + logging.info("Loaded RPS extension.") diff --git a/exts/fun/trivia.py b/exts/fun/trivia.py index 98e2151..4f2d6e2 100644 --- a/exts/fun/trivia.py +++ b/exts/fun/trivia.py @@ -4,6 +4,7 @@ (C) 2022-2023 - B1ue-Dev """ +import logging import asyncio import base64 as b64 import interactions @@ -278,3 +279,9 @@ def _check(_ctx): components=buttons_disabled, ) break + + +def setup(client) -> None: + """Setup the extension.""" + Trivia(client) + logging.info("Loaded Trivia extension.") diff --git a/exts/fun/truth_dare.py b/exts/fun/truth_dare.py index 112c7ed..60962c9 100644 --- a/exts/fun/truth_dare.py +++ b/exts/fun/truth_dare.py @@ -151,8 +151,5 @@ async def _paranoia(self, ctx: interactions.ComponentContext) -> None: def setup(client) -> None: """Setup the extension.""" - log_time = ( - datetime.datetime.utcnow() + datetime.timedelta(hours=7) - ).strftime("%d/%m/%Y %H:%M:%S") TruthDare(client) - logging.debug("""[%s] Loaded TruthDare extension.""", log_time) + logging.info("Loaded TruthDare extension.") diff --git a/exts/fun/tts.py b/exts/fun/tts.py index cb37c5b..491adc5 100644 --- a/exts/fun/tts.py +++ b/exts/fun/tts.py @@ -183,8 +183,5 @@ async def tts( def setup(client) -> None: """Setup the extension.""" - log_time = ( - datetime.datetime.utcnow() + datetime.timedelta(hours=7) - ).strftime("%d/%m/%Y %H:%M:%S") TTS(client) - logging.debug("""[%s] Loaded TTS extension.""", log_time) + logging.info("Loaded TTS extension.") diff --git a/exts/fun/urban.py b/exts/fun/urban.py index ffad6ae..51e770d 100644 --- a/exts/fun/urban.py +++ b/exts/fun/urban.py @@ -4,6 +4,7 @@ (C) 2022-2023 - B1ue-Dev """ +import logging import asyncio import interactions from interactions.ext.prefixed_commands import ( @@ -388,3 +389,9 @@ def _check(_ctx): except asyncio.TimeoutError: await msg.edit(components=[]) + + +def setup(client) -> None: + """Setup the extension.""" + Urban(client) + logging.info("Loaded Urban extension.") diff --git a/exts/fun/uwu.py b/exts/fun/uwu.py index bdfb99c..e7f542e 100644 --- a/exts/fun/uwu.py +++ b/exts/fun/uwu.py @@ -4,6 +4,7 @@ (C) 2022-2023 - B1ue-Dev """ +import logging import random import interactions from interactions.ext.prefixed_commands import ( @@ -145,3 +146,9 @@ async def uwu_fier(self, ctx: interactions.InteractionContext) -> None: res = OwO.create_uwu_text(self, text=text.content) await ctx.send(res) + + +def setup(client) -> None: + """Setup the extension.""" + UwU(client) + logging.info("Loaded UwU extension.") diff --git a/exts/fun/whos_that_pokemon.py b/exts/fun/whos_that_pokemon.py index 473f2b8..2d70980 100644 --- a/exts/fun/whos_that_pokemon.py +++ b/exts/fun/whos_that_pokemon.py @@ -4,6 +4,7 @@ (C) 2022-2023 - B1ue-Dev """ +import logging import io import random import asyncio @@ -535,3 +536,9 @@ def _check(_ctx): ) break out2.close() # Close the file. + + +def setup(client) -> None: + """Setup the extension.""" + WTP(client) + logging.info("Loaded WTP extension.") diff --git a/exts/server/__init__.py b/exts/server/__init__.py index 1c88ec5..aa94701 100644 --- a/exts/server/__init__.py +++ b/exts/server/__init__.py @@ -27,5 +27,5 @@ def setup(client) -> None: datetime.datetime.utcnow() + datetime.timedelta(hours=7) ).strftime("%d/%m/%Y %H:%M:%S") Server(client) - logging.debug("""[%s] Loaded Server extension.""", log_time) + logging.info("Loaded Server extension.") print(f"[{log_time}] Loaded Server extension.") diff --git a/exts/server/info.py b/exts/server/info.py index f46da92..9153893 100644 --- a/exts/server/info.py +++ b/exts/server/info.py @@ -4,6 +4,7 @@ (C) 2022-2023 - B1ue-Dev """ +import logging import interactions from interactions import UserFlags, Permissions from utils.utils import get_response @@ -485,3 +486,9 @@ async def user_information( ) await ctx.send(embeds=embed, ephemeral=True) + + +def setup(client) -> None: + """Setup the extension.""" + Info(client) + logging.info("Loaded Info extension.") diff --git a/exts/server/logs.py b/exts/server/logs.py index d4bd4b0..17342ae 100644 --- a/exts/server/logs.py +++ b/exts/server/logs.py @@ -4,6 +4,7 @@ (C) 2022-2023 - B1ue-Dev """ +import logging import datetime import random import interactions @@ -154,7 +155,10 @@ async def on_guild_member_add( ) else: for channel in member.guild.channels: - if channel.name == "welcome-goodbye" and int(channel.type) == 0: + if ( + channel.name == "welcome-goodbye" + and int(channel.type) == 0 + ): await channel.send(embeds=embed) @interactions.listen(interactions.events.MemberRemove) @@ -275,3 +279,9 @@ async def on_guild_ban_remove( if channel.name == "logs" and int(channel.type) == 0: await channel.send(embeds=embed) break + + +def setup(client) -> None: + """Setup the extension.""" + Logs(client) + logging.info("Loaded Logs extension.") diff --git a/exts/server/mod.py b/exts/server/mod.py index e51ca0e..2968083 100644 --- a/exts/server/mod.py +++ b/exts/server/mod.py @@ -4,6 +4,7 @@ (C) 2022-2023 - B1ue-Dev """ +import logging import datetime import interactions from utils.permission import has_permission, Permissions @@ -563,3 +564,9 @@ async def purge( await ctx.send( f"Purged {amount} messages in #{channel.name}.", ephemeral=True ) + + +def setup(client) -> None: + """Setup the extension.""" + Mod(client) + logging.info("Loaded Mod extension.") diff --git a/exts/utils/__init__.py b/exts/utils/__init__.py index 8802af1..f39636d 100644 --- a/exts/utils/__init__.py +++ b/exts/utils/__init__.py @@ -24,5 +24,5 @@ def setup(client) -> None: datetime.datetime.utcnow() + datetime.timedelta(hours=7) ).strftime("%d/%m/%Y %H:%M:%S") Utils(client) - logging.debug("""[%s] Loaded Utils extension.""", log_time) + logging.info("Loaded Utils extension.") print(f"[{log_time}] Loaded Utils extension.") diff --git a/exts/utils/emoji.py b/exts/utils/emoji.py index c2749b6..89c953a 100644 --- a/exts/utils/emoji.py +++ b/exts/utils/emoji.py @@ -4,6 +4,7 @@ (C) 2022-2023 - B1ue-Dev """ +import logging import io import re import interactions @@ -436,7 +437,6 @@ async def add( # If the user chooses to add emoji from an URL. if url and image is None: - async with aiohttp.ClientSession() as session: async with session.get(url) as resp: if resp.status != 200: @@ -489,12 +489,10 @@ async def add( # If the user chooses to add emoji from an attachment. if image and url is None: - await ctx.defer() async with aiohttp.ClientSession() as session: async with session.get(image.url) as resp: - if resp.content_type not in { "image/png", "image/jpeg", @@ -605,3 +603,9 @@ async def remove(self, ctx: interactions.SlashContext, emoji: str): return await ctx.send( "Invalid emoji. Please try again.", ephemeral=True ) + + +def setup(client) -> None: + """Setup the extension.""" + Emoji(client) + logging.info("Loaded Emoji extension.") diff --git a/exts/utils/hacktool.py b/exts/utils/hacktool.py index 8fd6074..86e0117 100644 --- a/exts/utils/hacktool.py +++ b/exts/utils/hacktool.py @@ -4,6 +4,7 @@ (C) 2022-2023 - B1ue-Dev """ +import logging import base64 as b64 import binascii import interactions @@ -96,3 +97,10 @@ async def interpret( string_bytes = brainfuck.Brainfuckery().interpret(code) await ctx.send(f"```{string_bytes}```") + + +def setup(client) -> None: + """Setup the extension.""" + + HackTool(client) + logging.info("Loaded HackTool extension.") diff --git a/exts/utils/snipe.py b/exts/utils/snipe.py index bc80845..156f7e5 100644 --- a/exts/utils/snipe.py +++ b/exts/utils/snipe.py @@ -4,6 +4,7 @@ (C) 2022-2023 - B1ue-Dev """ +import logging import asyncio import interactions from interactions.ext.prefixed_commands import ( @@ -122,3 +123,9 @@ async def msg_snipe(self, ctx: PrefixedContext) -> None: except KeyError: await ctx.send("No message to snipe.", ephemeral=True) + + +def setup(client) -> None: + """Setup the extension.""" + Snipe(client) + logging.info("Loaded Snipe extension.") diff --git a/exts/utils/tag.py b/exts/utils/tag.py index 8e62203..1a54a00 100644 --- a/exts/utils/tag.py +++ b/exts/utils/tag.py @@ -4,6 +4,7 @@ (C) 2022-2023 - B1ue-Dev """ +import logging import json import datetime import interactions @@ -520,3 +521,9 @@ async def tag_autocomplete( if focus.lower() in tag.lower(): choices.append({"name": tag, "value": tag}) await ctx.send(choices) + + +def setup(client) -> None: + """Setup the extension.""" + Tag(client) + logging.info("Loaded Tag extension.") diff --git a/exts/utils/translation.py b/exts/utils/translation.py index e3b3e78..560482a 100644 --- a/exts/utils/translation.py +++ b/exts/utils/translation.py @@ -3,6 +3,8 @@ (C) 2022-2023 - B1ue-Dev """ + +import logging import asyncio import googletrans import interactions @@ -433,3 +435,9 @@ async def message( ) except asyncio.TimeoutError: break + + +def setup(client) -> None: + """Setup the extension.""" + Translation(client) + logging.info("Loaded Translation extension.") diff --git a/keep_alive.py b/keep_alive.py index 06cab1f..0f64a69 100644 --- a/keep_alive.py +++ b/keep_alive.py @@ -6,19 +6,13 @@ flask: Flask = Flask("replit_keep_alive") log: logging.Logger = logging.getLogger("werkzeug") -uptime: float = ( - datetime.datetime.utcnow() + - datetime.timedelta(hours=7) -) +uptime: float = datetime.datetime.utcnow() + datetime.timedelta(hours=7) @flask.route("/") def index() -> str: """For handling the base route of '/'.""" - return { - "status": "Ready!", - "uptime": f"{uptime}" - } + return {"status": "Ready!", "uptime": f"{uptime}"} def keep_alive() -> None: diff --git a/pyproject.toml b/pyproject.toml index b9e9195..756728a 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "Articuno" -version = "5.0.1" +version = "v5.0.2" description = "A fun Discord Bot, written with interactions.py." license = "GPL-3.0-only" authors = ["B1ue-Dev "] diff --git a/utils/error.py b/utils/error.py index c7c631d..350d41f 100644 --- a/utils/error.py +++ b/utils/error.py @@ -74,9 +74,7 @@ async def on_command_error( subcommand_name: str = None if _ctx.command.is_subcommand: subcommand_name = _ctx.command.to_dict().get("name") - full_command = ( - f"""{command_name}{" " + subcommand_name if subcommand_name else ""}""" - ) + full_command = f"""{command_name}{" " + subcommand_name if subcommand_name else ""}""" log_error = interactions.Embed( title="An error occurred!",