Пример #1
0
 def __init__(self, client):
     self.client = client
     self.client_color = Color.red()
     self.color_dict = {
         1: [Color.teal(), 'teal'],
         2: [Color.dark_teal(), 'dark_teal'],
         3: [Color.green(), 'green'],
         4: [Color.dark_green(), 'dark_green'],
         5: [Color.blue(), 'blue'],
         6: [Color.dark_blue(), 'dark_blue'],
         7: [Color.purple(), 'purple'],
         8: [Color.dark_purple(), 'dark_purple'],
         9: [Color.magenta(), 'magenta'],
         10: [Color.dark_magenta(), 'dark_magenta'],
         11: [Color.gold(), 'gold'],
         12: [Color.dark_gold(), 'dark_gold'],
         13: [Color.orange(), 'orange'],
         14: [Color.dark_orange(), 'dark_orange'],
         15: [Color.red(), 'red'],
         16: [Color.dark_red(), 'dark_red'],
         17: [Color.lighter_grey(), 'lighter_grey'],
         18: [Color.dark_grey(), 'grey'],
         19: [Color.light_grey(), 'light_grey'],
         20: [Color.darker_grey(), 'darker_grey']
     }
Пример #2
0
def project_embed(projects: dict, me):
    desc = f"▰▱▰▱▰▱▰▱▰▱▰▱▰▱▰▱▰▱\n\n**Active repositories: **{len(projects)-1}\n"
    embed = simple_embed(title="Tortoise Community",
                         message=desc,
                         color=get_top_role_color(
                             member=me, fallback_color=Color.light_grey()))
    embed.set_author(
        name="Github Stats",
        icon_url=
        "https://github.githubassets.com/images/modules/logos_page/GitHub-Mark.png"
    )
    embed.set_footer(text="Last updated: ")
    embed.timestamp = projects["last_updated"]
    for item in projects:
        if item == "last_updated":
            continue
        project = projects[item]
        embed.add_field(
            name=
            f"\n{constants.embed_space}\n{constants.git_repo_emoji} {project.name}",
            value=f"• [repository]({project.link})\n"
            f"• [web]({project.web_url})\n"
            f"• [issues]({project.link+'/issues'})",
            inline=False)
        embed.add_field(
            name="Commits",
            value=f"{constants.git_commit_emoji} {project.commits}")
        embed.add_field(name="Stars",
                        value=f"{constants.git_start_emoji} {project.stars}")
        embed.add_field(name="Forks",
                        value=f"{constants.git_fork_emoji} {project.forks}")

    return embed
Пример #3
0
    def _create_help_emb(self, name, current):
        emb = Embed()
        emb.title = "Option"
        emb.add_field(name=name, value="Currently: **" + current + "**")
        emb.colour = Color.light_grey()

        return emb
Пример #4
0
 async def stalemate(self, board, ctx):
     embed = Embed(
         title="Stalemate!",
         description=f"```\n{', '.join([str(i) for i in board.move_stack])}```",
         color=Color.light_grey()
     )
     await ctx.send(embed=embed)
Пример #5
0
    async def update(self, *args, **kwargs):
        if self.module.is_first_loop:
            msg = self.module.create_discord_embed(
                subtitle=self.TITLE,
                info='Collecting the latest information...',
                color=Color.light_grey())
            return await self.send(msg)

        game_msg = (self.module.GOOD if self.module.game else
                    self.module.UNREACHABLE).format('game server')
        if not self.module.open:
            acc_msg = self.module.CLOSED
            statuses = [acc_msg]
        else:
            acc_msg = (self.module.GOOD if self.module.account else
                       self.module.UNREACHABLE).format('account server')
            statuses = [game_msg, acc_msg]
        ban_msg = self.module.BANNER.format(
            self.module.banner) if self.module.banner else None
        if ban_msg:
            statuses.append(ban_msg)

        color = Color.green()
        color = Color.blue(
        ) if self.module.banner and self.module.account else color
        color = Color.gold() if (
            not self.module.open
            and not self.module.banner) or not self.module.account else color
        color = Color.red() if not self.module.game else color

        return await self.send(
            self.module.create_discord_embed(subtitle=self.TITLE,
                                             info='\n\n'.join(statuses),
                                             color=color))
Пример #6
0
 def __init__(self, webhook):
     self.webhook = webhook
     self.level_color = {
         "INFO": Color.light_grey(),
         "WARNING": Color.gold(),
         "ERROR": Color.dark_red(),
         "CRITICAL": Color.red(),
         "DEBUG": Color.dark_green(),
         "NOTSET": Color.dark_grey(),
     }
     super(DiscordHandler, self).__init__()
Пример #7
0
def _set_color(card):
    if card == 'Free':
        return Color.light_grey()
    elif card == 'Common':
        return Color.lighter_grey()
    elif card == 'Rare':
        return Color.blue()
    elif card == 'Epic':
        return Color.purple()
    elif card == 'Legendary':
        return Color.orange()
    else:
        return Color.default()
Пример #8
0
 def __init__(self, bot):
     self.bot = bot
     self.bot.get_card = self.get_card  # there has to be a better way to do this
     self.bot.card_get_image = self.card_get_image
     self.bot.card_replace_symbols = self.replace_symbols
     self.bot.magic_dict = {}
     self.bot.card_get_color = self.card_get_color
     self.color_dict = {
         "Red": Color.red(),
         "Blue": Color.blue(),
         "Green": Color.green(),
         "Black": Color(0x000000),
         "White": Color(0xffffff),
         "Gold": Color.gold(),
         "Grey": Color.light_grey()
     }
Пример #9
0
def get_color(rank: str = 'F') -> Color:
    """
    Gives `discord.Color` based on rank achieved in score

    :param rank: Rank achieved on score `str`
    :return: `discord.Color`
    """

    rank = rank.upper()
    if rank in ['SH', 'SSH']:
        return Color.light_grey()
    if rank in ['S', 'SS']:
        return Color.gold()
    if rank == 'A':
        return Color.green()
    if rank == 'B':
        return Color.blue()
    if rank == 'C':
        return Color.purple()
    if rank == 'D':
        return Color.red()

    return Color.darker_gray()
Пример #10
0
def changelog_em() -> Embed:
    return Embed(
        title=':gear: Changelog',
        description='https://github.com/AnonymousX86/poland-bot/blob/master/CHANGELOG.md#changelog',
        color=Color.light_grey()
    )
Пример #11
0
async def ph(ctx, *args):
    if args:
        url = "https://www.pornhub.com/video/search?search=" + "+".join(args)
        await client.say(embed=Embed(description="**[PornHub](%s)**" % url,
                                     color=Color.light_grey()))
    await client.delete_message(ctx.message)
Пример #12
0
    async def update(self, *args, **kwargs):
        if self.module.is_first_loop:
            msg = self.module.create_discord_embed(title=self.TITLE, info='Collecting the latest information...', color=Color.light_grey())
            return await self.send(msg)

        megainvs = []
        invs = []
        for inv in self.module.invasions:
            if inv.mega_invasion:
                megainvs.append(inv)
            else:
                invs.append(inv)
        megainvs = sorted(megainvs, key=lambda k: -k.start_time)
        invs = sorted(invs, key=lambda k: (-k.etr if k.etr != -1 else (k.defeated/k.total)))

        invs = megainvs + invs

        if time.time() >= (assert_type(self.module.last_updated, int, otherwise=0) + 300):
            desc = 'We\'re experiencing some technical difficulties.\nInvasion tracking will be made reavailable as soon as possible.'
            msg = self.module.create_discord_embed(title=self.TITLE, info=desc, color=Color.light_grey())
            msg.set_footer(text='We apologize for the inconvenience.')
        elif len(invs) > 0:
            cogs = []
            districts = []
            etrs = []
            progress = []
            for inv in invs:
                if inv.etr != -1:
                    etr = get_time_from_seconds(inv.etr)
                    etr = 'A few seconds' if inv.etr < 0 else etr
                    etr = 'Calculating...' if time.time() - inv.start_time < 60 else etr
                    etr = 'Mega Invasion!' if inv.mega_invasion else etr
                    etrs.append(etr)
                else:
                    p = int((inv.defeated/inv.total) * 10)
                    # Pray this never has to be debugged.
                    progress.append('[{}{}]'.format('■' * p, ('  '*(10-p))+(' '*ceil((10-p)/2))))
                cogs.append(inv.cog.plural())
                districts.append(inv.district)
            fields = [
                {'name': 'Cog', 'value': '\n'.join(cogs)},
                {'name': 'District', 'value': '\n'.join(districts)},
                {'name': 'Time Remaining', 'value': '\n'.join(etrs)} if etrs else {'name': 'Progress', 'value': '\n'.join(progress)}
            ]
            msg = self.module.create_discord_embed(title=self.TITLE, title_url=self.module.route[1], color=Color.light_grey(), fields=fields)
        else:
            desc = 'No invasions to report.\nThe last invasion seen was __{} ago__.'.format(
                get_time_from_seconds(int(time.time()) - self.module.drought_start))
            msg = self.module.create_discord_embed(title=self.TITLE, info=desc, color=Color.light_grey())
        return await self.send(msg)
Пример #13
0
import asyncio
import datetime
import typing
import pytz

import discord
from discord import Color

from cogs.misc import LikeUser, FakeMember

colours = {
    'unban': Color.green(),
    'unmute': Color.dark_green(),
    'note': Color.light_grey(),
    'warn': Color.orange(),
    'mute': Color.dark_purple(),
    'kick': Color.dark_orange(),
    'softban': Color.red(),
    'ban': Color.dark_red()
}


async def ban(victim: discord.Member, reason: str = None):
    await victim.guild.ban(victim, reason=reason)


async def softban(victim: discord.Member, reason: str = None):
    await victim.guild.ban(victim, reason=reason)
    await victim.guild.unban(victim, reason=reason)

Пример #14
0
    async def fetch_track(self):
        """Task for fetching warzone matches of tracked users."""
        logging.info("Starting warzone tracking...")
        tracked = session.query(wz_model).filter_by(track=True).all()

        if not len(tracked):
            return

        embed_color = [
            Color.gold(),
            Color.light_grey(),
            Color.dark_orange(),
            Color.dark_red()
        ]

        matches = dict()

        async with aiohttp.ClientSession() as aiosession:
            try:
                await aiosession.get("https://profile.callofduty.com/cod/login"
                                     )

                cookies = aiosession.cookie_jar.filter_cookies(
                    "https://callofduty.com")

                params = {
                    "username": getenv("COD_USERNAME"),
                    "password": getenv("COD_PASSWORD"),
                    "remember_me": "true",
                    "_csrf": cookies["XSRF-TOKEN"].value,
                }

                await aiosession.post(
                    "https://profile.callofduty.com/do_login?new_SiteId=cod",
                    params=params,
                    allow_redirects=False)

            except Exception as e:
                logging.error("Could not acquire session for warzone tracking")
                return

            for t in tracked:
                try:
                    battletag = requests.utils.quote(t.battletag)

                    url = f"https://my.callofduty.com/api/papi-client/crm/cod/v2/title/mw/platform/battle/gamer/{battletag}/matches/wz/start/0/end/0/details?limit=1"

                    async with aiosession.get(url) as resp:
                        response = await resp.json()

                    player_match = response["data"]["matches"][0]
                    player_match["channel_id"] = t.channel_id

                    now = int(datetime.utcnow().strftime("%s"))

                    if t.last_match == player_match[
                            "matchID"] or now - player_match[
                                "utcEndSeconds"] > 30 * 60:
                        continue

                    matches.setdefault(player_match["matchID"],
                                       dict()).setdefault(
                                           player_match["player"]["team"],
                                           list()).append(player_match)

                    t.last_match = player_match["matchID"]

                except Exception as e:
                    logging.error(
                        f"Could not retrieve warzone history for {t.battletag}",
                        exc_info=e)

        for match in matches.values():
            for team in match.values():
                p0 = team[0]

                channel = self.bot.get_channel(p0["channel_id"])

                ordinal = lambda n: f'{n}{"tsnrhtdd"[(n//10%10!=1)*(n%10<4)*n%10::4]}'

                placement = int(p0["playerStats"]["teamPlacement"])
                placement_color = placement - 1 if placement < 4 else -1

                embed = Embed(
                    title=
                    f"{p0['player']['username']}'s team finished in __{ordinal(placement)}__ against {p0['teamCount']} teams.",
                    color=embed_color[placement_color],
                    timestamp=datetime.fromtimestamp(p0["utcStartSeconds"]),
                )

                embed.add_field(
                    name="Match duration",
                    value=f"{int(p0['duration'] // 60000)} minutes",
                    inline=True)
                embed.add_field(
                    name="Team survived",
                    value=
                    f"{int(p0['playerStats']['teamSurvivalTime']) // 60000} minutes",
                    inline=True,
                )
                embed.add_field(name=chr(173), value=chr(173),
                                inline=True)  # field skip

                for player in team:
                    stats = f"""**KDA:** {round(player["playerStats"]["kdRatio"], 2)}
                    **Kills:** {int(player["playerStats"]["kills"])} **Deaths:** {int(player["playerStats"]["deaths"])}
                    **Damage:** {int(player["playerStats"]["damageDone"])}
                    """
                    embed.add_field(name=player["player"]["username"],
                                    value=inspect.cleandoc(stats),
                                    inline=True)

                await channel.send(embed=embed)
        session.commit()
        logging.info("Warzone tracking finished.")