Ejemplo n.º 1
0
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)
Ejemplo n.º 2
0
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)
Ejemplo n.º 3
0
    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)
Ejemplo n.º 4
0
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)
Ejemplo n.º 5
0
 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)
Ejemplo n.º 6
0
 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)
Ejemplo n.º 7
0
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)
Ejemplo n.º 8
0
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__)))
Ejemplo n.º 9
0
    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)