async def info(ctx): guildlang = "en" guildsettings = await returncfg.fetchguildconfig(ctx.guild.id) try: guildlang = guildsettings["lang"] except: pass embedinfo = discord.Embed(title="Kanelbulle Info", description="Some very neat info!", color=0xeee657) author_string = translate.translate(lang=guildlang, string="author") embedinfo.add_field(name=author_string, value="@tristanfarkas#0001") repo_string = translate.translate(lang=guildlang, string="repo") embedinfo.add_field(name=repo_string, value="https://github.com/trilleplay/kanelbulle/") guildcount_string = translate.translate(lang=guildlang, string="guild_count") embedinfo.add_field(name=guildcount_string, value=f"{len(bot.guilds)}") invite_string = translate.translate(lang=guildlang, string="invite") embedinfo.add_field( name=invite_string, value= "https://discordapp.com/oauth2/authorize?client_id=483286872748064774&permissions=268823767&scope=bot" ) embedinfo.set_image( url="https://trilleplay.github.io/kanelbulle/Kanelbulle%20Full_Logo.png" ) await ctx.send(embed=embedinfo)
async def info(ctx): guildlang = "en" guildsettings = await returncfg.fetchguildconfig(ctx.guild.id) try: guildlang = guildsettings["lang"] except: pass embedinfo = discord.Embed(title="Kanelbulle Info", description="Some very neat info!", color=0xeee657) author_string = translate.translate(lang=guildlang, string="author") embedinfo.add_field(name=author_string, value="@tristanfarkas#0001") repo_string = translate.translate(lang=guildlang, string="repo") embedinfo.add_field(name=repo_string, value="https://github.com/trilleplay/kanelbulle/") guildcount_string = translate.translate(lang=guildlang, string="guild_count") embedinfo.add_field(name=guildcount_string, value=f"{len(bot.guilds)}") invite_string = translate.translate(lang=guildlang, string="invite") embedinfo.add_field( name=invite_string, value= "Right now Kanelbulle is private due to resource limitations. If you would like to apply/request access, you may do so over at my discord server: https://discord.gg/FBMrcYM in the #invite-kanelbulle channel. " ) embedinfo.set_image( url="https://trilleplay.github.io/kanelbulle/Kanelbulle%20Full_Logo.png" ) await ctx.send(embed=embedinfo)
async def hug(self, ctx, tohug=None, *, message=None): guildlang = "en" guildsettings = await returncfg.fetchguildconfig(ctx.guild.id) try: guildlang = guildsettings["lang"] except: pass if not isinstance(ctx.channel, discord.DMChannel): if tohug is not None: try: member = await commands.MemberConverter().convert( ctx=ctx, argument=tohug) except: await ctx.send( f"You try hugging ``{tohug}`` but I can't find them. *smh*\nAre you sure you typed it correctly? Or is ``{tohug}`` hiding from you?" ) else: if member.bot: if member == self.bot.user: await ctx.send( f"You want to hug me? Thanks friend! <:meowheart:351097460589854720>" ) if message: await ctx.send( f'{member.mention} was successfully hugged! "{escape_markdown(text=escape_mentions(message))}"' ) else: await ctx.send( f'{member.mention} was successfully hugged!') else: returntousr = translate.translate(lang=guildlang, string="hug_no_arguments", tohug=tohug) await ctx.send(returntousr) else: if tohug is not None: returntousr = translate.translate(lang=guildlang, string="hug_no_DMs", tohug=tohug) await ctx.send(returntousr) else: returntousr = translate.translate( lang=guildlang, string="hug_serveral_args_invalid_dms", tohug=tohug) await ctx.send(returntousr)
async def ping(ctx): guildlang = "en" guildsettings = await returncfg.fetchguildconfig(ctx.guild.id) try: guildlang = guildsettings["lang"] except: pass ping_description = translate.translate(lang=guildlang, string="ping_desc") latency = bot.latency * 1000 embedping = discord.Embed(title="Ping!", description=ping_description, color=0xedab49) embedping.add_field(name="🏓 Latency", value=(latency), inline=False) await ctx.send(embed=embedping)
async def kickusr(self, ctx, member: discord.Member, *, reason: str = "No reason provided"): guildlang = "en" guildsettings = await returncfg.fetchguildconfig(ctx.guild.id) try: guildlang = guildsettings["lang"] except: pass await ctx.message.guild.kick( member, reason=f"{ctx.author} (Softban) - {reason}") returntousr = translate.translate(lang=guildlang, string="kick", user=user) await ctx.send(returntousr)
async def kickusr(self, ctx, member: discord.Member, *, reason: str = "No reason provided"): guildlang = "en" guildsettings = await returncfg.fetchguildconfig(ctx.guild.id) try: guildlang = guildsettings["lang"] except: pass await ctx.message.guild.kick( member, reason=f"{ctx.author} (Softban) - {reason}") clean_user = escape_markdown( text=escape_mentions(f"{member.name}#{member.discriminator}")) returntousr = translate.translate(lang=guildlang, string="kick", user=clean_user) await ctx.send(returntousr)
async def help(ctx): guildlang = "en" guildsettings = await returncfg.fetchguildconfig(ctx.guild.id) try: guildlang = guildsettings["lang"] except: pass madewith_string = translate.translate(lang=guildlang, string="helpc_headerdesc") embed = discord.Embed(title="Kanelbulle Docs", description=madewith_string, color=0xedab49) embed.add_field( name="Docs", value= "The docs for Kanelbulle commands is available at: https://docs.kanelbulle.party/", inline=False) await ctx.send(embed=embed)
async def on_command_error(ctx: commands.Context, error): guildlang = "en" guildsettings = await returncfg.fetchguildconfig(ctx.guild.id) try: guildlang = guildsettings["lang"] except: pass if isinstance(error, commands.NoPrivateMessage): error_string = translate.translate(lang=guildlang, string="fail_noprivatemessage") await ctx.send(error_string) statsd.increment('bot.errorNoPrivateMessage') elif isinstance(error, commands.BotMissingPermissions): error_string = translate.translate(lang=guildlang, string="fail_MissingPermissions", ctx=ctx) await ctx.send( f"Welp, this is awkward.\nI do not have enough permissions to run {ctx.command}!```error```" ) statsd.increment('bot.errorBotMissingPermissions') elif isinstance(error, commands.DisabledCommand): error_string = translate.translate(lang=guildlang, string="fail_DisabledCommand") await ctx.send(error_string) statsd.increment('bot.errorDisabledCommand') elif isinstance(error, commands.CheckFailure): error_string = translate.translate(lang=guildlang, string="fail_CheckFailure") await ctx.send(error_string) statsd.increment('bot.errorCheckFailure') elif isinstance(error, commands.CommandOnCooldown): error_string = translate.translate(lang=guildlang, string="fail_CommandOnCooldown", error=error) await ctx.send(error_string) statsd.increment('bot.errorCommandOnCooldown') elif isinstance(error, commands.MissingRequiredArgument): error_string = translate.translate( lang=guildlang, string="fail_MissingRequiredArgument", error=error, ctx=ctx) await ctx.send(error_string) statsd.increment('bot.errorCommandOnCooldown') elif isinstance(error, commands.BadArgument): error_string = translate.translate(lang=guildlang, string="fail_BadArgument", error=error, ctx=ctx) await ctx.send(error_string) statsd.increment('bot.errorBadArgument') elif isinstance(error, commands.CommandNotFound): return else: await ctx.send( f":rotating_light: Uh-Oh! An error just ocurred! The devs are already on it. Sorry my fren! :rotating_light:" ) if isinstance(ctx.channel, discord.DMChannel): used_in = f"DM {ctx.channel.id}" else: used_in = f"{ctx.channel.name}({ctx.channel.id}), guild {ctx.guild.name}({ctx.guild.id})" traceback_embed = discord.Embed( title="Traceback", description="```" + "".join(traceback.format_tb(error.__traceback__)) + "```", timestamp=ctx.message.created_at) await log_channel.send(f""" ***ERROR ALERT, <@&{returnconfig['dev_role']}>s!*** An error ocurred during the execution of a command: `{error}` Command: `{ctx.invoked_with}` Command arguments: `{ctx.args} - {ctx.kwargs}` (Could be wrong, please refer to `Message contents`) Command used by: {ctx.author.mention} `{ctx.author.name}#{ctx.author.discriminator} {ctx.author.id}` Command used in: `{used_in}` Message id: `{ctx.message.id}` Message link: {ctx.message.jump_url} Message timestamp (UTC): `{ctx.message.created_at}` Message contents: `{ctx.message.content}`""", embed=traceback_embed) print("".join(traceback.format_tb(error.__traceback__)))
async def search_wiki(self, ctx, *, tosearch: str): guildlang = "en" guildsettings = await returncfg.fetchguildconfig(ctx.guild.id) try: guildlang = guildsettings["lang"] except: pass await ctx.trigger_typing() numbers_stringed = { "one": 1, "two": 2, "three": 3, "four": 4, "five": 5 } async def genlist(results, type, pagename=None): result_list = "" for timeslooped, item in enumerate(results): result_list += f"{timeslooped+1} - {item}\n" if type == 1: await ctx.send( f"This page is a disambiguation.\n{pagename} may refer to:\n\n```{result_list}```" ) else: await ctx.send( f"Say the number of a result of the above\n\n```{result_list}```" ) def check(m): return m.author == ctx.author msg = await self.bot.wait_for("message", check=check, timeout=60) lowered = msg.content.lower() if msg is None: await ctx.send("Timeout reached, aborting...") else: try: integered = int(msg.content) try: if results[integered - 1] and integered > 0: await genwiki(results[integered - 1], ctx) else: await ctx.send( "That result isn't in the list, aborting...") print("Was 1") except UnboundLocalError as error: pass except: await ctx.send( "That result isn't in the list, aborting...") except: try: if results[numbers_stringed[msg.content] - 1]: await genwiki( results[numbers_stringed[msg.content] - 1], ctx) except: await ctx.send( "That result isn't in the list, aborting...\nYou must provide a number." ) async def genwiki(pagename, ctx): await ctx.trigger_typing() try: page = wikipedia.page(pagename) except wikipedia.exceptions.DisambiguationError as error: await genlist(error.options[:5], 1, pagename) return except wikipedia.exceptions.PageError: linkname = pagename.replace(" ", "_") await ctx.send( f"That page doesn't exist.\nYou are referencing a page that is referenced in the wiki, but Wikipedia is returning a 404 error (Page doesn't exist).\n\nYou could, anyway, create one: https://en.wikipedia.org/wiki/{linkname}" ) except wikipedia.exceptions.HTTPTimeoutError: await ctx.send( "Wikipedia took too long to respond.\nWikipedia could be experiencing connectivity issues." ) if len(page.summary) > 300: summary = page.summary[:300] + "..." else: summary = page.summary linkname = pagename.replace(" ", "_") wikiembed = discord.Embed( title=f'{pagename} - Wikipedia', description= f"{summary}\n\n[Read more](https://en.wikipedia.org/wiki/{linkname})", colour=0x98FB98) wikiembed.set_thumbnail(url=page.images[0]) await ctx.send(embed=wikiembed) results = wikipedia.search(tosearch, 5) if results: if len(results) == 1 or tosearch.lower() == results[0].lower(): await genwiki(results[0], ctx) else: await genlist(results, 2) else: returntousr = translate.translate(lang=guildlang, string="wikipedia_no_page_found", tosearch=tosearch) await ctx.send(returntousr)