Beispiel #1
0
 async def email_cmd(self, ctx):
     berlin_tz = tz('Europe/Berlin'
                    )  # <-- change this as well to your timezone if needed!
     idx = 1
     userId = str(123456789)  # <-- change this to your discord-id !
     mails = await self.Mango.fetchNewEMails()
     mails_num = len(mails)
     em = Embed(title="New Mails Summary",
                colour=Colour.blurple(),
                timestamp=dt.now(tz=berlin_tz))
     em.description = f"You have {mails_num} new Mails."
     await ctx.send(f"<@{userId}>")
     await ctx.send(embed=em)
     if mails_num == 0:
         return
     for mail_ in mails:
         mailEmbed = Embed(title=f"Mail {idx} of {mails_num}",
                           colour=Colour.dark_teal(),
                           timestamp=dt.now(tz=berlin_tz))
         mailEmbed.add_field(name='Sender',
                             value=f'{mail_.mail}',
                             inline=False)
         mailEmbed.add_field(name='Subject',
                             value=f'{mail_.subject}',
                             inline=False)
         mailEmbed.add_field(name='Message',
                             value=f'{mail_.message}',
                             inline=False)
         mailEmbed.add_field(name='Date',
                             value=f'{berlin_tz.fromutc(mail_.date)}',
                             inline=False)
         await ctx.send(embed=mailEmbed)
         idx = idx + 1
     await self.run_purger()
     return
Beispiel #2
0
    async def dice(ctx, *, sides):
        """ 
        !dice <n> - rolls an n-sided dice
        """
        if get_value(sides):

            embed = Embed()
            embed.type = "rich"
            embed.color = Colour.dark_teal()
            embed.add_field(name=":game_die::wave: {} rolled and got".format(
                ctx.message.author.display_name),
                            value=get_value(sides))
            await bot.say(None, embed=embed)
Beispiel #3
0
    async def ud(self, ctx, *args, member: discord.Member = None):
        member = member or ctx.author
        url = self.BASE_URL + urllib.parse.urlencode({'term': ' '.join(args)})
        
        request = urllib.request.urlopen(url)
        data = json.load(request)
        data = data['list']
        if len(data) > 0:
            counter = 0
            embed = discord.Embed(description=data[counter]['definition'], colour=Colour.dark_teal())
            embed.set_author(name=data[counter]['word'])
            embed.set_footer(text=f'{counter+1} / {len(data)}')
            sent_msg = await ctx.message.channel.send(embed=embed)
            if len(data) > 1:
                await sent_msg.add_reaction('⬅️')
                await sent_msg.add_reaction('➡️')

                def check(reaction, user):
                    return user == ctx.message.author and reaction.message.id == sent_msg.id and reaction.emoji in ['⬅️', '➡️']
                try:
                    while True:
                        reaction, user = await self.bot.wait_for('reaction_add', timeout=15.0, check=check)
                        if reaction.emoji == '⬅️':
                            if counter-1 >= min(0, len(data)):
                                counter -= 1
                                embed.description = data[counter]['definition']
                                embed.set_footer(text=f'{counter+1} / {len(data)}')
                                await sent_msg.edit(embed=embed)
                                
                        elif reaction.emoji == '➡️':
                            if counter+1 < min(10, len(data)):
                                counter += 1
                                embed.description = data[counter]['definition']
                                embed.set_footer(text=f'{counter+1} / {len(data)}')
                                await sent_msg.edit(embed=embed)
                        for r in reaction.message.reactions:
                            async for usr in r.users():
                                if not usr.bot:
                                    await r.remove(usr)
                except asyncio.TimeoutError:
                    await sent_msg.clear_reaction('⬅️')
                    await sent_msg.clear_reaction('➡️')
        else:
            embed = discord.Embed(description=f"**{member.name}#{member.discriminator}** Couldn't find definition for that term.", colour=Colour.from_rgb(238, 38, 32))
            await ctx.message.channel.send(embed=embed)
Beispiel #4
0
    async def togglerole(self, ctx, keyword=""):
        """
        Toggle some opt-in roles
        """

        user = ctx.message.author
        keyword = keyword.lower()

        try:
            with open("database/roles.json") as f:
                js = load(f)
        except FileNotFoundError:
            js = {}

        try:
            rolename = js[keyword]["role"]
            role = get(ctx.message.guild.roles, name=rolename)
            if role in user.roles:
                await user.remove_roles(role)
                await ctx.send("Left {}".format(rolename))
                return
            await user.add_roles(role)
            await ctx.send("Joined {}".format(rolename))

        except KeyError:
            if keyword == "":
                embed = Embed(title="List of toggleable roles:",
                              colour=Colour.dark_teal())
                embed.description = ""
                for k in js:
                    embed.description += "- {} {}: `{}`\n".format(
                        js[k]["emoji"], js[k]["description"], k)
                await ctx.send("", embed=embed)
                return

            await ctx.send("This role is not in the database!")
Beispiel #5
0
from discord import Colour
from random import seed, randint
from datetime import datetime

seed(datetime.now())

colours = [
    Colour.teal(),
    Colour.dark_teal(),
    Colour.green(),
    Colour.dark_green(),
    Colour.blue(),
    Colour.dark_blue(),
    Colour.purple(),
    Colour.dark_purple(),
    Colour.magenta(),
    Colour.dark_magenta(),
    Colour.gold(),
    Colour.dark_gold(),
    Colour.orange(),
    Colour.dark_orange(),
    Colour.red(),
    Colour.dark_red(),
    Colour.lighter_grey(),
    Colour.light_grey(),
    Colour.dark_grey(),
    Colour.darker_grey(),
    Colour.blurple(),
    Colour.greyple(),
    Colour.from_rgb(randint(0, 255), randint(0, 255), randint(0, 255))
]
Beispiel #6
0
    async def on_message(self, message, **kwargs):
        assert isinstance(message, Message)
        client = self.client

        prefix = kwargs.get("prefix")

        if not is_valid_command(message.content, valid_commands,
                                prefix=prefix):
            return
        else:
            self.stats.add(MESSAGE)

        def startswith(*args):
            for a in args:
                if message.content.startswith(a):
                    return True

            return False

        if startswith(prefix + "osu"):
            username = message.content[len(prefix + "osu "):]

            t_start = time.time()

            user = self.osu.get_user(username)

            if not user:
                await client.send_message(message.channel,
                                          "User does not exist.")
                return

            # About inverting: this inverts the number before and after the splitting
            def prepare(this):
                if not type(this) in (float, int):
                    return None

                return invert_str(",".join(
                    split_every(str(invert_num(this)), 3)))

            global_rank = prepare(user.world_rank)
            country_rank = prepare(user.country_rank)

            total_score = prepare(user.total_score)
            ranked_score = prepare(user.ranked_score)

            try:
                acc = str(round(float(user.accuracy), 2)) + " %"
            except TypeError:
                await client.send_message(message.channel,
                                          ":warning: Something went wrong...")
                return

            pp_amount = str(int(float(user.pp)))

            osu_level = int(float(user.level))
            avatar_url = "http://a.ppy.sh/{}".format(user.id)

            # Color is determined by the level range
            if osu_level < 10:
                color = Colour.darker_grey()
            elif osu_level < 25:
                color = Colour.light_grey()
            elif osu_level < 40:
                color = Colour.dark_teal()
            elif osu_level < 50:
                color = Colour.teal()
            elif osu_level < 75:
                color = Colour.dark_purple()
            elif osu_level < 100:
                color = Colour.purple()
            # Only the masters get the gold ;)
            else:
                color = Colour.gold()

            desc = "**Level**: {}\n**Rank**: \n\t" \
                   "**Global**:            #{}\n\t" \
                   "**Country** (**{}**): #{}\n" \
                   "Total PP: **{}**".format(osu_level, global_rank, user.country, country_rank, pp_amount)

            embed = Embed(url=user.profile_url, description=desc, colour=color)
            embed.set_author(name=user.name)
            embed.set_thumbnail(url=avatar_url)

            embed.add_field(name="Total score", value=total_score)
            embed.add_field(name="Ranked score", value=ranked_score)
            embed.add_field(name="Average accuracy", value=acc)

            delta = int((time.time() - t_start) * 1000)
            embed.set_footer(text="Search took {} ms".format(delta))

            try:
                await client.send_message(message.channel, embed=embed)
            except errors.HTTPException:
                await client.send_message(
                    message.channel,
                    "Something went wrong " + StandardEmoji.THINKING)