From 0161b67ed4b548c07fea3c7289c29a5cc75a5617 Mon Sep 17 00:00:00 2001 From: EncryptEx Date: Tue, 10 Oct 2023 08:56:08 +0200 Subject: [PATCH 1/8] added shortenlink function and used when necessary --- bot.py | 31 ++++++++++++++++--------------- 1 file changed, 16 insertions(+), 15 deletions(-) diff --git a/bot.py b/bot.py index 76ca34d..e45b5a9 100644 --- a/bot.py +++ b/bot.py @@ -371,6 +371,18 @@ async def SaveSetting(guildid: int, module: str, value: str): conn.commit() return +def ShortenLink(link: str): + headers = { + 'Authorization': f"Bearer {FEMTOLINK}", + 'Content-Type': 'application/json', + } + + data ='{ "long_url": "' + uurl + '" }' + + response = requests.post('https://femtolink.jaumelopez.dev/api/link', headers=headers, data=data) + return response.json()['link']; + + def GenerateChart(datasets): """ @@ -989,7 +1001,8 @@ async def seewarns(ctx, member: discord.Member): MEMBER=filterMember(member)), description=message, ) - embed.set_image(url=uurl) + final_url = uurl if len(uurl) < 2048 else ShortenLink(uurl) + embed.set_image(url=final_url) embed.set_footer( text=await GetTranslatedText(ctx.guild.id, "footer_executed_by", @@ -1645,20 +1658,8 @@ async def metrics(ctx): for cmd, times in commandDict.items() ]), ) - if len(uurl) < 2048: - embed.set_image(url=uurl) - else: - headers = { - 'Authorization': f"Bearer {FEMTOLINK}", - 'Content-Type': 'application/json', - } - - data ='{ "long_url": "' + uurl + '" }' - - response = requests.post('https://femtolink.jaumelopez.dev/api/link', headers=headers, data=data) - - - embed.set_image(url=response.json()['link']) + final_url = uurl if len(uurl) < 2048 else ShortenLink(uurl) + embed.set_image(url=final_url) embed.set_footer( text=await GetTranslatedText(ctx.guild.id, From 481693fdbd8dbe50378a7aa6fbda098376488e24 Mon Sep 17 00:00:00 2001 From: "Restyled.io" Date: Tue, 10 Oct 2023 06:57:51 +0000 Subject: [PATCH 2/8] Restyled by autopep8 --- bot.py | 29 +++++++++++------------------ 1 file changed, 11 insertions(+), 18 deletions(-) diff --git a/bot.py b/bot.py index 422bf0c..0c17914 100644 --- a/bot.py +++ b/bot.py @@ -373,17 +373,17 @@ async def SaveSetting(guildid: int, module: str, value: str): conn.commit() return + def ShortenLink(link: str): headers = { 'Authorization': f"Bearer {FEMTOLINK}", 'Content-Type': 'application/json', } - data ='{ "long_url": "' + uurl + '" }' + data = '{ "long_url": "' + uurl + '" }' response = requests.post('https://femtolink.jaumelopez.dev/api/link', headers=headers, data=data) - return response.json()['link']; - + return response.json()['link'] def GenerateChart(datasets): @@ -446,8 +446,7 @@ def ErrorEmbed(error): embed = Embed(title=f":no_entry_sign: Error!", description=error) embed.set_thumbnail( - url= - "https://external-content.duckduckgo.com/iu/?u=https%3A%2F%2Ficonsplace.com%2Fwp-content%2Fuploads%2F_icons%2Fff0000%2F256%2Fpng%2Ferror-icon-14-256.png&f=1&nofb=1" + url="https://external-content.duckduckgo.com/iu/?u=https%3A%2F%2Ficonsplace.com%2Fwp-content%2Fuploads%2F_icons%2Fff0000%2F256%2Fpng%2Ferror-icon-14-256.png&f=1&nofb=1" ) embed.set_footer( @@ -539,7 +538,7 @@ def numToEmoji(num): def filterMember(member: discord.Member): """ - + :param member: discord.Member: """ @@ -940,8 +939,7 @@ async def warn(ctx, @bot.slash_command( guild_only=True, name="softwarn", - description= - "Sets a silent warning for a user, at 3 warns/strikes they get kicked", + description="Sets a silent warning for a user, at 3 warns/strikes they get kicked", ) @discord.default_permissions(administrator=True, ) async def softwarn(ctx, member: discord.Member, reason=None): @@ -1264,8 +1262,7 @@ async def restart(ctx): @bot.slash_command( guild_only=True, name="setdelay", - description= - "Updates the message delay in a channel with a set of custom time interval", + description="Updates the message delay in a channel with a set of custom time interval", ) @discord.default_permissions(manage_messages=True, ) async def setdelay(ctx, seconds: float, reason: str = ""): @@ -1350,8 +1347,7 @@ async def mute(ctx, member: discord.Member, *, reason=None): @bot.slash_command( guild_only=True, name="unmute", - description= - "Restores the hability to talk or join voice channels to a user", + description="Restores the hability to talk or join voice channels to a user", ) @discord.default_permissions(manage_messages=True, ) async def unmute(ctx, member: discord.Member, *, reason=None): @@ -1417,8 +1413,7 @@ async def lock(ctx, channel: discord.TextChannel = None, reason=None): @bot.slash_command( guild_only=True, name="unlock", - description= - "Removes the blocking in a channel from not being used as a chat.", + description="Removes the blocking in a channel from not being used as a chat.", ) async def unlock(ctx, channel: discord.TextChannel = None, reason=None): await SendMetric("unlock") @@ -1451,8 +1446,7 @@ async def unlock(ctx, channel: discord.TextChannel = None, reason=None): async def suggest(ctx, suggestion: str): await SendMetric("suggest") embed = Embed( - title= - f"The user {filterMember(ctx.author)} has posted a suggestion! :hammer_pick:", + title=f"The user {filterMember(ctx.author)} has posted a suggestion! :hammer_pick:", description=f"{suggestion}", ) embed.set_footer( @@ -1477,8 +1471,7 @@ async def invite(ctx): await SendMetric("invite") embed = Embed( title=await GetTranslatedText(ctx.guild.id, "hammer_invite"), - description= - f"[**🔗{await GetTranslatedText(ctx.guild.id, 'hammer_link')}**](https://discordapp.com/api/oauth2/authorize?client_id=591633652493058068&permissions=8&scope=bot)", + description=f"[**🔗{await GetTranslatedText(ctx.guild.id, 'hammer_link')}**](https://discordapp.com/api/oauth2/authorize?client_id=591633652493058068&permissions=8&scope=bot)", ) embed.set_footer( text=await GetTranslatedText(ctx.guild.id, From 8bfe01ea71ed81ced2022983ac604b88870bbfc3 Mon Sep 17 00:00:00 2001 From: "Restyled.io" Date: Tue, 10 Oct 2023 06:57:53 +0000 Subject: [PATCH 3/8] Restyled by black --- bot.py | 771 +++++++++++++++++++++++++++++---------------------------- 1 file changed, 393 insertions(+), 378 deletions(-) diff --git a/bot.py b/bot.py index 0c17914..425f972 100644 --- a/bot.py +++ b/bot.py @@ -46,37 +46,44 @@ def jsonToDict(filename): langFiles = [f for f in listdir("./langs") if isfile(join("./langs", f))] languages = dict() for languageFile in langFiles: - languages[languageFile.split(".")[0]] = jsonToDict("./langs/" + - languageFile) + languages[languageFile.split(".")[0]] = jsonToDict("./langs/" + languageFile) # database import & connection conn = sqlite3.connect("maindatabase1.db") cur = conn.cursor() -cur.execute("""CREATE TABLE IF NOT EXISTS `warns` ( +cur.execute( + """CREATE TABLE IF NOT EXISTS `warns` ( `id` INTEGER PRIMARY KEY AUTOINCREMENT, `userid` INT(100), `guildid` INT, `reason` TEXT, `timestamp` INT); - """) -cur.execute("""CREATE TABLE IF NOT EXISTS `customWords` ( + """ +) +cur.execute( + """CREATE TABLE IF NOT EXISTS `customWords` ( `id` INTEGER PRIMARY KEY AUTOINCREMENT, `guildid` INT, `uploaderId`INT, `word` TEXT, `type` INT); - """) -cur.execute("""CREATE TABLE IF NOT EXISTS `settings` ( + """ +) +cur.execute( + """CREATE TABLE IF NOT EXISTS `settings` ( `guildid` INT(100) UNIQUE, `automod` INT, `language` TEXT); - """) -cur.execute("""CREATE TABLE IF NOT EXISTS `metrics` ( + """ +) +cur.execute( + """CREATE TABLE IF NOT EXISTS `metrics` ( `id` INTEGER PRIMARY KEY AUTOINCREMENT, `commandName` TEXT, `timestamp` INT); - """) + """ +) hammericon = "https://images-ext-2.discordapp.net/external/OKc8xu6AILGNFY3nSTt7wGbg-Mi1iQZonoLTFg85o-E/%3Fsize%3D1024/https/cdn.discordapp.com/avatars/591633652493058068/e6011129c5169b29ed05a6dc873175cb.png?width=670&height=670" @@ -95,15 +102,16 @@ def jsonToDict(filename): @bot.slash_command( - name="help", description="Displays all the available commands for Hammer") + name="help", description="Displays all the available commands for Hammer" +) async def help(ctx): # Define each page descr = await GetTranslatedText(ctx.guild.id, "help_description") - embed = Embed(title="Hammer Bot Help", - description=descr, - colour=discord.Colour.lighter_grey()) + embed = Embed( + title="Hammer Bot Help", description=descr, colour=discord.Colour.lighter_grey() + ) user = await GetTranslatedText(ctx.guild.id, "user") reason = await GetTranslatedText(ctx.guild.id, "reason") @@ -123,25 +131,25 @@ async def help(ctx): embed.add_field( name=await GetTranslatedText(ctx.guild.id, "help_automod_title"), - value=await GetTranslatedText(ctx.guild.id, - "help_automod_description", - COMMAND_PREFIX=COMMAND_PREFIX), + value=await GetTranslatedText( + ctx.guild.id, "help_automod_description", COMMAND_PREFIX=COMMAND_PREFIX + ), inline=True, ) embed.add_field( name=await GetTranslatedText(ctx.guild.id, "help_chatmod_title"), - value=await GetTranslatedText(ctx.guild.id, - "help_chatmod_description", - COMMAND_PREFIX=COMMAND_PREFIX), + value=await GetTranslatedText( + ctx.guild.id, "help_chatmod_description", COMMAND_PREFIX=COMMAND_PREFIX + ), inline=True, ) embed.add_field( name=await GetTranslatedText(ctx.guild.id, "help_various_title"), - value=await GetTranslatedText(ctx.guild.id, - "help_various_description", - COMMAND_PREFIX=COMMAND_PREFIX), + value=await GetTranslatedText( + ctx.guild.id, "help_various_description", COMMAND_PREFIX=COMMAND_PREFIX + ), inline=True, ) @@ -153,16 +161,16 @@ async def help(ctx): embed.add_field( name=await GetTranslatedText(ctx.guild.id, "help_commands_title"), - value=await GetTranslatedText(ctx.guild.id, - "help_commands_description", - COMMAND_PREFIX=COMMAND_PREFIX), + value=await GetTranslatedText( + ctx.guild.id, "help_commands_description", COMMAND_PREFIX=COMMAND_PREFIX + ), inline=True, ) embed.set_footer( - text=await GetTranslatedText(ctx.guild.id, - "footer_executed_by", - USERNAME=filterMember(ctx.author)), + text=await GetTranslatedText( + ctx.guild.id, "footer_executed_by", USERNAME=filterMember(ctx.author) + ), icon_url=hammericon, ) @@ -230,8 +238,7 @@ async def Removewarn(userid: int, guildId: int, relativeWarnId: int): async def Clearwarns(userid: int, guildId: int): # delete all rows - cur.execute("DELETE FROM warns WHERE userid=? AND guildid=?", - (userid, guildId)) + cur.execute("DELETE FROM warns WHERE userid=? AND guildid=?", (userid, guildId)) conn.commit() return @@ -246,20 +253,21 @@ async def getAllWarns(userid: int, guildid: int): emojis = ":" + numToEmoji(c) + ":" else: emojis = str(c) - ddt = int(str(dt)[:str(dt).find(".")]) - allwarns.append(await GetTranslatedText(guildid, - "warns_line_loop", - EMOJIS=emojis, - SUBREASON=SubReason, - DDT=ddt)) + ddt = int(str(dt)[: str(dt).find(".")]) + allwarns.append( + await GetTranslatedText( + guildid, "warns_line_loop", EMOJIS=emojis, SUBREASON=SubReason, DDT=ddt + ) + ) c = c + 1 return allwarns async def GetAutomodCustomWords(guildid: int, mode: str): wtype = 1 if mode == "allow" else 0 - cur.execute("SELECT word FROM customWords WHERE guildid = ? AND type = ?", - (guildid, wtype)) + cur.execute( + "SELECT word FROM customWords WHERE guildid = ? AND type = ?", (guildid, wtype) + ) words = cur.fetchall() a = [] if len(words) > 0: @@ -314,8 +322,7 @@ async def AddDeniedWord(guildid: int, userid: int, word: str): async def GetSettings(guildid: int, index: int): - cur.execute("SELECT * FROM settings WHERE guildid = ? LIMIT 1", - (guildid, )) + cur.execute("SELECT * FROM settings WHERE guildid = ? LIMIT 1", (guildid,)) rows = cur.fetchall() if len(rows) > 0: return rows[0][index] @@ -327,8 +334,9 @@ async def GetTranslatedText(guildid: int, index: str, **replace): global languages dbLanguageRecord = await GetSettings(guildid, 2) - currentLanguage = ("en" if dbLanguageRecord == 0 - or dbLanguageRecord == None else dbLanguageRecord) + currentLanguage = ( + "en" if dbLanguageRecord == 0 or dbLanguageRecord == None else dbLanguageRecord + ) text = languages[currentLanguage].get(index, "Word not translated yet.") for oldString, newString in replace.items(): @@ -347,14 +355,11 @@ async def SendMetric(commandName: str): async def SaveSetting(guildid: int, module: str, value: str): - cur.execute("SELECT * FROM settings WHERE guildid = ? LIMIT 1", - (guildid, )) + cur.execute("SELECT * FROM settings WHERE guildid = ? LIMIT 1", (guildid,)) rows = cur.fetchall() # print(rows) - if len( - rows - ) > 0: # cur.execute('INSERT INTO foo (a,b) values (?,?)', (strA, strB)) + if len(rows) > 0: # cur.execute('INSERT INTO foo (a,b) values (?,?)', (strA, strB)) query = f"""UPDATE settings SET {module}=? WHERE guildid=?""" @@ -376,14 +381,16 @@ async def SaveSetting(guildid: int, module: str, value: str): def ShortenLink(link: str): headers = { - 'Authorization': f"Bearer {FEMTOLINK}", - 'Content-Type': 'application/json', + "Authorization": f"Bearer {FEMTOLINK}", + "Content-Type": "application/json", } data = '{ "long_url": "' + uurl + '" }' - response = requests.post('https://femtolink.jaumelopez.dev/api/link', headers=headers, data=data) - return response.json()['link'] + response = requests.post( + "https://femtolink.jaumelopez.dev/api/link", headers=headers, data=data + ) + return response.json()["link"] def GenerateChart(datasets): @@ -398,20 +405,18 @@ def GenerateChart(datasets): qc.device_pixel_ratio = 2.0 qc.config = { "type": "line", - "data": { - "datasets": datasets - }, + "data": {"datasets": datasets}, "options": { "scales": { - "xAxes": [{ - "type": "time", - "time": { - "parser": "YYYY-MM-DD HH:mm:ss", - "displayFormats": { - "day": "DD/MM/YYYY" + "xAxes": [ + { + "type": "time", + "time": { + "parser": "YYYY-MM-DD HH:mm:ss", + "displayFormats": {"day": "DD/MM/YYYY"}, }, - }, - }] + } + ] } }, } @@ -428,10 +433,11 @@ async def SendMessageTo(ctx, member, message): await member.send(message) except: await ctx.respond( - embed=ErrorEmbed(await - GetTranslatedText(ctx.guild.id, - "error_deliver_msg", - USERNAME=filterMember(member))), + embed=ErrorEmbed( + await GetTranslatedText( + ctx.guild.id, "error_deliver_msg", USERNAME=filterMember(member) + ) + ), ephemeral=True, ) @@ -568,10 +574,8 @@ async def on_message(message): if settings != 1: return # user has disabled Automod or does not have it installed words = message.content.split() - allowed_words_guild_list = await GetAutomodCustomWords( - message.guild.id, "allow") - denied_words_guild_list = await GetAutomodCustomWords( - message.guild.id, "deny") + allowed_words_guild_list = await GetAutomodCustomWords(message.guild.id, "allow") + denied_words_guild_list = await GetAutomodCustomWords(message.guild.id, "deny") print("scanned: ", message.content) for word in words: # print("scanning word:",word) @@ -600,22 +604,19 @@ async def on_message(message): description=descr, ) embed.set_footer( - text=await GetTranslatedText(message.guild.id, - "automod_warn_footer"), + text=await GetTranslatedText(message.guild.id, "automod_warn_footer"), icon_url=hammericon, ) embed.set_thumbnail(url=member.display_avatar) warn = await AddWarning( member.id, message.guild.id, - await GetTranslatedText(message.guild.id, - "automod_warn_reason"), + await GetTranslatedText(message.guild.id, "automod_warn_reason"), ) await SendMetric("automod") s = "s" if warn > 1 else "" embed.add_field( - name=await GetTranslatedText(message.guild.id, - "automod_count_title"), + name=await GetTranslatedText(message.guild.id, "automod_count_title"), value=await GetTranslatedText( message.guild.id, "automod_count_description", @@ -626,13 +627,14 @@ async def on_message(message): inline=True, ) bannedmessage = ( - message.content[:message.content.find(originalWord)] + "~~" + - word + "~~" + - message.content[message.content.find(originalWord) + - len(word):]) + message.content[: message.content.find(originalWord)] + + "~~" + + word + + "~~" + + message.content[message.content.find(originalWord) + len(word) :] + ) embed.add_field( - name=await GetTranslatedText(message.guild.id, - "automod_removed_title"), + name=await GetTranslatedText(message.guild.id, "automod_removed_title"), value=await GetTranslatedText( message.guild.id, "automod_removed_description", @@ -641,10 +643,12 @@ async def on_message(message): inline=True, ) embed.add_field( - name=await GetTranslatedText(message.guild.id, - "automod_nothappy_title"), - value=await GetTranslatedText(message.guild.id, - "automod_nothappy_description"), + name=await GetTranslatedText( + message.guild.id, "automod_nothappy_title" + ), + value=await GetTranslatedText( + message.guild.id, "automod_nothappy_description" + ), inline=False, ) await message.channel.send(embed=embed) @@ -655,19 +659,24 @@ async def on_message(message): except: embed = ErrorEmbed( - await message.channel.send(embed=ErrorEmbed( - await GetTranslatedText( - message.guild.id, - "error_deliver_msg", - USERNAME=filterMember(member), - )), ), ) + await message.channel.send( + embed=ErrorEmbed( + await GetTranslatedText( + message.guild.id, + "error_deliver_msg", + USERNAME=filterMember(member), + ) + ), + ), + ) message.channel.send(embed=embed) @bot.event async def on_ready(): - await bot.change_presence(activity=discord.Activity( - type=discord.ActivityType.watching, name="you")) + await bot.change_presence( + activity=discord.Activity(type=discord.ActivityType.watching, name="you") + ) print("HAMMER BOT Ready!", datetime.datetime.now()) botname = await bot.application_info() print("logged in as:", botname.name) @@ -684,9 +693,7 @@ async def on_ready(): debug = False # ALWAYS FALSE! -@bot.slash_command(guild_only=True, - name="hello", - guild_ids=[int(SECURITY_GUILD)]) +@bot.slash_command(guild_only=True, name="hello", guild_ids=[int(SECURITY_GUILD)]) async def hello(ctx): await ctx.defer() await SendMetric("hello") @@ -698,10 +705,9 @@ async def hello(ctx): async def on_command_error(ctx, error): if isinstance(error, commands.MissingRequiredArgument): await ctx.respond( - await GetTranslatedText(ctx.guild.id, - "error_404", - ERROR=error, - COMMAND_PREFIX=COMMAND_PREFIX), + await GetTranslatedText( + ctx.guild.id, "error_404", ERROR=error, COMMAND_PREFIX=COMMAND_PREFIX + ), ephemeral=True, ) if isinstance(error, commands.MissingPermissions): @@ -746,18 +752,18 @@ async def whois(ctx, member: discord.Member): WARNS=await GetWarnings(member.id, ctx.guild.id), ) embed = Embed( - title=await GetTranslatedText(ctx.guild.id, - "whois_title", - MEMBER=filterMember(member)), + title=await GetTranslatedText( + ctx.guild.id, "whois_title", MEMBER=filterMember(member) + ), description=descr, ) embed.set_thumbnail(url=member.display_avatar) embed.set_footer( - text=await GetTranslatedText(ctx.guild.id, - "footer_executed_by", - USERNAME=filterMember(ctx.author)), + text=await GetTranslatedText( + ctx.guild.id, "footer_executed_by", USERNAME=filterMember(ctx.author) + ), icon_url=hammericon, ) await ctx.respond(embed=embed) @@ -770,37 +776,36 @@ async def whois(ctx, member: discord.Member): name="ban", description="Keeps out a user permanently, forbidding its entry", ) -@discord.default_permissions(ban_members=True, ) +@discord.default_permissions( + ban_members=True, +) async def ban(ctx, member: discord.Member, *, reason=None): await SendMetric("ban") if member == ctx.author: - await ctx.respond(await GetTranslatedText(ctx.guild.id, - "error_self_ban"), - ephemeral=True) + await ctx.respond( + await GetTranslatedText(ctx.guild.id, "error_self_ban"), ephemeral=True + ) return if reason == None: - reason = await GetTranslatedText(ctx.guild.id, - "punishment_default_reason") - message = await GetTranslatedText(ctx.guild.id, - "ban_msg", - GUILD=ctx.guild.name, - REASON=reason) - - descr = await GetTranslatedText(ctx.guild.id, - "ban_description", - MEMBER=filterMember(member), - REASON=reason) + reason = await GetTranslatedText(ctx.guild.id, "punishment_default_reason") + message = await GetTranslatedText( + ctx.guild.id, "ban_msg", GUILD=ctx.guild.name, REASON=reason + ) + + descr = await GetTranslatedText( + ctx.guild.id, "ban_description", MEMBER=filterMember(member), REASON=reason + ) embed = Embed( - title=await GetTranslatedText(ctx.guild.id, - "ban_title", - MEMBER=filterMember(member)), + title=await GetTranslatedText( + ctx.guild.id, "ban_title", MEMBER=filterMember(member) + ), description=descr, ) embed.set_image(url="https://i.imgflip.com/19zat3.jpg") embed.set_footer( - text=await GetTranslatedText(ctx.guild.id, - "footer_executed_by", - USERNAME=filterMember(ctx.author)), + text=await GetTranslatedText( + ctx.guild.id, "footer_executed_by", USERNAME=filterMember(ctx.author) + ), icon_url=hammericon, ) if not debug: @@ -808,10 +813,11 @@ async def ban(ctx, member: discord.Member, *, reason=None): await member.ban(reason=reason) except: await ctx.respond( - embed=ErrorEmbed(await GetTranslatedText( - ctx.guild.id, - "error_ban_perm", - MEMBER=filterMember(member))), + embed=ErrorEmbed( + await GetTranslatedText( + ctx.guild.id, "error_ban_perm", MEMBER=filterMember(member) + ) + ), ephemeral=True, ) return @@ -821,50 +827,50 @@ async def ban(ctx, member: discord.Member, *, reason=None): await SendMessageTo(ctx, member, message) -@bot.slash_command(guild_only=True, - name="kick", - description="Kicks out a member from the server") -@discord.default_permissions(kick_members=True, ) +@bot.slash_command( + guild_only=True, name="kick", description="Kicks out a member from the server" +) +@discord.default_permissions( + kick_members=True, +) async def kick(ctx, member: discord.Member, *, reason=None): await SendMetric("kick") if member == ctx.author: - await ctx.respond(await GetTranslatedText(ctx.guild.id, - "error_self_kick"), - ephemeral=True) + await ctx.respond( + await GetTranslatedText(ctx.guild.id, "error_self_kick"), ephemeral=True + ) return if reason == None: - reason = await GetTranslatedText(ctx.guild.id, - "punishment_default_reason") - message = await GetTranslatedText(ctx.guild.id, - "kick_msg", - GUILD=ctx.guild.name, - REASON=reason) + reason = await GetTranslatedText(ctx.guild.id, "punishment_default_reason") + message = await GetTranslatedText( + ctx.guild.id, "kick_msg", GUILD=ctx.guild.name, REASON=reason + ) if not debug: try: await member.kick(reason=reason) except: ctx.respond( - embed=ErrorEmbed(await GetTranslatedText( - ctx.guild.id, - "error_kick_perm", - MEMBER=filterMember(member))), + embed=ErrorEmbed( + await GetTranslatedText( + ctx.guild.id, "error_kick_perm", MEMBER=filterMember(member) + ) + ), ephemeral=True, ) return - descr = await GetTranslatedText(ctx.guild.id, - "kick_description", - MEMBER=filterMember(member), - REASON=reason) + descr = await GetTranslatedText( + ctx.guild.id, "kick_description", MEMBER=filterMember(member), REASON=reason + ) embed = Embed( - title=await GetTranslatedText(ctx.guild.id, - "kick_title", - MEMBER=filterMember(member)), + title=await GetTranslatedText( + ctx.guild.id, "kick_title", MEMBER=filterMember(member) + ), description=descr, ) embed.set_footer( - text=await GetTranslatedText(ctx.guild.id, - "footer_executed_by", - USERNAME=filterMember(ctx.author)), + text=await GetTranslatedText( + ctx.guild.id, "footer_executed_by", USERNAME=filterMember(ctx.author) + ), icon_url=hammericon, ) embed.set_thumbnail(url=member.display_avatar) @@ -883,37 +889,34 @@ async def kick(ctx, member: discord.Member, *, reason=None): description="Select on/off", autocomplete=discord.utils.basic_autocomplete(["on", "off"]), ) -@discord.default_permissions(administrator=True, ) -async def warn(ctx, - member: discord.Member, - reason=None, - softwarn: bool = False): +@discord.default_permissions( + administrator=True, +) +async def warn(ctx, member: discord.Member, reason=None, softwarn: bool = False): await SendMetric("warn") if member == ctx.author: - await ctx.respond(await GetTranslatedText(ctx.guild.id, - "error_self_warn"), - ephemeral=True) + await ctx.respond( + await GetTranslatedText(ctx.guild.id, "error_self_warn"), ephemeral=True + ) return if reason == None: - reason = await GetTranslatedText(ctx.guild.id, - "punishment_default_reason") + reason = await GetTranslatedText(ctx.guild.id, "punishment_default_reason") message = await GetTranslatedText(ctx.guild.id, "warn_msg", REASON=reason) - descr = await GetTranslatedText(ctx.guild.id, - "warn_description", - MEMBER=filterMember(member), - REASON=reason) + descr = await GetTranslatedText( + ctx.guild.id, "warn_description", MEMBER=filterMember(member), REASON=reason + ) embed = Embed( - title=await GetTranslatedText(ctx.guild.id, - "warn_title", - MEMBER=filterMember(member)), + title=await GetTranslatedText( + ctx.guild.id, "warn_title", MEMBER=filterMember(member) + ), description=descr, ) embed.set_footer( - text=await GetTranslatedText(ctx.guild.id, - "footer_executed_by", - USERNAME=filterMember(ctx.author)), + text=await GetTranslatedText( + ctx.guild.id, "footer_executed_by", USERNAME=filterMember(ctx.author) + ), icon_url=hammericon, ) embed.set_thumbnail(url=member.display_avatar) @@ -941,7 +944,9 @@ async def warn(ctx, name="softwarn", description="Sets a silent warning for a user, at 3 warns/strikes they get kicked", ) -@discord.default_permissions(administrator=True, ) +@discord.default_permissions( + administrator=True, +) async def softwarn(ctx, member: discord.Member, reason=None): await SendMetric("softwarn") await warn(ctx, member, reason, True) @@ -952,7 +957,9 @@ async def softwarn(ctx, member: discord.Member, reason=None): name="seewarns", description="Displays the warn history of a user in the guild", ) -@discord.default_permissions(administrator=True, ) +@discord.default_permissions( + administrator=True, +) async def seewarns(ctx, member: discord.Member): await SendMetric("seewarns") allwarns = await getAllWarns(member.id, ctx.guild.id) @@ -966,106 +973,106 @@ async def seewarns(ctx, member: discord.Member): for warn in await GetWarnings(member.id, ctx.guild.id, fullData=True): _, _, _, _, timestamp = warn c = c + 1 - data.append({ - "t": - str( - datetime.datetime.fromtimestamp( - int(str(timestamp)[:str(timestamp).find(".")]))), - "y": - c, - }) - - uurl = GenerateChart([{ - "fill": - False, - "label": [ - await GetTranslatedText( - ctx.guild.id, - "seewarns_chart_title", - MEMBER=filterMember(member), - ) - ], - "lineTension": - 0, - "backgroundColor": - "#7289DA", - "borderColor": - "#7289DA", - "data": - data, - }]) + data.append( + { + "t": str( + datetime.datetime.fromtimestamp( + int(str(timestamp)[: str(timestamp).find(".")]) + ) + ), + "y": c, + } + ) + + uurl = GenerateChart( + [ + { + "fill": False, + "label": [ + await GetTranslatedText( + ctx.guild.id, + "seewarns_chart_title", + MEMBER=filterMember(member), + ) + ], + "lineTension": 0, + "backgroundColor": "#7289DA", + "borderColor": "#7289DA", + "data": data, + } + ] + ) embed = Embed( - title=await GetTranslatedText(ctx.guild.id, - "seewarns_title", - MEMBER=filterMember(member)), + title=await GetTranslatedText( + ctx.guild.id, "seewarns_title", MEMBER=filterMember(member) + ), description=message, ) final_url = uurl if len(uurl) < 2048 else ShortenLink(uurl) embed.set_image(url=final_url) embed.set_footer( - text=await GetTranslatedText(ctx.guild.id, - "footer_executed_by", - USERNAME=filterMember(ctx.author)), + text=await GetTranslatedText( + ctx.guild.id, "footer_executed_by", USERNAME=filterMember(ctx.author) + ), icon_url=hammericon, ) return await ctx.respond(embed=embed) -@bot.slash_command(guild_only=True, - name="unwarn", - description="Removes a strike from a user") -@discord.default_permissions(kick_members=True, ) +@bot.slash_command( + guild_only=True, name="unwarn", description="Removes a strike from a user" +) +@discord.default_permissions( + kick_members=True, +) async def unwarn(ctx, member: discord.Member, id: int = None, *, reason=None): await SendMetric("unwarn") if await GetWarnings(member.id, ctx.guild.id) == 0: - return await ctx.respond(await - GetTranslatedText(ctx.guild.id, - "unwarn_no_warns")) + return await ctx.respond( + await GetTranslatedText(ctx.guild.id, "unwarn_no_warns") + ) if id == None: - descriptionMsg = await GetTranslatedText(ctx.guild.id, - "unwarn_description_msg") + descriptionMsg = await GetTranslatedText(ctx.guild.id, "unwarn_description_msg") embed = Embed( - title=await GetTranslatedText(ctx.guild.id, - "unwarn_wrong_selection"), + title=await GetTranslatedText(ctx.guild.id, "unwarn_wrong_selection"), description=descriptionMsg, ) allwarns = await getAllWarns(member.id, ctx.guild.id) embed.add_field( - name=await GetTranslatedText(ctx.guild.id, - "seewarns_title", - MEMBER=filterMember(member)), + name=await GetTranslatedText( + ctx.guild.id, "seewarns_title", MEMBER=filterMember(member) + ), value="\n".join(allwarns), ) return await ctx.respond(embed=embed) if reason == None: - reason = await GetTranslatedText(ctx.guild.id, - "unpunishment_default_reason") - message = await GetTranslatedText(ctx.guild.id, - "unwarn_msg", - REASON=reason) - - descr = await GetTranslatedText(ctx.guild.id, - "unwarn_description", - MEMBER=filterMember(member), - REASON=reason) + reason = await GetTranslatedText(ctx.guild.id, "unpunishment_default_reason") + message = await GetTranslatedText(ctx.guild.id, "unwarn_msg", REASON=reason) + + descr = await GetTranslatedText( + ctx.guild.id, "unwarn_description", MEMBER=filterMember(member), REASON=reason + ) embed = Embed( - title=await GetTranslatedText(ctx.guild.id, - "unwarn_title", - MEMBER=filterMember(member)), + title=await GetTranslatedText( + ctx.guild.id, "unwarn_title", MEMBER=filterMember(member) + ), description=descr, ) embed.set_footer( - text=await GetTranslatedText(ctx.guild.id, - "footer_executed_by", - USERNAME=filterMember(ctx.author)), + text=await GetTranslatedText( + ctx.guild.id, "footer_executed_by", USERNAME=filterMember(ctx.author) + ), icon_url=hammericon, ) embed.set_thumbnail(url=member.display_avatar) warn = await Removewarn(member.id, ctx.guild.id, id) - s = (await GetTranslatedText(ctx.guild.id, "plural_warn") if warn != 1 else - await GetTranslatedText(ctx.guild.id, "singular_warn")) + s = ( + await GetTranslatedText(ctx.guild.id, "plural_warn") + if warn != 1 + else await GetTranslatedText(ctx.guild.id, "singular_warn") + ) congrats = "Yey! :tada:" if warn == 0 else "" embed.add_field( name=await GetTranslatedText(ctx.guild.id, "automod_count_title"), @@ -1083,18 +1090,17 @@ async def unwarn(ctx, member: discord.Member, id: int = None, *, reason=None): await SendMessageTo(ctx, member, message) -@bot.slash_command(guild_only=True, - name="clearwarns", - description="Removes all strikes from a user") -@discord.default_permissions(kick_members=True, ) +@bot.slash_command( + guild_only=True, name="clearwarns", description="Removes all strikes from a user" +) +@discord.default_permissions( + kick_members=True, +) async def clearwarns(ctx, member: discord.Member, *, reason=None): await SendMetric("clearwarns") if reason == None: - reason = await GetTranslatedText(ctx.guild.id, - "unpunishment_default_reason") - message = await GetTranslatedText(ctx.guild.id, - "clearwarns_msg", - REASON=reason) + reason = await GetTranslatedText(ctx.guild.id, "unpunishment_default_reason") + message = await GetTranslatedText(ctx.guild.id, "clearwarns_msg", REASON=reason) descr = await GetTranslatedText( ctx.guild.id, @@ -1103,15 +1109,15 @@ async def clearwarns(ctx, member: discord.Member, *, reason=None): REASON=reason, ) embed = Embed( - title=await GetTranslatedText(ctx.guild.id, - "clearwarns_title", - MEMBER=filterMember(member)), + title=await GetTranslatedText( + ctx.guild.id, "clearwarns_title", MEMBER=filterMember(member) + ), description=descr, ) embed.set_footer( - text=await GetTranslatedText(ctx.guild.id, - "footer_executed_by", - USERNAME=filterMember(ctx.author)), + text=await GetTranslatedText( + ctx.guild.id, "footer_executed_by", USERNAME=filterMember(ctx.author) + ), icon_url=hammericon, ) embed.set_thumbnail(url=member.display_avatar) @@ -1137,7 +1143,9 @@ async def clearwarns(ctx, member: discord.Member, *, reason=None): name="automod", description="Customizes in this guild Hammer's automod", ) -@discord.default_permissions(administrator=True, ) +@discord.default_permissions( + administrator=True, +) @option( "action", description="Select add/remove word from swear list", @@ -1151,8 +1159,9 @@ async def automod(ctx, action: str, word: str): response = await AddDeniedWord(ctx.guild.id, ctx.author.id, word) else: return await ctx.respond( - embed=ErrorEmbed(await GetTranslatedText(ctx.guild.id, - "error_automod_syntax")), + embed=ErrorEmbed( + await GetTranslatedText(ctx.guild.id, "error_automod_syntax") + ), ephemeral=True, ) if response: @@ -1169,9 +1178,9 @@ async def automod(ctx, action: str, word: str): ) else: return await ctx.respond( - embed=ErrorEmbed(await GetTranslatedText(ctx.guild.id, - "error_automod", - WORD=word)), + embed=ErrorEmbed( + await GetTranslatedText(ctx.guild.id, "error_automod", WORD=word) + ), ephemeral=True, ) @@ -1264,27 +1273,33 @@ async def restart(ctx): name="setdelay", description="Updates the message delay in a channel with a set of custom time interval", ) -@discord.default_permissions(manage_messages=True, ) +@discord.default_permissions( + manage_messages=True, +) async def setdelay(ctx, seconds: float, reason: str = ""): await SendMetric("setdelay") - m = (await GetTranslatedText(ctx.guild.id, "modified") if seconds > 0.0 - else await GetTranslatedText(ctx.guild.id, "removed")) - reason = (((await GetTranslatedText(ctx.guild.id, "for")) + - reason) if reason != "" and reason != None else "") + m = ( + await GetTranslatedText(ctx.guild.id, "modified") + if seconds > 0.0 + else await GetTranslatedText(ctx.guild.id, "removed") + ) + reason = ( + ((await GetTranslatedText(ctx.guild.id, "for")) + reason) + if reason != "" and reason != None + else "" + ) embed = Embed( - title=await GetTranslatedText(ctx.guild.id, - "setdelay_title", - M=m, - CHANNEL=ctx.channel), - description=await GetTranslatedText(ctx.guild.id, - "setdelay_description", - SECONDS=seconds, - REASON=reason), + title=await GetTranslatedText( + ctx.guild.id, "setdelay_title", M=m, CHANNEL=ctx.channel + ), + description=await GetTranslatedText( + ctx.guild.id, "setdelay_description", SECONDS=seconds, REASON=reason + ), ) embed.set_footer( - text=await GetTranslatedText(ctx.guild.id, - "footer_executed_by", - USERNAME=filterMember(ctx.author)), + text=await GetTranslatedText( + ctx.guild.id, "footer_executed_by", USERNAME=filterMember(ctx.author) + ), icon_url=hammericon, ) @@ -1298,7 +1313,9 @@ async def setdelay(ctx, seconds: float, reason: str = ""): name="mute", description="Removes the hability to talk or join voice channels to a user", ) -@discord.default_permissions(manage_messages=True, ) +@discord.default_permissions( + manage_messages=True, +) async def mute(ctx, member: discord.Member, *, reason=None): await SendMetric("mute") guild = ctx.guild @@ -1317,17 +1334,15 @@ async def mute(ctx, member: discord.Member, *, reason=None): ) if reason == None: - reason = await GetTranslatedText(ctx.guild.id, - "punishment_default_reason") + reason = await GetTranslatedText(ctx.guild.id, "punishment_default_reason") embed = discord.Embed( - title=await GetTranslatedText(ctx.guild.id, - "mute_title", - MEMBER=filterMember(member)), - description=await GetTranslatedText(ctx.guild.id, - "mute_description", - MENTION=member.mention, - REASON=reason), + title=await GetTranslatedText( + ctx.guild.id, "mute_title", MEMBER=filterMember(member) + ), + description=await GetTranslatedText( + ctx.guild.id, "mute_description", MENTION=member.mention, REASON=reason + ), colour=discord.Colour.red(), ) await ctx.respond(embed=embed) @@ -1336,10 +1351,9 @@ async def mute(ctx, member: discord.Member, *, reason=None): SendMessageTo( ctx, member, - await GetTranslatedText(ctx.guild.id, - "mute_msg", - GUILD=ctx.guild.name, - REASON=reason), + await GetTranslatedText( + ctx.guild.id, "mute_msg", GUILD=ctx.guild.name, REASON=reason + ), ) @@ -1349,7 +1363,9 @@ async def mute(ctx, member: discord.Member, *, reason=None): name="unmute", description="Restores the hability to talk or join voice channels to a user", ) -@discord.default_permissions(manage_messages=True, ) +@discord.default_permissions( + manage_messages=True, +) async def unmute(ctx, member: discord.Member, *, reason=None): await SendMetric("unmute") mutedRole = discord.utils.get(ctx.guild.roles, name="Muted") @@ -1361,19 +1377,17 @@ async def unmute(ctx, member: discord.Member, *, reason=None): SendMessageTo( ctx, member, - await GetTranslatedText(ctx.guild.id, - "unmute_msg", - GUILD=ctx.guild.name, - REASON=reason), + await GetTranslatedText( + ctx.guild.id, "unmute_msg", GUILD=ctx.guild.name, REASON=reason + ), ) embed = discord.Embed( - title=await GetTranslatedText(ctx.guild.id, - "unmute_title", - MEMBER=filterMember(member)), - description=await GetTranslatedText(ctx.guild.id, - "unmute_description", - MENTION=member.mention, - REASON=reason), + title=await GetTranslatedText( + ctx.guild.id, "unmute_title", MEMBER=filterMember(member) + ), + description=await GetTranslatedText( + ctx.guild.id, "unmute_description", MENTION=member.mention, REASON=reason + ), colour=discord.Colour.light_gray(), ) await ctx.respond(embed=embed) @@ -1393,17 +1407,15 @@ async def lock(ctx, channel: discord.TextChannel = None, reason=None): overwrite.send_messages = False await channel.set_permissions(ctx.guild.default_role, overwrite=overwrite) embed = Embed( - title=await GetTranslatedText(ctx.guild.id, - "lock_title", - CHANNEL=ctx.channel), - description=await GetTranslatedText(ctx.guild.id, - "lock_description", - REASON=reason), + title=await GetTranslatedText(ctx.guild.id, "lock_title", CHANNEL=ctx.channel), + description=await GetTranslatedText( + ctx.guild.id, "lock_description", REASON=reason + ), ) embed.set_footer( - text=await GetTranslatedText(ctx.guild.id, - "footer_executed_by", - USERNAME=filterMember(ctx.author)), + text=await GetTranslatedText( + ctx.guild.id, "footer_executed_by", USERNAME=filterMember(ctx.author) + ), icon_url=hammericon, ) await ctx.respond(embed=embed) @@ -1423,17 +1435,17 @@ async def unlock(ctx, channel: discord.TextChannel = None, reason=None): overwrite.send_messages = True await channel.set_permissions(ctx.guild.default_role, overwrite=overwrite) embed = Embed( - title=await GetTranslatedText(ctx.guild.id, - "unlock_title", - CHANNEL=ctx.channel), - description=await GetTranslatedText(ctx.guild.id, - "unlock_description", - REASON=reason), + title=await GetTranslatedText( + ctx.guild.id, "unlock_title", CHANNEL=ctx.channel + ), + description=await GetTranslatedText( + ctx.guild.id, "unlock_description", REASON=reason + ), ) embed.set_footer( - text=await GetTranslatedText(ctx.guild.id, - "footer_executed_by", - USERNAME=filterMember(ctx.author)), + text=await GetTranslatedText( + ctx.guild.id, "footer_executed_by", USERNAME=filterMember(ctx.author) + ), icon_url=hammericon, ) await ctx.respond(embed=embed) @@ -1450,9 +1462,9 @@ async def suggest(ctx, suggestion: str): description=f"{suggestion}", ) embed.set_footer( - text=await GetTranslatedText(ctx.guild.id, - "footer_executed_by", - USERNAME=filterMember(ctx.author)), + text=await GetTranslatedText( + ctx.guild.id, "footer_executed_by", USERNAME=filterMember(ctx.author) + ), icon_url=hammericon, ) suggestionChannel = bot.get_channel(int(DEV_SUGGESTIONS_CHANNEL)) @@ -1474,9 +1486,9 @@ async def invite(ctx): description=f"[**🔗{await GetTranslatedText(ctx.guild.id, 'hammer_link')}**](https://discordapp.com/api/oauth2/authorize?client_id=591633652493058068&permissions=8&scope=bot)", ) embed.set_footer( - text=await GetTranslatedText(ctx.guild.id, - "footer_executed_by", - USERNAME=filterMember(ctx.author)), + text=await GetTranslatedText( + ctx.guild.id, "footer_executed_by", USERNAME=filterMember(ctx.author) + ), icon_url=hammericon, ) await ctx.respond(embed=embed) @@ -1486,9 +1498,9 @@ async def invite(ctx): @discord.default_permissions(administrator=True) -@bot.slash_command(name="settings", - description="Modifies some Hammer config values", - guild_only=True) +@bot.slash_command( + name="settings", description="Modifies some Hammer config values", guild_only=True +) @option( "module", description="Pick a module to switch!", @@ -1497,8 +1509,7 @@ async def invite(ctx): @option( "value", description="Select on/off", - autocomplete=discord.utils.basic_autocomplete( - ["on", "off", "en", "cat", "es"]), + autocomplete=discord.utils.basic_autocomplete(["on", "off", "en", "cat", "es"]), ) async def settings(ctx, module: str = None, value: str = None): await SendMetric("settings") @@ -1510,10 +1521,9 @@ async def settings(ctx, module: str = None, value: str = None): await SaveSetting(ctx.guild.id, module, value) action = "enabled" if value else "disabled" await ctx.respond( - await GetTranslatedText(ctx.guild.id, - "settings_module", - MODULE=module, - ACTION=action), + await GetTranslatedText( + ctx.guild.id, "settings_module", MODULE=module, ACTION=action + ), ephemeral=True, ) @@ -1535,8 +1545,7 @@ async def settings(ctx, module: str = None, value: str = None): await GetTranslatedText( ctx.guild.id, "error_settings_syntax", - COMMAND="/settings language " + - "/".join(languagesOptions), + COMMAND="/settings language " + "/".join(languagesOptions), ), ephemeral=True, ) @@ -1564,19 +1573,20 @@ async def settings(ctx, module: str = None, value: str = None): return embed = Embed( title=await GetTranslatedText(ctx.guild.id, "settings_title"), - description=await GetTranslatedText(ctx.guild.id, - "settings_description"), + description=await GetTranslatedText(ctx.guild.id, "settings_description"), ) print("getting settings from discord.Guild.id", ctx.guild.id) automodStatus = await GetSettings(ctx.guild.id, 1) automodStatustr = "**✅ ON**" if automodStatus else "**❌ OFF**" recommendedactivityAutomod = ( - await GetTranslatedText(ctx.guild.id, - "settings_disable_automod", - COMMAND_PREFIX=COMMAND_PREFIX) if automodStatus - else await GetTranslatedText(ctx.guild.id, - "settings_enable_automod", - COMMAND_PREFIX=COMMAND_PREFIX)) + await GetTranslatedText( + ctx.guild.id, "settings_disable_automod", COMMAND_PREFIX=COMMAND_PREFIX + ) + if automodStatus + else await GetTranslatedText( + ctx.guild.id, "settings_enable_automod", COMMAND_PREFIX=COMMAND_PREFIX + ) + ) embed.add_field( name=await GetTranslatedText(ctx.guild.id, "help_automod_title"), value=await GetTranslatedText( @@ -1605,9 +1615,9 @@ async def settings(ctx, module: str = None, value: str = None): inline=False, ) embed.set_footer( - text=await GetTranslatedText(ctx.guild.id, - "footer_executed_by", - USERNAME=filterMember(ctx.author)), + text=await GetTranslatedText( + ctx.guild.id, "footer_executed_by", USERNAME=filterMember(ctx.author) + ), icon_url=hammericon, ) await ctx.respond(embed=embed) @@ -1624,42 +1634,47 @@ async def metrics(ctx): _, commandType, timestamp = metric commandDict[commandType] = commandDict.get(commandType, 0) + 1 provList = finalList.get(commandType, []) - provList.append({ - "t": - str(datetime.datetime.fromtimestamp(int(timestamp))), - "y": - commandDict[commandType], - }) + provList.append( + { + "t": str(datetime.datetime.fromtimestamp(int(timestamp))), + "y": commandDict[commandType], + } + ) finalList[commandType] = provList # prepare datasets final = [] for ( - command, - data, + command, + data, ) in finalList.items(): - final.append({ - "fill": False, - "label": [command], - "lineTension": 0, - "data": data, - }) + final.append( + { + "fill": False, + "label": [command], + "lineTension": 0, + "data": data, + } + ) uurl = GenerateChart(final) embed = Embed( title="Lifetime Metrics (since 25-08-23)", - description="The following command have been used:" + " ".join([ - cmd + ": " + str(times) + " times" - for cmd, times in commandDict.items() - ]), + description="The following command have been used:" + + " ".join( + [ + cmd + ": " + str(times) + " times" + for cmd, times in commandDict.items() + ] + ), ) final_url = uurl if len(uurl) < 2048 else ShortenLink(uurl) embed.set_image(url=final_url) embed.set_footer( - text=await GetTranslatedText(ctx.guild.id, - "footer_executed_by", - USERNAME=filterMember(ctx.author)), + text=await GetTranslatedText( + ctx.guild.id, "footer_executed_by", USERNAME=filterMember(ctx.author) + ), icon_url=hammericon, ) return await ctx.respond(embed=embed) From 25443945e98f6a3c172afebb9ec4c1e9fcff836e Mon Sep 17 00:00:00 2001 From: "Restyled.io" Date: Tue, 10 Oct 2023 06:57:54 +0000 Subject: [PATCH 4/8] Restyled by isort --- bot.py | 17 +++++------------ 1 file changed, 5 insertions(+), 12 deletions(-) diff --git a/bot.py b/bot.py index 425f972..460c93c 100644 --- a/bot.py +++ b/bot.py @@ -7,27 +7,20 @@ import urllib from email import message from os import listdir -from os.path import isfile -from os.path import join +from os.path import isfile, join from pydoc import describe from time import time import discord -from discord import Embed -from discord import guild_only +from discord import Embed, guild_only from discord.commands import option from discord.ext import commands from discord.ext.commands.core import command from quickchart import QuickChart -from get_enviroment import ANNOUNCEMENTS_CHANNEL -from get_enviroment import COMMAND_PREFIX -from get_enviroment import DEV_SUGGESTIONS_CHANNEL -from get_enviroment import OWNER -from get_enviroment import SECURITY_CHANNEL -from get_enviroment import SECURITY_GUILD -from get_enviroment import SWEAR_WORDS_LIST -from get_enviroment import TOKEN +from get_enviroment import (ANNOUNCEMENTS_CHANNEL, COMMAND_PREFIX, + DEV_SUGGESTIONS_CHANNEL, OWNER, SECURITY_CHANNEL, + SECURITY_GUILD, SWEAR_WORDS_LIST, TOKEN) # Language Loading From 34cba07d78f58a86e969be6e1f7e201ca88ff801 Mon Sep 17 00:00:00 2001 From: "Restyled.io" Date: Tue, 10 Oct 2023 06:57:55 +0000 Subject: [PATCH 5/8] Restyled by pyment --- bot.py | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/bot.py b/bot.py index 460c93c..9862188 100644 --- a/bot.py +++ b/bot.py @@ -28,7 +28,7 @@ def jsonToDict(filename): """ - :param filename: + :param filename: """ with open(filename) as f_in: @@ -373,6 +373,11 @@ async def SaveSetting(guildid: int, module: str, value: str): def ShortenLink(link: str): + """ + + :param link: str: + + """ headers = { "Authorization": f"Bearer {FEMTOLINK}", "Content-Type": "application/json", @@ -389,7 +394,7 @@ def ShortenLink(link: str): def GenerateChart(datasets): """ - :param datasets: + :param datasets: """ qc = QuickChart() @@ -439,7 +444,7 @@ async def SendMessageTo(ctx, member, message): def ErrorEmbed(error): """ - :param error: + :param error: """ embed = Embed(title=f":no_entry_sign: Error!", description=error) @@ -458,7 +463,7 @@ def ErrorEmbed(error): def unicodeLetterConver(word): """ - :param word: + :param word: """ f = "" @@ -508,7 +513,7 @@ def unicodeLetterConver(word): def numToEmoji(num): """ - :param num: + :param num: """ v = "" @@ -539,6 +544,7 @@ def filterMember(member: discord.Member): """ :param member: discord.Member: + :param member: discord.Member: """ username, discriminator = str(member).split("#") From b226b65f36d8639af6fe8431c2c502b65ec99b67 Mon Sep 17 00:00:00 2001 From: "Restyled.io" Date: Tue, 10 Oct 2023 06:57:56 +0000 Subject: [PATCH 6/8] Restyled by reorder-python-imports --- bot.py | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/bot.py b/bot.py index 9862188..739b1f0 100644 --- a/bot.py +++ b/bot.py @@ -7,20 +7,27 @@ import urllib from email import message from os import listdir -from os.path import isfile, join +from os.path import isfile +from os.path import join from pydoc import describe from time import time import discord -from discord import Embed, guild_only +from discord import Embed +from discord import guild_only from discord.commands import option from discord.ext import commands from discord.ext.commands.core import command from quickchart import QuickChart -from get_enviroment import (ANNOUNCEMENTS_CHANNEL, COMMAND_PREFIX, - DEV_SUGGESTIONS_CHANNEL, OWNER, SECURITY_CHANNEL, - SECURITY_GUILD, SWEAR_WORDS_LIST, TOKEN) +from get_enviroment import ANNOUNCEMENTS_CHANNEL +from get_enviroment import COMMAND_PREFIX +from get_enviroment import DEV_SUGGESTIONS_CHANNEL +from get_enviroment import OWNER +from get_enviroment import SECURITY_CHANNEL +from get_enviroment import SECURITY_GUILD +from get_enviroment import SWEAR_WORDS_LIST +from get_enviroment import TOKEN # Language Loading From 20c11869d5c7872862998000faa31638ff59be0a Mon Sep 17 00:00:00 2001 From: "Restyled.io" Date: Tue, 10 Oct 2023 06:57:57 +0000 Subject: [PATCH 7/8] Restyled by whitespace --- bot.py | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/bot.py b/bot.py index 739b1f0..b5ffe85 100644 --- a/bot.py +++ b/bot.py @@ -35,7 +35,7 @@ def jsonToDict(filename): """ - :param filename: + :param filename: """ with open(filename) as f_in: @@ -382,7 +382,7 @@ async def SaveSetting(guildid: int, module: str, value: str): def ShortenLink(link: str): """ - :param link: str: + :param link: str: """ headers = { @@ -401,7 +401,7 @@ def ShortenLink(link: str): def GenerateChart(datasets): """ - :param datasets: + :param datasets: """ qc = QuickChart() @@ -451,7 +451,7 @@ async def SendMessageTo(ctx, member, message): def ErrorEmbed(error): """ - :param error: + :param error: """ embed = Embed(title=f":no_entry_sign: Error!", description=error) @@ -470,7 +470,7 @@ def ErrorEmbed(error): def unicodeLetterConver(word): """ - :param word: + :param word: """ f = "" @@ -520,7 +520,7 @@ def unicodeLetterConver(word): def numToEmoji(num): """ - :param num: + :param num: """ v = "" @@ -551,7 +551,7 @@ def filterMember(member: discord.Member): """ :param member: discord.Member: - :param member: discord.Member: + :param member: discord.Member: """ username, discriminator = str(member).split("#") From a3637fa5ba0e572c37a9e9c5c80accb5758cc7bf Mon Sep 17 00:00:00 2001 From: "Restyled.io" Date: Tue, 10 Oct 2023 06:57:58 +0000 Subject: [PATCH 8/8] Restyled by yapf --- bot.py | 788 ++++++++++++++++++++++++++++----------------------------- 1 file changed, 391 insertions(+), 397 deletions(-) diff --git a/bot.py b/bot.py index b5ffe85..9e14467 100644 --- a/bot.py +++ b/bot.py @@ -46,44 +46,37 @@ def jsonToDict(filename): langFiles = [f for f in listdir("./langs") if isfile(join("./langs", f))] languages = dict() for languageFile in langFiles: - languages[languageFile.split(".")[0]] = jsonToDict("./langs/" + languageFile) + languages[languageFile.split(".")[0]] = jsonToDict("./langs/" + + languageFile) # database import & connection conn = sqlite3.connect("maindatabase1.db") cur = conn.cursor() -cur.execute( - """CREATE TABLE IF NOT EXISTS `warns` ( +cur.execute("""CREATE TABLE IF NOT EXISTS `warns` ( `id` INTEGER PRIMARY KEY AUTOINCREMENT, `userid` INT(100), `guildid` INT, `reason` TEXT, `timestamp` INT); - """ -) -cur.execute( - """CREATE TABLE IF NOT EXISTS `customWords` ( + """) +cur.execute("""CREATE TABLE IF NOT EXISTS `customWords` ( `id` INTEGER PRIMARY KEY AUTOINCREMENT, `guildid` INT, `uploaderId`INT, `word` TEXT, `type` INT); - """ -) -cur.execute( - """CREATE TABLE IF NOT EXISTS `settings` ( + """) +cur.execute("""CREATE TABLE IF NOT EXISTS `settings` ( `guildid` INT(100) UNIQUE, `automod` INT, `language` TEXT); - """ -) -cur.execute( - """CREATE TABLE IF NOT EXISTS `metrics` ( + """) +cur.execute("""CREATE TABLE IF NOT EXISTS `metrics` ( `id` INTEGER PRIMARY KEY AUTOINCREMENT, `commandName` TEXT, `timestamp` INT); - """ -) + """) hammericon = "https://images-ext-2.discordapp.net/external/OKc8xu6AILGNFY3nSTt7wGbg-Mi1iQZonoLTFg85o-E/%3Fsize%3D1024/https/cdn.discordapp.com/avatars/591633652493058068/e6011129c5169b29ed05a6dc873175cb.png?width=670&height=670" @@ -102,16 +95,15 @@ def jsonToDict(filename): @bot.slash_command( - name="help", description="Displays all the available commands for Hammer" -) + name="help", description="Displays all the available commands for Hammer") async def help(ctx): # Define each page descr = await GetTranslatedText(ctx.guild.id, "help_description") - embed = Embed( - title="Hammer Bot Help", description=descr, colour=discord.Colour.lighter_grey() - ) + embed = Embed(title="Hammer Bot Help", + description=descr, + colour=discord.Colour.lighter_grey()) user = await GetTranslatedText(ctx.guild.id, "user") reason = await GetTranslatedText(ctx.guild.id, "reason") @@ -131,25 +123,25 @@ async def help(ctx): embed.add_field( name=await GetTranslatedText(ctx.guild.id, "help_automod_title"), - value=await GetTranslatedText( - ctx.guild.id, "help_automod_description", COMMAND_PREFIX=COMMAND_PREFIX - ), + value=await GetTranslatedText(ctx.guild.id, + "help_automod_description", + COMMAND_PREFIX=COMMAND_PREFIX), inline=True, ) embed.add_field( name=await GetTranslatedText(ctx.guild.id, "help_chatmod_title"), - value=await GetTranslatedText( - ctx.guild.id, "help_chatmod_description", COMMAND_PREFIX=COMMAND_PREFIX - ), + value=await GetTranslatedText(ctx.guild.id, + "help_chatmod_description", + COMMAND_PREFIX=COMMAND_PREFIX), inline=True, ) embed.add_field( name=await GetTranslatedText(ctx.guild.id, "help_various_title"), - value=await GetTranslatedText( - ctx.guild.id, "help_various_description", COMMAND_PREFIX=COMMAND_PREFIX - ), + value=await GetTranslatedText(ctx.guild.id, + "help_various_description", + COMMAND_PREFIX=COMMAND_PREFIX), inline=True, ) @@ -161,16 +153,16 @@ async def help(ctx): embed.add_field( name=await GetTranslatedText(ctx.guild.id, "help_commands_title"), - value=await GetTranslatedText( - ctx.guild.id, "help_commands_description", COMMAND_PREFIX=COMMAND_PREFIX - ), + value=await GetTranslatedText(ctx.guild.id, + "help_commands_description", + COMMAND_PREFIX=COMMAND_PREFIX), inline=True, ) embed.set_footer( - text=await GetTranslatedText( - ctx.guild.id, "footer_executed_by", USERNAME=filterMember(ctx.author) - ), + text=await GetTranslatedText(ctx.guild.id, + "footer_executed_by", + USERNAME=filterMember(ctx.author)), icon_url=hammericon, ) @@ -238,7 +230,8 @@ async def Removewarn(userid: int, guildId: int, relativeWarnId: int): async def Clearwarns(userid: int, guildId: int): # delete all rows - cur.execute("DELETE FROM warns WHERE userid=? AND guildid=?", (userid, guildId)) + cur.execute("DELETE FROM warns WHERE userid=? AND guildid=?", + (userid, guildId)) conn.commit() return @@ -253,21 +246,20 @@ async def getAllWarns(userid: int, guildid: int): emojis = ":" + numToEmoji(c) + ":" else: emojis = str(c) - ddt = int(str(dt)[: str(dt).find(".")]) - allwarns.append( - await GetTranslatedText( - guildid, "warns_line_loop", EMOJIS=emojis, SUBREASON=SubReason, DDT=ddt - ) - ) + ddt = int(str(dt)[:str(dt).find(".")]) + allwarns.append(await GetTranslatedText(guildid, + "warns_line_loop", + EMOJIS=emojis, + SUBREASON=SubReason, + DDT=ddt)) c = c + 1 return allwarns async def GetAutomodCustomWords(guildid: int, mode: str): wtype = 1 if mode == "allow" else 0 - cur.execute( - "SELECT word FROM customWords WHERE guildid = ? AND type = ?", (guildid, wtype) - ) + cur.execute("SELECT word FROM customWords WHERE guildid = ? AND type = ?", + (guildid, wtype)) words = cur.fetchall() a = [] if len(words) > 0: @@ -322,7 +314,8 @@ async def AddDeniedWord(guildid: int, userid: int, word: str): async def GetSettings(guildid: int, index: int): - cur.execute("SELECT * FROM settings WHERE guildid = ? LIMIT 1", (guildid,)) + cur.execute("SELECT * FROM settings WHERE guildid = ? LIMIT 1", + (guildid, )) rows = cur.fetchall() if len(rows) > 0: return rows[0][index] @@ -334,9 +327,8 @@ async def GetTranslatedText(guildid: int, index: str, **replace): global languages dbLanguageRecord = await GetSettings(guildid, 2) - currentLanguage = ( - "en" if dbLanguageRecord == 0 or dbLanguageRecord == None else dbLanguageRecord - ) + currentLanguage = ("en" if dbLanguageRecord == 0 + or dbLanguageRecord == None else dbLanguageRecord) text = languages[currentLanguage].get(index, "Word not translated yet.") for oldString, newString in replace.items(): @@ -355,11 +347,14 @@ async def SendMetric(commandName: str): async def SaveSetting(guildid: int, module: str, value: str): - cur.execute("SELECT * FROM settings WHERE guildid = ? LIMIT 1", (guildid,)) + cur.execute("SELECT * FROM settings WHERE guildid = ? LIMIT 1", + (guildid, )) rows = cur.fetchall() # print(rows) - if len(rows) > 0: # cur.execute('INSERT INTO foo (a,b) values (?,?)', (strA, strB)) + if len( + rows + ) > 0: # cur.execute('INSERT INTO foo (a,b) values (?,?)', (strA, strB)) query = f"""UPDATE settings SET {module}=? WHERE guildid=?""" @@ -392,9 +387,9 @@ def ShortenLink(link: str): data = '{ "long_url": "' + uurl + '" }' - response = requests.post( - "https://femtolink.jaumelopez.dev/api/link", headers=headers, data=data - ) + response = requests.post("https://femtolink.jaumelopez.dev/api/link", + headers=headers, + data=data) return response.json()["link"] @@ -410,18 +405,20 @@ def GenerateChart(datasets): qc.device_pixel_ratio = 2.0 qc.config = { "type": "line", - "data": {"datasets": datasets}, + "data": { + "datasets": datasets + }, "options": { "scales": { - "xAxes": [ - { - "type": "time", - "time": { - "parser": "YYYY-MM-DD HH:mm:ss", - "displayFormats": {"day": "DD/MM/YYYY"}, + "xAxes": [{ + "type": "time", + "time": { + "parser": "YYYY-MM-DD HH:mm:ss", + "displayFormats": { + "day": "DD/MM/YYYY" }, - } - ] + }, + }] } }, } @@ -438,11 +435,10 @@ async def SendMessageTo(ctx, member, message): await member.send(message) except: await ctx.respond( - embed=ErrorEmbed( - await GetTranslatedText( - ctx.guild.id, "error_deliver_msg", USERNAME=filterMember(member) - ) - ), + embed=ErrorEmbed(await + GetTranslatedText(ctx.guild.id, + "error_deliver_msg", + USERNAME=filterMember(member))), ephemeral=True, ) @@ -457,7 +453,8 @@ def ErrorEmbed(error): embed = Embed(title=f":no_entry_sign: Error!", description=error) embed.set_thumbnail( - url="https://external-content.duckduckgo.com/iu/?u=https%3A%2F%2Ficonsplace.com%2Fwp-content%2Fuploads%2F_icons%2Fff0000%2F256%2Fpng%2Ferror-icon-14-256.png&f=1&nofb=1" + url= + "https://external-content.duckduckgo.com/iu/?u=https%3A%2F%2Ficonsplace.com%2Fwp-content%2Fuploads%2F_icons%2Fff0000%2F256%2Fpng%2Ferror-icon-14-256.png&f=1&nofb=1" ) embed.set_footer( @@ -580,8 +577,10 @@ async def on_message(message): if settings != 1: return # user has disabled Automod or does not have it installed words = message.content.split() - allowed_words_guild_list = await GetAutomodCustomWords(message.guild.id, "allow") - denied_words_guild_list = await GetAutomodCustomWords(message.guild.id, "deny") + allowed_words_guild_list = await GetAutomodCustomWords( + message.guild.id, "allow") + denied_words_guild_list = await GetAutomodCustomWords( + message.guild.id, "deny") print("scanned: ", message.content) for word in words: # print("scanning word:",word) @@ -610,19 +609,22 @@ async def on_message(message): description=descr, ) embed.set_footer( - text=await GetTranslatedText(message.guild.id, "automod_warn_footer"), + text=await GetTranslatedText(message.guild.id, + "automod_warn_footer"), icon_url=hammericon, ) embed.set_thumbnail(url=member.display_avatar) warn = await AddWarning( member.id, message.guild.id, - await GetTranslatedText(message.guild.id, "automod_warn_reason"), + await GetTranslatedText(message.guild.id, + "automod_warn_reason"), ) await SendMetric("automod") s = "s" if warn > 1 else "" embed.add_field( - name=await GetTranslatedText(message.guild.id, "automod_count_title"), + name=await GetTranslatedText(message.guild.id, + "automod_count_title"), value=await GetTranslatedText( message.guild.id, "automod_count_description", @@ -633,14 +635,13 @@ async def on_message(message): inline=True, ) bannedmessage = ( - message.content[: message.content.find(originalWord)] - + "~~" - + word - + "~~" - + message.content[message.content.find(originalWord) + len(word) :] - ) + message.content[:message.content.find(originalWord)] + "~~" + + word + "~~" + + message.content[message.content.find(originalWord) + + len(word):]) embed.add_field( - name=await GetTranslatedText(message.guild.id, "automod_removed_title"), + name=await GetTranslatedText(message.guild.id, + "automod_removed_title"), value=await GetTranslatedText( message.guild.id, "automod_removed_description", @@ -649,12 +650,10 @@ async def on_message(message): inline=True, ) embed.add_field( - name=await GetTranslatedText( - message.guild.id, "automod_nothappy_title" - ), - value=await GetTranslatedText( - message.guild.id, "automod_nothappy_description" - ), + name=await GetTranslatedText(message.guild.id, + "automod_nothappy_title"), + value=await GetTranslatedText(message.guild.id, + "automod_nothappy_description"), inline=False, ) await message.channel.send(embed=embed) @@ -665,24 +664,19 @@ async def on_message(message): except: embed = ErrorEmbed( - await message.channel.send( - embed=ErrorEmbed( - await GetTranslatedText( - message.guild.id, - "error_deliver_msg", - USERNAME=filterMember(member), - ) - ), - ), - ) + await message.channel.send(embed=ErrorEmbed( + await GetTranslatedText( + message.guild.id, + "error_deliver_msg", + USERNAME=filterMember(member), + )), ), ) message.channel.send(embed=embed) @bot.event async def on_ready(): - await bot.change_presence( - activity=discord.Activity(type=discord.ActivityType.watching, name="you") - ) + await bot.change_presence(activity=discord.Activity( + type=discord.ActivityType.watching, name="you")) print("HAMMER BOT Ready!", datetime.datetime.now()) botname = await bot.application_info() print("logged in as:", botname.name) @@ -699,7 +693,9 @@ async def on_ready(): debug = False # ALWAYS FALSE! -@bot.slash_command(guild_only=True, name="hello", guild_ids=[int(SECURITY_GUILD)]) +@bot.slash_command(guild_only=True, + name="hello", + guild_ids=[int(SECURITY_GUILD)]) async def hello(ctx): await ctx.defer() await SendMetric("hello") @@ -711,9 +707,10 @@ async def hello(ctx): async def on_command_error(ctx, error): if isinstance(error, commands.MissingRequiredArgument): await ctx.respond( - await GetTranslatedText( - ctx.guild.id, "error_404", ERROR=error, COMMAND_PREFIX=COMMAND_PREFIX - ), + await GetTranslatedText(ctx.guild.id, + "error_404", + ERROR=error, + COMMAND_PREFIX=COMMAND_PREFIX), ephemeral=True, ) if isinstance(error, commands.MissingPermissions): @@ -758,18 +755,18 @@ async def whois(ctx, member: discord.Member): WARNS=await GetWarnings(member.id, ctx.guild.id), ) embed = Embed( - title=await GetTranslatedText( - ctx.guild.id, "whois_title", MEMBER=filterMember(member) - ), + title=await GetTranslatedText(ctx.guild.id, + "whois_title", + MEMBER=filterMember(member)), description=descr, ) embed.set_thumbnail(url=member.display_avatar) embed.set_footer( - text=await GetTranslatedText( - ctx.guild.id, "footer_executed_by", USERNAME=filterMember(ctx.author) - ), + text=await GetTranslatedText(ctx.guild.id, + "footer_executed_by", + USERNAME=filterMember(ctx.author)), icon_url=hammericon, ) await ctx.respond(embed=embed) @@ -782,36 +779,37 @@ async def whois(ctx, member: discord.Member): name="ban", description="Keeps out a user permanently, forbidding its entry", ) -@discord.default_permissions( - ban_members=True, -) +@discord.default_permissions(ban_members=True, ) async def ban(ctx, member: discord.Member, *, reason=None): await SendMetric("ban") if member == ctx.author: - await ctx.respond( - await GetTranslatedText(ctx.guild.id, "error_self_ban"), ephemeral=True - ) + await ctx.respond(await GetTranslatedText(ctx.guild.id, + "error_self_ban"), + ephemeral=True) return if reason == None: - reason = await GetTranslatedText(ctx.guild.id, "punishment_default_reason") - message = await GetTranslatedText( - ctx.guild.id, "ban_msg", GUILD=ctx.guild.name, REASON=reason - ) - - descr = await GetTranslatedText( - ctx.guild.id, "ban_description", MEMBER=filterMember(member), REASON=reason - ) + reason = await GetTranslatedText(ctx.guild.id, + "punishment_default_reason") + message = await GetTranslatedText(ctx.guild.id, + "ban_msg", + GUILD=ctx.guild.name, + REASON=reason) + + descr = await GetTranslatedText(ctx.guild.id, + "ban_description", + MEMBER=filterMember(member), + REASON=reason) embed = Embed( - title=await GetTranslatedText( - ctx.guild.id, "ban_title", MEMBER=filterMember(member) - ), + title=await GetTranslatedText(ctx.guild.id, + "ban_title", + MEMBER=filterMember(member)), description=descr, ) embed.set_image(url="https://i.imgflip.com/19zat3.jpg") embed.set_footer( - text=await GetTranslatedText( - ctx.guild.id, "footer_executed_by", USERNAME=filterMember(ctx.author) - ), + text=await GetTranslatedText(ctx.guild.id, + "footer_executed_by", + USERNAME=filterMember(ctx.author)), icon_url=hammericon, ) if not debug: @@ -819,11 +817,10 @@ async def ban(ctx, member: discord.Member, *, reason=None): await member.ban(reason=reason) except: await ctx.respond( - embed=ErrorEmbed( - await GetTranslatedText( - ctx.guild.id, "error_ban_perm", MEMBER=filterMember(member) - ) - ), + embed=ErrorEmbed(await GetTranslatedText( + ctx.guild.id, + "error_ban_perm", + MEMBER=filterMember(member))), ephemeral=True, ) return @@ -833,50 +830,50 @@ async def ban(ctx, member: discord.Member, *, reason=None): await SendMessageTo(ctx, member, message) -@bot.slash_command( - guild_only=True, name="kick", description="Kicks out a member from the server" -) -@discord.default_permissions( - kick_members=True, -) +@bot.slash_command(guild_only=True, + name="kick", + description="Kicks out a member from the server") +@discord.default_permissions(kick_members=True, ) async def kick(ctx, member: discord.Member, *, reason=None): await SendMetric("kick") if member == ctx.author: - await ctx.respond( - await GetTranslatedText(ctx.guild.id, "error_self_kick"), ephemeral=True - ) + await ctx.respond(await GetTranslatedText(ctx.guild.id, + "error_self_kick"), + ephemeral=True) return if reason == None: - reason = await GetTranslatedText(ctx.guild.id, "punishment_default_reason") - message = await GetTranslatedText( - ctx.guild.id, "kick_msg", GUILD=ctx.guild.name, REASON=reason - ) + reason = await GetTranslatedText(ctx.guild.id, + "punishment_default_reason") + message = await GetTranslatedText(ctx.guild.id, + "kick_msg", + GUILD=ctx.guild.name, + REASON=reason) if not debug: try: await member.kick(reason=reason) except: ctx.respond( - embed=ErrorEmbed( - await GetTranslatedText( - ctx.guild.id, "error_kick_perm", MEMBER=filterMember(member) - ) - ), + embed=ErrorEmbed(await GetTranslatedText( + ctx.guild.id, + "error_kick_perm", + MEMBER=filterMember(member))), ephemeral=True, ) return - descr = await GetTranslatedText( - ctx.guild.id, "kick_description", MEMBER=filterMember(member), REASON=reason - ) + descr = await GetTranslatedText(ctx.guild.id, + "kick_description", + MEMBER=filterMember(member), + REASON=reason) embed = Embed( - title=await GetTranslatedText( - ctx.guild.id, "kick_title", MEMBER=filterMember(member) - ), + title=await GetTranslatedText(ctx.guild.id, + "kick_title", + MEMBER=filterMember(member)), description=descr, ) embed.set_footer( - text=await GetTranslatedText( - ctx.guild.id, "footer_executed_by", USERNAME=filterMember(ctx.author) - ), + text=await GetTranslatedText(ctx.guild.id, + "footer_executed_by", + USERNAME=filterMember(ctx.author)), icon_url=hammericon, ) embed.set_thumbnail(url=member.display_avatar) @@ -895,34 +892,37 @@ async def kick(ctx, member: discord.Member, *, reason=None): description="Select on/off", autocomplete=discord.utils.basic_autocomplete(["on", "off"]), ) -@discord.default_permissions( - administrator=True, -) -async def warn(ctx, member: discord.Member, reason=None, softwarn: bool = False): +@discord.default_permissions(administrator=True, ) +async def warn(ctx, + member: discord.Member, + reason=None, + softwarn: bool = False): await SendMetric("warn") if member == ctx.author: - await ctx.respond( - await GetTranslatedText(ctx.guild.id, "error_self_warn"), ephemeral=True - ) + await ctx.respond(await GetTranslatedText(ctx.guild.id, + "error_self_warn"), + ephemeral=True) return if reason == None: - reason = await GetTranslatedText(ctx.guild.id, "punishment_default_reason") + reason = await GetTranslatedText(ctx.guild.id, + "punishment_default_reason") message = await GetTranslatedText(ctx.guild.id, "warn_msg", REASON=reason) - descr = await GetTranslatedText( - ctx.guild.id, "warn_description", MEMBER=filterMember(member), REASON=reason - ) + descr = await GetTranslatedText(ctx.guild.id, + "warn_description", + MEMBER=filterMember(member), + REASON=reason) embed = Embed( - title=await GetTranslatedText( - ctx.guild.id, "warn_title", MEMBER=filterMember(member) - ), + title=await GetTranslatedText(ctx.guild.id, + "warn_title", + MEMBER=filterMember(member)), description=descr, ) embed.set_footer( - text=await GetTranslatedText( - ctx.guild.id, "footer_executed_by", USERNAME=filterMember(ctx.author) - ), + text=await GetTranslatedText(ctx.guild.id, + "footer_executed_by", + USERNAME=filterMember(ctx.author)), icon_url=hammericon, ) embed.set_thumbnail(url=member.display_avatar) @@ -948,11 +948,10 @@ async def warn(ctx, member: discord.Member, reason=None, softwarn: bool = False) @bot.slash_command( guild_only=True, name="softwarn", - description="Sets a silent warning for a user, at 3 warns/strikes they get kicked", -) -@discord.default_permissions( - administrator=True, + description= + "Sets a silent warning for a user, at 3 warns/strikes they get kicked", ) +@discord.default_permissions(administrator=True, ) async def softwarn(ctx, member: discord.Member, reason=None): await SendMetric("softwarn") await warn(ctx, member, reason, True) @@ -963,9 +962,7 @@ async def softwarn(ctx, member: discord.Member, reason=None): name="seewarns", description="Displays the warn history of a user in the guild", ) -@discord.default_permissions( - administrator=True, -) +@discord.default_permissions(administrator=True, ) async def seewarns(ctx, member: discord.Member): await SendMetric("seewarns") allwarns = await getAllWarns(member.id, ctx.guild.id) @@ -979,106 +976,106 @@ async def seewarns(ctx, member: discord.Member): for warn in await GetWarnings(member.id, ctx.guild.id, fullData=True): _, _, _, _, timestamp = warn c = c + 1 - data.append( - { - "t": str( - datetime.datetime.fromtimestamp( - int(str(timestamp)[: str(timestamp).find(".")]) - ) - ), - "y": c, - } - ) - - uurl = GenerateChart( - [ - { - "fill": False, - "label": [ - await GetTranslatedText( - ctx.guild.id, - "seewarns_chart_title", - MEMBER=filterMember(member), - ) - ], - "lineTension": 0, - "backgroundColor": "#7289DA", - "borderColor": "#7289DA", - "data": data, - } - ] - ) + data.append({ + "t": + str( + datetime.datetime.fromtimestamp( + int(str(timestamp)[:str(timestamp).find(".")]))), + "y": + c, + }) + + uurl = GenerateChart([{ + "fill": + False, + "label": [ + await GetTranslatedText( + ctx.guild.id, + "seewarns_chart_title", + MEMBER=filterMember(member), + ) + ], + "lineTension": + 0, + "backgroundColor": + "#7289DA", + "borderColor": + "#7289DA", + "data": + data, + }]) embed = Embed( - title=await GetTranslatedText( - ctx.guild.id, "seewarns_title", MEMBER=filterMember(member) - ), + title=await GetTranslatedText(ctx.guild.id, + "seewarns_title", + MEMBER=filterMember(member)), description=message, ) final_url = uurl if len(uurl) < 2048 else ShortenLink(uurl) embed.set_image(url=final_url) embed.set_footer( - text=await GetTranslatedText( - ctx.guild.id, "footer_executed_by", USERNAME=filterMember(ctx.author) - ), + text=await GetTranslatedText(ctx.guild.id, + "footer_executed_by", + USERNAME=filterMember(ctx.author)), icon_url=hammericon, ) return await ctx.respond(embed=embed) -@bot.slash_command( - guild_only=True, name="unwarn", description="Removes a strike from a user" -) -@discord.default_permissions( - kick_members=True, -) +@bot.slash_command(guild_only=True, + name="unwarn", + description="Removes a strike from a user") +@discord.default_permissions(kick_members=True, ) async def unwarn(ctx, member: discord.Member, id: int = None, *, reason=None): await SendMetric("unwarn") if await GetWarnings(member.id, ctx.guild.id) == 0: - return await ctx.respond( - await GetTranslatedText(ctx.guild.id, "unwarn_no_warns") - ) + return await ctx.respond(await + GetTranslatedText(ctx.guild.id, + "unwarn_no_warns")) if id == None: - descriptionMsg = await GetTranslatedText(ctx.guild.id, "unwarn_description_msg") + descriptionMsg = await GetTranslatedText(ctx.guild.id, + "unwarn_description_msg") embed = Embed( - title=await GetTranslatedText(ctx.guild.id, "unwarn_wrong_selection"), + title=await GetTranslatedText(ctx.guild.id, + "unwarn_wrong_selection"), description=descriptionMsg, ) allwarns = await getAllWarns(member.id, ctx.guild.id) embed.add_field( - name=await GetTranslatedText( - ctx.guild.id, "seewarns_title", MEMBER=filterMember(member) - ), + name=await GetTranslatedText(ctx.guild.id, + "seewarns_title", + MEMBER=filterMember(member)), value="\n".join(allwarns), ) return await ctx.respond(embed=embed) if reason == None: - reason = await GetTranslatedText(ctx.guild.id, "unpunishment_default_reason") - message = await GetTranslatedText(ctx.guild.id, "unwarn_msg", REASON=reason) - - descr = await GetTranslatedText( - ctx.guild.id, "unwarn_description", MEMBER=filterMember(member), REASON=reason - ) + reason = await GetTranslatedText(ctx.guild.id, + "unpunishment_default_reason") + message = await GetTranslatedText(ctx.guild.id, + "unwarn_msg", + REASON=reason) + + descr = await GetTranslatedText(ctx.guild.id, + "unwarn_description", + MEMBER=filterMember(member), + REASON=reason) embed = Embed( - title=await GetTranslatedText( - ctx.guild.id, "unwarn_title", MEMBER=filterMember(member) - ), + title=await GetTranslatedText(ctx.guild.id, + "unwarn_title", + MEMBER=filterMember(member)), description=descr, ) embed.set_footer( - text=await GetTranslatedText( - ctx.guild.id, "footer_executed_by", USERNAME=filterMember(ctx.author) - ), + text=await GetTranslatedText(ctx.guild.id, + "footer_executed_by", + USERNAME=filterMember(ctx.author)), icon_url=hammericon, ) embed.set_thumbnail(url=member.display_avatar) warn = await Removewarn(member.id, ctx.guild.id, id) - s = ( - await GetTranslatedText(ctx.guild.id, "plural_warn") - if warn != 1 - else await GetTranslatedText(ctx.guild.id, "singular_warn") - ) + s = (await GetTranslatedText(ctx.guild.id, "plural_warn") if warn != 1 else + await GetTranslatedText(ctx.guild.id, "singular_warn")) congrats = "Yey! :tada:" if warn == 0 else "" embed.add_field( name=await GetTranslatedText(ctx.guild.id, "automod_count_title"), @@ -1096,17 +1093,18 @@ async def unwarn(ctx, member: discord.Member, id: int = None, *, reason=None): await SendMessageTo(ctx, member, message) -@bot.slash_command( - guild_only=True, name="clearwarns", description="Removes all strikes from a user" -) -@discord.default_permissions( - kick_members=True, -) +@bot.slash_command(guild_only=True, + name="clearwarns", + description="Removes all strikes from a user") +@discord.default_permissions(kick_members=True, ) async def clearwarns(ctx, member: discord.Member, *, reason=None): await SendMetric("clearwarns") if reason == None: - reason = await GetTranslatedText(ctx.guild.id, "unpunishment_default_reason") - message = await GetTranslatedText(ctx.guild.id, "clearwarns_msg", REASON=reason) + reason = await GetTranslatedText(ctx.guild.id, + "unpunishment_default_reason") + message = await GetTranslatedText(ctx.guild.id, + "clearwarns_msg", + REASON=reason) descr = await GetTranslatedText( ctx.guild.id, @@ -1115,15 +1113,15 @@ async def clearwarns(ctx, member: discord.Member, *, reason=None): REASON=reason, ) embed = Embed( - title=await GetTranslatedText( - ctx.guild.id, "clearwarns_title", MEMBER=filterMember(member) - ), + title=await GetTranslatedText(ctx.guild.id, + "clearwarns_title", + MEMBER=filterMember(member)), description=descr, ) embed.set_footer( - text=await GetTranslatedText( - ctx.guild.id, "footer_executed_by", USERNAME=filterMember(ctx.author) - ), + text=await GetTranslatedText(ctx.guild.id, + "footer_executed_by", + USERNAME=filterMember(ctx.author)), icon_url=hammericon, ) embed.set_thumbnail(url=member.display_avatar) @@ -1149,9 +1147,7 @@ async def clearwarns(ctx, member: discord.Member, *, reason=None): name="automod", description="Customizes in this guild Hammer's automod", ) -@discord.default_permissions( - administrator=True, -) +@discord.default_permissions(administrator=True, ) @option( "action", description="Select add/remove word from swear list", @@ -1165,9 +1161,8 @@ async def automod(ctx, action: str, word: str): response = await AddDeniedWord(ctx.guild.id, ctx.author.id, word) else: return await ctx.respond( - embed=ErrorEmbed( - await GetTranslatedText(ctx.guild.id, "error_automod_syntax") - ), + embed=ErrorEmbed(await GetTranslatedText(ctx.guild.id, + "error_automod_syntax")), ephemeral=True, ) if response: @@ -1184,9 +1179,9 @@ async def automod(ctx, action: str, word: str): ) else: return await ctx.respond( - embed=ErrorEmbed( - await GetTranslatedText(ctx.guild.id, "error_automod", WORD=word) - ), + embed=ErrorEmbed(await GetTranslatedText(ctx.guild.id, + "error_automod", + WORD=word)), ephemeral=True, ) @@ -1277,35 +1272,30 @@ async def restart(ctx): @bot.slash_command( guild_only=True, name="setdelay", - description="Updates the message delay in a channel with a set of custom time interval", -) -@discord.default_permissions( - manage_messages=True, + description= + "Updates the message delay in a channel with a set of custom time interval", ) +@discord.default_permissions(manage_messages=True, ) async def setdelay(ctx, seconds: float, reason: str = ""): await SendMetric("setdelay") - m = ( - await GetTranslatedText(ctx.guild.id, "modified") - if seconds > 0.0 - else await GetTranslatedText(ctx.guild.id, "removed") - ) - reason = ( - ((await GetTranslatedText(ctx.guild.id, "for")) + reason) - if reason != "" and reason != None - else "" - ) + m = (await GetTranslatedText(ctx.guild.id, "modified") if seconds > 0.0 + else await GetTranslatedText(ctx.guild.id, "removed")) + reason = (((await GetTranslatedText(ctx.guild.id, "for")) + + reason) if reason != "" and reason != None else "") embed = Embed( - title=await GetTranslatedText( - ctx.guild.id, "setdelay_title", M=m, CHANNEL=ctx.channel - ), - description=await GetTranslatedText( - ctx.guild.id, "setdelay_description", SECONDS=seconds, REASON=reason - ), + title=await GetTranslatedText(ctx.guild.id, + "setdelay_title", + M=m, + CHANNEL=ctx.channel), + description=await GetTranslatedText(ctx.guild.id, + "setdelay_description", + SECONDS=seconds, + REASON=reason), ) embed.set_footer( - text=await GetTranslatedText( - ctx.guild.id, "footer_executed_by", USERNAME=filterMember(ctx.author) - ), + text=await GetTranslatedText(ctx.guild.id, + "footer_executed_by", + USERNAME=filterMember(ctx.author)), icon_url=hammericon, ) @@ -1319,9 +1309,7 @@ async def setdelay(ctx, seconds: float, reason: str = ""): name="mute", description="Removes the hability to talk or join voice channels to a user", ) -@discord.default_permissions( - manage_messages=True, -) +@discord.default_permissions(manage_messages=True, ) async def mute(ctx, member: discord.Member, *, reason=None): await SendMetric("mute") guild = ctx.guild @@ -1340,15 +1328,17 @@ async def mute(ctx, member: discord.Member, *, reason=None): ) if reason == None: - reason = await GetTranslatedText(ctx.guild.id, "punishment_default_reason") + reason = await GetTranslatedText(ctx.guild.id, + "punishment_default_reason") embed = discord.Embed( - title=await GetTranslatedText( - ctx.guild.id, "mute_title", MEMBER=filterMember(member) - ), - description=await GetTranslatedText( - ctx.guild.id, "mute_description", MENTION=member.mention, REASON=reason - ), + title=await GetTranslatedText(ctx.guild.id, + "mute_title", + MEMBER=filterMember(member)), + description=await GetTranslatedText(ctx.guild.id, + "mute_description", + MENTION=member.mention, + REASON=reason), colour=discord.Colour.red(), ) await ctx.respond(embed=embed) @@ -1357,9 +1347,10 @@ async def mute(ctx, member: discord.Member, *, reason=None): SendMessageTo( ctx, member, - await GetTranslatedText( - ctx.guild.id, "mute_msg", GUILD=ctx.guild.name, REASON=reason - ), + await GetTranslatedText(ctx.guild.id, + "mute_msg", + GUILD=ctx.guild.name, + REASON=reason), ) @@ -1367,11 +1358,10 @@ async def mute(ctx, member: discord.Member, *, reason=None): @bot.slash_command( guild_only=True, name="unmute", - description="Restores the hability to talk or join voice channels to a user", -) -@discord.default_permissions( - manage_messages=True, + description= + "Restores the hability to talk or join voice channels to a user", ) +@discord.default_permissions(manage_messages=True, ) async def unmute(ctx, member: discord.Member, *, reason=None): await SendMetric("unmute") mutedRole = discord.utils.get(ctx.guild.roles, name="Muted") @@ -1383,17 +1373,19 @@ async def unmute(ctx, member: discord.Member, *, reason=None): SendMessageTo( ctx, member, - await GetTranslatedText( - ctx.guild.id, "unmute_msg", GUILD=ctx.guild.name, REASON=reason - ), + await GetTranslatedText(ctx.guild.id, + "unmute_msg", + GUILD=ctx.guild.name, + REASON=reason), ) embed = discord.Embed( - title=await GetTranslatedText( - ctx.guild.id, "unmute_title", MEMBER=filterMember(member) - ), - description=await GetTranslatedText( - ctx.guild.id, "unmute_description", MENTION=member.mention, REASON=reason - ), + title=await GetTranslatedText(ctx.guild.id, + "unmute_title", + MEMBER=filterMember(member)), + description=await GetTranslatedText(ctx.guild.id, + "unmute_description", + MENTION=member.mention, + REASON=reason), colour=discord.Colour.light_gray(), ) await ctx.respond(embed=embed) @@ -1413,15 +1405,17 @@ async def lock(ctx, channel: discord.TextChannel = None, reason=None): overwrite.send_messages = False await channel.set_permissions(ctx.guild.default_role, overwrite=overwrite) embed = Embed( - title=await GetTranslatedText(ctx.guild.id, "lock_title", CHANNEL=ctx.channel), - description=await GetTranslatedText( - ctx.guild.id, "lock_description", REASON=reason - ), + title=await GetTranslatedText(ctx.guild.id, + "lock_title", + CHANNEL=ctx.channel), + description=await GetTranslatedText(ctx.guild.id, + "lock_description", + REASON=reason), ) embed.set_footer( - text=await GetTranslatedText( - ctx.guild.id, "footer_executed_by", USERNAME=filterMember(ctx.author) - ), + text=await GetTranslatedText(ctx.guild.id, + "footer_executed_by", + USERNAME=filterMember(ctx.author)), icon_url=hammericon, ) await ctx.respond(embed=embed) @@ -1431,7 +1425,8 @@ async def lock(ctx, channel: discord.TextChannel = None, reason=None): @bot.slash_command( guild_only=True, name="unlock", - description="Removes the blocking in a channel from not being used as a chat.", + description= + "Removes the blocking in a channel from not being used as a chat.", ) async def unlock(ctx, channel: discord.TextChannel = None, reason=None): await SendMetric("unlock") @@ -1441,17 +1436,17 @@ async def unlock(ctx, channel: discord.TextChannel = None, reason=None): overwrite.send_messages = True await channel.set_permissions(ctx.guild.default_role, overwrite=overwrite) embed = Embed( - title=await GetTranslatedText( - ctx.guild.id, "unlock_title", CHANNEL=ctx.channel - ), - description=await GetTranslatedText( - ctx.guild.id, "unlock_description", REASON=reason - ), + title=await GetTranslatedText(ctx.guild.id, + "unlock_title", + CHANNEL=ctx.channel), + description=await GetTranslatedText(ctx.guild.id, + "unlock_description", + REASON=reason), ) embed.set_footer( - text=await GetTranslatedText( - ctx.guild.id, "footer_executed_by", USERNAME=filterMember(ctx.author) - ), + text=await GetTranslatedText(ctx.guild.id, + "footer_executed_by", + USERNAME=filterMember(ctx.author)), icon_url=hammericon, ) await ctx.respond(embed=embed) @@ -1464,13 +1459,14 @@ async def unlock(ctx, channel: discord.TextChannel = None, reason=None): async def suggest(ctx, suggestion: str): await SendMetric("suggest") embed = Embed( - title=f"The user {filterMember(ctx.author)} has posted a suggestion! :hammer_pick:", + title= + f"The user {filterMember(ctx.author)} has posted a suggestion! :hammer_pick:", description=f"{suggestion}", ) embed.set_footer( - text=await GetTranslatedText( - ctx.guild.id, "footer_executed_by", USERNAME=filterMember(ctx.author) - ), + text=await GetTranslatedText(ctx.guild.id, + "footer_executed_by", + USERNAME=filterMember(ctx.author)), icon_url=hammericon, ) suggestionChannel = bot.get_channel(int(DEV_SUGGESTIONS_CHANNEL)) @@ -1489,12 +1485,13 @@ async def invite(ctx): await SendMetric("invite") embed = Embed( title=await GetTranslatedText(ctx.guild.id, "hammer_invite"), - description=f"[**🔗{await GetTranslatedText(ctx.guild.id, 'hammer_link')}**](https://discordapp.com/api/oauth2/authorize?client_id=591633652493058068&permissions=8&scope=bot)", + description= + f"[**🔗{await GetTranslatedText(ctx.guild.id, 'hammer_link')}**](https://discordapp.com/api/oauth2/authorize?client_id=591633652493058068&permissions=8&scope=bot)", ) embed.set_footer( - text=await GetTranslatedText( - ctx.guild.id, "footer_executed_by", USERNAME=filterMember(ctx.author) - ), + text=await GetTranslatedText(ctx.guild.id, + "footer_executed_by", + USERNAME=filterMember(ctx.author)), icon_url=hammericon, ) await ctx.respond(embed=embed) @@ -1504,9 +1501,9 @@ async def invite(ctx): @discord.default_permissions(administrator=True) -@bot.slash_command( - name="settings", description="Modifies some Hammer config values", guild_only=True -) +@bot.slash_command(name="settings", + description="Modifies some Hammer config values", + guild_only=True) @option( "module", description="Pick a module to switch!", @@ -1515,7 +1512,8 @@ async def invite(ctx): @option( "value", description="Select on/off", - autocomplete=discord.utils.basic_autocomplete(["on", "off", "en", "cat", "es"]), + autocomplete=discord.utils.basic_autocomplete( + ["on", "off", "en", "cat", "es"]), ) async def settings(ctx, module: str = None, value: str = None): await SendMetric("settings") @@ -1527,9 +1525,10 @@ async def settings(ctx, module: str = None, value: str = None): await SaveSetting(ctx.guild.id, module, value) action = "enabled" if value else "disabled" await ctx.respond( - await GetTranslatedText( - ctx.guild.id, "settings_module", MODULE=module, ACTION=action - ), + await GetTranslatedText(ctx.guild.id, + "settings_module", + MODULE=module, + ACTION=action), ephemeral=True, ) @@ -1551,7 +1550,8 @@ async def settings(ctx, module: str = None, value: str = None): await GetTranslatedText( ctx.guild.id, "error_settings_syntax", - COMMAND="/settings language " + "/".join(languagesOptions), + COMMAND="/settings language " + + "/".join(languagesOptions), ), ephemeral=True, ) @@ -1579,20 +1579,19 @@ async def settings(ctx, module: str = None, value: str = None): return embed = Embed( title=await GetTranslatedText(ctx.guild.id, "settings_title"), - description=await GetTranslatedText(ctx.guild.id, "settings_description"), + description=await GetTranslatedText(ctx.guild.id, + "settings_description"), ) print("getting settings from discord.Guild.id", ctx.guild.id) automodStatus = await GetSettings(ctx.guild.id, 1) automodStatustr = "**✅ ON**" if automodStatus else "**❌ OFF**" recommendedactivityAutomod = ( - await GetTranslatedText( - ctx.guild.id, "settings_disable_automod", COMMAND_PREFIX=COMMAND_PREFIX - ) - if automodStatus - else await GetTranslatedText( - ctx.guild.id, "settings_enable_automod", COMMAND_PREFIX=COMMAND_PREFIX - ) - ) + await GetTranslatedText(ctx.guild.id, + "settings_disable_automod", + COMMAND_PREFIX=COMMAND_PREFIX) if automodStatus + else await GetTranslatedText(ctx.guild.id, + "settings_enable_automod", + COMMAND_PREFIX=COMMAND_PREFIX)) embed.add_field( name=await GetTranslatedText(ctx.guild.id, "help_automod_title"), value=await GetTranslatedText( @@ -1621,9 +1620,9 @@ async def settings(ctx, module: str = None, value: str = None): inline=False, ) embed.set_footer( - text=await GetTranslatedText( - ctx.guild.id, "footer_executed_by", USERNAME=filterMember(ctx.author) - ), + text=await GetTranslatedText(ctx.guild.id, + "footer_executed_by", + USERNAME=filterMember(ctx.author)), icon_url=hammericon, ) await ctx.respond(embed=embed) @@ -1640,47 +1639,42 @@ async def metrics(ctx): _, commandType, timestamp = metric commandDict[commandType] = commandDict.get(commandType, 0) + 1 provList = finalList.get(commandType, []) - provList.append( - { - "t": str(datetime.datetime.fromtimestamp(int(timestamp))), - "y": commandDict[commandType], - } - ) + provList.append({ + "t": + str(datetime.datetime.fromtimestamp(int(timestamp))), + "y": + commandDict[commandType], + }) finalList[commandType] = provList # prepare datasets final = [] for ( - command, - data, + command, + data, ) in finalList.items(): - final.append( - { - "fill": False, - "label": [command], - "lineTension": 0, - "data": data, - } - ) + final.append({ + "fill": False, + "label": [command], + "lineTension": 0, + "data": data, + }) uurl = GenerateChart(final) embed = Embed( title="Lifetime Metrics (since 25-08-23)", - description="The following command have been used:" - + " ".join( - [ - cmd + ": " + str(times) + " times" - for cmd, times in commandDict.items() - ] - ), + description="The following command have been used:" + " ".join([ + cmd + ": " + str(times) + " times" + for cmd, times in commandDict.items() + ]), ) final_url = uurl if len(uurl) < 2048 else ShortenLink(uurl) embed.set_image(url=final_url) embed.set_footer( - text=await GetTranslatedText( - ctx.guild.id, "footer_executed_by", USERNAME=filterMember(ctx.author) - ), + text=await GetTranslatedText(ctx.guild.id, + "footer_executed_by", + USERNAME=filterMember(ctx.author)), icon_url=hammericon, ) return await ctx.respond(embed=embed)