Exemple #1
0
async def embd(ctx, *args):
    colors = {
        "red": Color.red(),
        "green": Color.green(),
        "gold": Color.gold(),
        "orange": Color.orange(),
        "blue": Color.blue(),
        "purple": Color.purple(),
        "teal": Color.teal(),
        "magenta": Color.magenta(),
        "grey": Color.lighter_grey()
    }
    if args:
        argstr = " ".join(args)
        if "-c " in argstr:
            text = argstr.split("-c ")[0]
            color_str = argstr.split("-c ")[1]
            color = colors[
                color_str] if color_str in colors else Color.default()
        else:
            text = argstr
            color = Color.default()

            await client.say(embed=Embed(color=color, description=text))
            await client.delete_message(ctx.message)
Exemple #2
0
    def turn_summary(self):
        '''
        Generates an embed summarizing the turn
        '''
        turn_embed = Embed(
            title="Turn Summary",
            color=Color.teal(),
            timestamp=datetime.utcnow(),
        )

        # Summarize the actions, challenges, and responses of the game
        if self._action is not None:
            turn_embed.add_field(name="Action",
                                 value=self._action.complete_message(),
                                 inline=False)
        if self._challenge1 is not None:
            turn_embed.add_field(name="Challenge 1",
                                 value=self._challenge1.complete_message(),
                                 inline=False)
        if self._response is not None:
            turn_embed.add_field(name="Response",
                                 value=self._response.complete_message(),
                                 inline=False)
        if self._challenge2 is not None:
            turn_embed.add_field(name="Challenge 2",
                                 value=self._challenge2.complete_message(),
                                 inline=False)

        if len(self._deaths) > 0:
            turn_embed.add_field(name="Deaths",
                                 value="\n".join(d.complete_message()
                                                 for d in self._deaths))

        turn_embed.set_footer(text="Turn completed at")
        return turn_embed
Exemple #3
0
    async def modifier(self, ctx):

        modifiers = self.modifiers

        if ctx.invoked_subcommand is not None:
            return

        # Display Modifiers Menu
        list_ = ""

        for mod in modifiers:
            try:
                list_ += mod['name'] + "\n"
            except TypeError:
                list_ += mod + "\n"

        applied = ""

        for mod in self.tournament.modifiers:
            try:
                applied += f"`{mod['name']}` = {mod['value']} \n"
            except TypeError:
                applied += f"`{mod}` \n"

        embed = Embed(title="Modifiers Menu", color=Color.teal())
        embed.add_field(name="Available Modifiers", value=list_, inline=True)
        if applied != "":
            embed.add_field(name="Active Modifiers",
                            value=applied,
                            inline=True)

        await ctx.send(embed=embed)
Exemple #4
0
def profile_id(ctx, args):
    syntax_err = discord.Embed(title="Failed",
                               colour=Color.red(),
                               description="ERROR: !profileid <user id>")
    if len(args) < 2:
        return syntax_err

    user_id = args[1]
    user_presence = RobloxAPI.get_user_presence(user_id).json()
    user = RobloxAPI.get_user_by_id(user_id).json()

    pfp = RobloxAPI.get_pfp_by_id(user_id)
    status = RobloxAPI.get_user_status(user_id)
    display_name = user['displayName']
    presence_type = RobloxAPI.get_presence_type(
        user_presence['userPresences'][0]['userPresenceType'])
    presence_type_num = user_presence['userPresences'][0]['userPresenceType']
    game_name = "Not in game" if presence_type_num is 0 or presence_type_num is 1 else \
        user_presence['userPresences'][0][
            'lastLocation']
    game_id = user_presence['userPresences'][0]['placeId']
    game_url = None if presence_type_num is 1 or presence_type_num is 0 else RobloxAPI.get_game_link(
        game_id)

    e = discord.Embed(title=display_name,
                      colour=Color.teal(),
                      description="Information on Roblox Profile",
                      url=game_url)
    e.set_thumbnail(url=pfp)
    e.add_field(name="Status", value=status, inline=False)
    e.add_field(name="In-Game", value=presence_type, inline=True)
    e.add_field(name="Game", value=game_name, inline=False)

    return e
Exemple #5
0
def random():
    # type: () -> Color

    chilipepper = Color(0x9B1B30)
    tan = Color(0xBEAA3E)
    icedcoffee = Color(0xB18F6A)

    return choice([
        Color.teal(),
        Color.dark_teal(),
        Color.green(),
        Color.dark_green(),
        Color.blue(),
        Color.dark_blue(),
        Color.purple(),
        Color.dark_purple(),
        Color.magenta(),
        Color.dark_magenta(),
        Color.gold(),
        Color.dark_gold(),
        Color.orange(),
        Color.dark_orange(),
        Color.red(),
        Color.dark_red(),
        Color.lighter_grey(),
        Color.darker_grey(),
        Color.blurple(),
        tan,
        icedcoffee,
        chilipepper,
    ])
Exemple #6
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']
     }
Exemple #7
0
def random():
    # type: () -> Color

    tan = Color(0xBEAA3E)

    return choice([
        Color.teal(),
        Color.dark_teal(),
        Color.green(),
        Color.dark_green(),
        Color.blue(),
        Color.dark_blue(),
        Color.purple(),
        Color.dark_purple(),
        Color.magenta(),
        Color.dark_magenta(),
        Color.gold(),
        Color.dark_gold(),
        Color.orange(),
        Color.dark_orange(),
        Color.red(),
        Color.dark_red(),
        Color.lighter_grey(),
        Color.darker_grey(),
        Color.blurple(),
        tan,
    ])
Exemple #8
0
def random():
    c = [
        Color.teal(),
        Color.dark_teal(),
        Color.green(),
        Color.dark_green(),
        Color.blue(),
        Color.dark_blue(),
        Color.purple(),
        Color.dark_purple(),
        Color.magenta(),
        Color.dark_magenta(),
        Color.gold(),
        Color.dark_gold(),
        Color.orange(),
        Color.dark_orange(),
        Color.red(),
        Color.dark_red(),
        Color.lighter_grey(),
        Color.darker_grey(),
        Color.blurple(),
        tan,
        icedcoffee,
        chilipepper
    ]
    return c[randint(0, len(c) - 1)]
Exemple #9
0
def timedOut(reason, ctx, bot, footer):
        embed = Embed(title=reason,
                                colour = ctx.author.colour if ctx else Color.teal(),
                                timestamp=datetime.datetime.now())
        embed.set_footer(text=footer)
        embed.set_author(name=bot.user.name, icon_url=bot.user.avatar_url)
        return embed
Exemple #10
0
def help_command(ctx, args):
    from src import main
    from src.settings import Config
    commands_list = ""
    for key in main.commands:
        commands_list += f"{key}\n"
    e = discord.Embed(title="Commands", colour=Color.teal(), description="List of available commands.") \
        .set_thumbnail(url=Config.THUMBNAIL_URL) \
        .add_field(name="Commands", value=commands_list, inline=True)
    return e
        def get_gradient_color(percentage):

            percentage = 50 + int(percentage) / 2
            return gradient(
                Color.red(),
                Color.magenta(),
                Color.lighter_grey(),
                Color.teal(),
                Color.green(),
                percentage=percentage,
            )
Exemple #12
0
    async def t(self, ctx):
        tournament = self.tournament
        embed = Embed(title=tournament.name, color=Color.teal())

        for field in self.attr:
            value = getattr(tournament, field)
            embed.add_field(name=field.title(), value=value)

        if tournament.id is not None:
            embed.set_footer(text="Tournament ID: " + str(tournament.id))

        await ctx.send("Here's how the tournament currently looks like:",
                       embed=embed)
Exemple #13
0
def gen_embed(title: str, description: str = None, data: dict = {}):
    """Generate a Discord embed

    Args:
        title (str): The title of the embed
        description (str, optional): The description of the embed. Defaults to None.
        data (dict, optional): The fields of the embed. Defaults to {}.

    Returns:
        discord.Embed: A Discord embed ready to send
    """
    e = Embed(title=title, description=description, color=Color.teal())
    for key, value in data.items():
        e.add_field(name=key, value=value)
    return e
Exemple #14
0
    async def pypisearch(self, ctx: Context, arg: str):
        """Get info about a Python package directly from PyPi"""

        res_raw = await self.get_package(f"https://pypi.org/pypi/{arg}/json")

        try:
            res_json = await res_raw.json()
        except ContentTypeError:
            return await ctx.send(
                embed=Embed(
                    description="No such package found in the search query.",
                    color=Color.blurple(),
                )
            )

        res = res_json["info"]

        def getval(key):
            return res[key] or "Unknown"

        name = getval("name")
        author = getval("author")
        author_email = getval("author_email")

        description = getval("summary")
        home_page = getval("home_page")

        project_url = getval("project_url")
        version = getval("version")
        _license = getval("license")

        embed = Embed(
            title=f"{name} PyPi Stats", description=description, color=Color.teal()
        )

        embed.add_field(name="Author", value=author, inline=True)
        embed.add_field(name="Author Email", value=author_email, inline=True)

        embed.add_field(name="Version", value=version, inline=False)
        embed.add_field(name="License", value=_license, inline=True)

        embed.add_field(name="Project Url", value=project_url, inline=False)
        embed.add_field(name="Home Page", value=home_page)

        embed.set_thumbnail(url="https://i.imgur.com/syDydkb.png")

        await ctx.send(embed=embed)
Exemple #15
0
    async def start_reminder(self, destination):
        try:
            ten_mins_before = self.time - timedelta(minutes=10)
            await utils.sleep_until(ten_mins_before)
            mentions = ""

            for player in self.subscribed:
                mentions += player.mention + " "

            embed = Embed(
                title="Reminder",
                description=f"**{self.name}** will start in 10 minutes!",
                color=Color.teal())

            await destination.send(mentions, embed=embed)
        except CancelledError:
            pass
Exemple #16
0
    async def display_exp(self, ctx, member: Optional[Member]):
        member = member or ctx.author

        xp, lvl = db.record(
            "SELECT xp, level FROM member_exp WHERE member_id = ? AND guild_id = ?;",
            member.id, member.guild.id) or (None, None)

        if lvl is not None:
            embed = create_embed(
                "Level",
                f"{member.display_name} is level {lvl:,} with {xp:,} XP.",
                color=Color.teal(),
                thumbnail_url=member.avatar_url)

            await ctx.send(embed=embed)
        else:
            await ctx.send("That member does not have any exp data.")
Exemple #17
0
    async def tset(self, ctx, attribute, *, value):
        if attribute not in self.attr:
            raise commands.BadArgument(
                f"`{attribute}` is not a valid tournament attribute.")
        if attribute == 'host':
            value = await commands.MemberConverter().convert(ctx, value)
        elif attribute == 'time':
            try:
                value = parser.parse(value, dayfirst=True)
            except ValueError:
                raise commands.BadArgument(
                    f"`{value}` is not a valid time format. Refer to the pinned messages for a list of time formats."
                )

        old_value = getattr(self.tournament, attribute)
        setattr(self.tournament, attribute, value)

        if self.tournament.status in (3, 4):
            embed = UpdatedEmbed(self.tournament)
            await self.tournament.msg.edit(embed=embed)

        await ctx.send(
            f"{Emote.check} The `{attribute}` has been set to **{value}**.")

        fields = [{
            "name": "Old Value",
            "value": old_value
        }, {
            "name": "New Value",
            "value": value
        }]
        if old_value is None:
            del fields[0]

        Log("Value Updated",
            description=
            f"{ctx.author.mention} updated the `{attribute}` for **{self.tournament.name}**.",
            color=Color.teal(),
            fields=fields)
Exemple #18
0
def roblox_profile(ctx, args):
    syntax_err = discord.Embed(
        title="Failed",
        colour=Color.red(),
        description="ERROR: !roblox/!profile <username>")

    if len(args) < 2:
        return syntax_err

    username = args[1]
    # Both Profile Commands can be optimized for sure, by reducing the amount of requests
    user = RobloxAPI.get_user_by_username(username).json()
    user_presence = RobloxAPI.get_user_presence(user['data'][0]['id']).json()
    user_id = user['data'][0]['id']

    pfp = RobloxAPI.get_pfp_by_id(user_id)
    status = RobloxAPI.get_user_status(user_id)
    display_name = user['data'][0]['displayName']
    presence_type = RobloxAPI.get_presence_type(
        user_presence['userPresences'][0]['userPresenceType'])
    presence_type_num = user_presence['userPresences'][0]['userPresenceType']
    game_name = "Not in game" if presence_type_num is 0 or presence_type_num is 1 else \
        user_presence['userPresences'][0][
            'lastLocation']
    game_id = user_presence['userPresences'][0]['placeId']
    game_url = None if presence_type_num is 1 or presence_type_num is 0 else RobloxAPI.get_game_link(
        game_id)

    e = discord.Embed(title=display_name,
                      colour=Color.teal(),
                      description="Information on Roblox Profile",
                      url=game_url)
    e.set_thumbnail(url=pfp)
    e.add_field(name="Status", value=status, inline=False)
    e.add_field(name="In-Game", value=presence_type, inline=True)
    e.add_field(name="Game", value=game_name, inline=False)

    return e
Exemple #19
0
    async def stats(self, ctx):
        current_process = psutil.Process()
        cpu_usage = current_process.cpu_percent()
        memory = (resource.getrusage(resource.RUSAGE_SELF).ru_maxrss) / 1000
        current_time = time.time()
        difference = int(round(current_time - main_up))
        text = str(datetime.timedelta(seconds=difference))

        embed = discord.Embed(title="Stats", color=Color.teal())

        embed.add_field(
            name="Server Count",
            value=f"""```css
[{len(self.bot.guilds)} servers]```""",
        )

        embed.add_field(
            name="CPU usage",
            value=f"""```css
[{cpu_usage}%]```""",
            inline=True,
        )

        embed.add_field(
            name="Uptime",
            value=f"""```css
[{text}]```""",
        )
        embed.add_field(
            name="Memory",
            value=f"""```ini
[{memory} kb]```""",
        )

        embed.add_field(
            name="User Countries",
            value=f"""```ini
[{await count()}]```""",
        )

        embed.add_field(
            name="Creator",
            value=f"""```ini
[Coder N#0001]```""",
            inline=True,
        )

        embed.add_field(
            name="Websocket Ping",
            value=f"""```ini
[{self.bot.latency * 1000} ms]```""",
        )

        embed.add_field(
            name="Commands",
            value=f"""```css
[{len(self.bot.commands)}]```""",
        )

        embed.set_footer(
            text=
            "If some percentages show 0.0%, it means that the number is really close to zero."
        )
        await ctx.channel.send(embed=embed)
Exemple #20
0
async def commands(message, client):
    if message.content.startswith('>help'):
        txt = ""
        txt += "**FONCTIONS D\'ANIMATION DU DISCORD**\n"
        txt += "-----------------------------------\n"
        txt += ':dog2: | **>ordre** : Donne un ordre à Ohana.\n'
        txt += '> Paramètres :\n'
        txt += '> *assis*, *couché* ou *patte* | Liste non exhaustive.A toi de trouver les autres :upside_down:.\n'
        txt += '> Exemple : **>ordre patte chien**\n'
        txt += ':frame_photo: | **>race** : affiche une race d\`une espèce aléatoire.\n'
        txt += '> Paramètres :\n'
        txt += '> *chien* :dog:, *chat* :cat: ou *cheval* :horse: | Permet de préciser l\'espèce dont la race tirée au sort est associée.\n'
        txt += '> Exemple : **>race chien**\n'
        txt += ':teacher: | **>anecdote** : affiche une anecdote sur les animaux.\n'
        txt += "\n"
        txt += "**FONCTIONS POUR LES QUIZ**\n"
        txt += "-----------------------------------\n"
        txt += ':question: | **>quiz** : commande globale pour toutes les commandes liées aux quiz.\n'
        txt += '> Paramètres :\n'
        txt += '> *planning* :calendar: | Affiche la liste des quiz avec leur date.\n'
        txt += '> *classement* :crown: | Affiche le classement en cours (mois courant).\n'
        txt += '> *rappel* :notepad_spiral: | Gestion de la liste des joueurs de quiz qui veulent un rappel 10 minutes avant les quiz.\n'
        txt += "\n"
        txt += "**FONCTIONS DE GESTION DU DISCORD**\n"
        txt += "-----------------------------------\n"
        # txt += ':bar_chart: **>utilisateurs** : affiche des statistiques sur les utilisateurs du Discord.\n'
        # txt += ':bar_chart: **>messages** : affiche des statistiques sur les messages postés sur le Discord.\n'
        # txt += ':calendar: **>algo** : affiche le lien vers le flowchart du bot.\n'
        txt += ':calendar: **>code** : affiche le lien vers la roadmap du bot.\n'
        txt += ':computer: **>data** : regénère les fichiers de données pour mettre à jour les statistiques.\n'
        await message.channel.send(txt)

    if message.content.startswith('>test'):
        commands = [
            '>help', '>race', '>race chat', '>race chien', '>race cheval',
            '>anecdote', '>ordre assis', '>ordre couché', '>ordre patte',
            '>ordre high five', '>ordre belle', '>utilisateur', '>messages',
            '>code', '>data'
        ]
        for command in commands:
            await message.channel.send(command)
            await asyncio.sleep(1)

    # INTERACTIONS COMMANDS
    if message.content.startswith('>ordre'):
        await functions.apply_order(message)

    if message.content.startswith('>anecdote'):
        await functions.anecdote(message)

    if message.content.startswith('>race'):
        await functions.race(message)

    # QUIZ COMMANDS
    if message.content.startswith('>quiz planning'):
        import pandas as pd
        df = pd.read_excel("inputs/xlsx/planning.xlsx")

        def category(cat):
            if "Chien" in cat:
                return ":dog2:"
            if "Chat" in cat:
                return ":cat2:"
            if "Cheval" in cat:
                return ":racehorse:"
            if "Oiseau" in cat:
                return ":bird:"
            if "NAC" in cat:
                return ":rabbit2:"
            if "?" in cat:
                return ":interrobang:"
            return ":feet:"

        txt = "**QUIZ PASSÉS**\n"
        separator_added = False
        for id, row in df.iterrows():
            # Date	Titre	Catégorie
            ts = pd.to_datetime(str(row['Date']))
            date = ts.strftime('%d/%m/%Y')
            d, m, y = date.split("/")
            d = functions.rank_to_emote(d, type="date")
            m = functions.rank_to_emote(m, type="date")
            y = functions.rank_to_emote(y, type="date")

            import datetime
            if (ts > datetime.datetime.now() and not separator_added):
                txt += "**QUIZ FUTURS**\n"
                separator_added = True
            # txt += "{}/{}/{} : {} {}\n".format(d,m,y, row['Titre'], category(row['Catégorie']))
            txt += ":arrow_forward: {} {} : {}\n".format(
                category(row['Catégorie']), date, row['Titre'])
            if len(txt) > 1000:
                am = discord.AllowedMentions(everyone=False,
                                             users=False,
                                             roles=False,
                                             replied_user=False)
                await message.channel.send(txt, allowed_mentions=am)
                txt = ""
        am = discord.AllowedMentions(everyone=False,
                                     users=False,
                                     roles=False,
                                     replied_user=False)
        await message.channel.send(txt, allowed_mentions=am)

    if message.content.startswith('>question'):
        import pandas as pd
        df = pd.read_csv("inputs/csv/fci.csv", delimiter="\t")
        l = list()
        for key, row in df.sample().iterrows():
            r = row
        while r['id'] in l:
            for key, row in df.sample().iterrows():
                r = row
        l.append(r['id'])
        id_b = r['id']
        name_b = r['name_fr']
        country_b = r['country']

        propositions = list()
        propositions.append(country_b)

        await message.channel.send("De quel pays provient la race : " +
                                   name_b.title())

        rows_same_country = df[df['country'] == country_b]
        rows_diff_country = df.merge(
            rows_same_country, how='outer',
            indicator=True).loc[lambda x: x['_merge'] == 'left_only']
        other_responses = rows_diff_country.sample(3)
        for key, row in other_responses.iterrows():
            propositions.append(row['country'].title())
        for p in propositions:
            await message.channel.send("- {}".format(p.title()))
        await message.channel.send(":star: Réponse : ||" + country_b.title() +
                                   "||")

    if message.content.startswith('>quiz classement'):
        quiz.prepare_csv()
        functions.create_podium()
        df_members = pd.read_csv("outputs/members.csv")

        def get_discriminator(author):
            return author.split("#")[-1]

        df_quizz = pd.read_csv("outputs/charts/classement.csv")
        df_quizz['discriminator'] = df_quizz.apply(
            lambda x: get_discriminator(x['Username']), axis=1)
        df_members['discriminator'] = df_members['discriminator'].astype(int)
        df_quizz['discriminator'] = df_quizz['discriminator'].astype(int)
        df = df_quizz.merge(df_members,
                            how="left",
                            suffixes=('_quizz', '_data'))
        await message.channel.send(file=discord.File('outputs/podium.png'))
        txt = "Classement du mois :\n"
        for key, row in df.head(10).iterrows():
            print(row['id' ''])
            txt += "{}\n{} [<@{}>]\n:homes: {} |:1234: {}pts\n".format(
                functions.rank_to_emote(key + 1),
                row['display_name'].split("-")[0].strip(), row['id'],
                row['refuge'], row['Points'])
            if len(txt) > 1000:
                am = discord.AllowedMentions(everyone=False,
                                             users=False,
                                             roles=False,
                                             replied_user=False)
                await message.channel.send(txt, allowed_mentions=am)
                txt = ""
        am = discord.AllowedMentions(everyone=False,
                                     users=False,
                                     roles=False,
                                     replied_user=False)
        await message.channel.send(txt, allowed_mentions=am)

        # await functions.order_not_available(message);

    if message.content.startswith('>bug'):
        from discord.utils import get
        user = get(message.guild.members, name="Cédric")
        if user:
            await user.send(content=message.author.name)
            await user.send(content=message.content)
        else:
            print("NON")

    if message.content.startswith('>quiz rappel'):
        await functions.order_not_available(message)

    # ADMIN COMMANDS
    if message.content.startswith('>algo'):
        await functions.order_not_available(message)

    if message.content.startswith('>utilisateurs'):
        # await functions.order_not_available(message);
        # return
        df = pd.read_csv("outputs/members.csv")
        cjs = df['refuge'].unique()
        cjs = sorted(cjs)
        roles = [
            'Administrateurs', 'Modérateurs', 'Responsables de refuge',
            'Agents animaliers', 'Référents', 'Encadrants', 'Jeunes'
        ]
        colors = dict()
        colors['Administrateurs'] = Color.red()
        colors['Modérateurs'] = Color.orange()
        colors['Responsables de refuge'] = Color.green()
        colors['Agents animaliers'] = Color.teal()
        colors['Référents'] = Color.purple()
        colors['Encadrants'] = Color.blue()
        colors['Jeunes'] = Color.gold()
        colors['Non présentés'] = Color.dark_red()
        for cj in cjs:
            await message.channel.send(":map: **{}** :map:".format(cj))
            df_temp = df[df['refuge'] == cj]
            for role in roles:
                l = list()
                for key, row in df_temp[df_temp['top_role'] ==
                                        role].iterrows():
                    l.append(row['display_name'])
                if len(l) > 0:
                    l = sorted(l)
                    emeb = discord.Embed(title=role,
                                         description="\n".join(l),
                                         color=colors[role])
                    await message.channel.send(embed=emeb)

    if message.content.startswith('>messages'):
        import time
        start_time = time.time()

        await message.channel.send('Bien reçu ! Je vais compter les messages.')
        await message.channel.send('Je reviens dans quelques secondes ...')

        df = pd.read_csv("outputs/csv/messages.csv")

        import seaborn as sns
        top_five = df['channel'].value_counts().keys()[:5]
        df_temp = df[df['channel'].isin(top_five)]
        sns_plot = sns.catplot(y="channel",
                               kind="count",
                               palette="pastel",
                               edgecolor=".6",
                               data=df_temp)
        sns_plot.savefig("outputs/images/output.png")

        await message.channel.send('En tout, il y a {} messages.'.format(
            len(list(df['content']))))
        await message.channel.send(
            'Répartition dans les salons :',
            file=discord.File('outputs/images/output.png'))
        await message.channel.send("J'ai trouvé ce résultat en %d secondes." %
                                   int(time.time() - start_time))
        return

    if message.content.startswith('>code'):
        await message.channel.send(
            'Tu veux connaître les prochaines améliorations du bot ? Ca se passe ici !'
        )
        await message.channel.send(
            'https://github.com/cedricmaigrot/Discord_laSPA/projects/1')
        await message.channel.send(
            'Tu veux faire ton propre bot comme <@818564026237452350> ? Le code est en open source !'
        )
        await message.channel.send(file=discord.File('inputs/images/work.gif'))

    if message.content.startswith('>data'):
        import time
        start_time = time.time()
        await message.channel.send('Bien reçu ! Je vais mémoriser les données.'
                                   )
        await message.channel.send('Je reviens dans quelques secondes ...')
        for guild in client.guilds:
            if guild.name in "Clubs Jeunes SPA":
                # lst = list()
                # for channel in guild.channels:
                #     print("Channel : " + channel.name)
                #     try:
                #         hist = await channel.history(limit=20000).flatten()
                #         for h in hist:
                #             lst.append([h.activity, h.application, h.attachments, h.author, h.call, h.channel,
                #                         h.channel_mentions, h.clean_content, h.content, h.created_at, h.edited_at,
                #                         h.embeds, h.flags, h.guild, h.id, h.jump_url, h.mention_everyone, h.mentions,
                #                         h.nonce, h.pinned, h.raw_channel_mentions, h.raw_mentions, h.raw_role_mentions,
                #                         h.reactions, h.reference, h.role_mentions, h.stickers, h.system_content, h.tts,
                #                         h.type, h.webhook_id])
                #     except:
                #         pass
                # df_messages = pd.DataFrame(lst, columns=["activity", "application", "attachments", "author", "call",
                #                                          "channel", "channel_mentions", "clean_content", "content",
                #                                          "created_at", "edited_at", "embeds", "flags", "guild", "id",
                #                                          "jump_url", "mention_everyone", "mentions", "nonce", "pinned",
                #                                          "raw_channel_mentions", "raw_mentions", "raw_role_mentions",
                #                                          "reactions", "reference", "role_mentions", "stickers",
                #                                          "system_content", "tts", "type", "webhook_id"])
                # df_messages.to_csv("outputs/messages.csv")
                # df_messages.to_excel("outputs/messages.xlsx")
                # df_messages.to_html("outputs/messages.html")

                df_messages = pd.read_excel("outputs/messages.xlsx")

                lst = list()
                for member in guild.members:
                    print("Member : " + member.name)
                    lst.append([
                        member.activities, member.activity, member.avatar,
                        member.avatar_url, member.bot, member.color,
                        member.colour, member.created_at,
                        member.default_avatar, member.default_avatar_url,
                        member.desktop_status, member.discriminator,
                        member.display_name, member.guild,
                        member.guild_permissions, member.id, member.joined_at,
                        member.mention, member.mobile_status, member.name,
                        member.nick, member.pending, member.premium_since,
                        member.public_flags, member.raw_status, member.roles,
                        member.status, member.system, member.top_role,
                        member.voice, member.web_status
                    ])
                df_members = pd.DataFrame(
                    lst,
                    columns=[
                        "activities", "activity", "avatar", "avatar_url",
                        "bot", "color", "colour", "created_at",
                        "default_avatar", "default_avatar_url",
                        "desktop_status", "discriminator", "display_name",
                        "guild", "guild_permissions", "id", "joined_at",
                        "mention", "mobile_status", "name", "nick", "pending",
                        "premium_since", "public_flags", "raw_status", "roles",
                        "status", "system", "top_role", "voice", "web_status"
                    ])

                def get_shelter(roles):
                    shelter = "Inconnu"
                    for role in roles:
                        r = discord.utils.get(guild.roles, id=role.id)
                        if "Club Jeunes" in r.name:
                            shelter = r.name
                            print(r.name)
                    return shelter

                df_members['refuge'] = df_members.apply(
                    lambda x: get_shelter(x['roles']), axis=1)

                df_members.to_csv("outputs/members.csv")
                df_members.to_excel("outputs/members.xlsx")
                df_members.to_html("outputs/members.html")

                lst = list()
                for role in guild.roles:
                    print("Role : " + role.name)
                    lst.append([
                        role.color, role.colour, role.created_at, role.guild,
                        role.hoist, role.id, role.managed, role.members,
                        role.mention, role.mentionable, role.name,
                        role.permissions, role.position, role.tags
                    ])
                df_roles = pd.DataFrame(lst,
                                        columns=[
                                            "color", "colour", "created_at",
                                            "guild", "hoist", "id", "managed",
                                            "members", "mention",
                                            "mentionable", "name",
                                            "permissions", "position", "tags"
                                        ])
                df_roles.to_csv("outputs/roles.csv")
                df_roles.to_excel("outputs/roles.xlsx")
                df_roles.to_html("outputs/roles.html")

                df_members['discriminator'] = df_members[
                    'discriminator'].astype(str)

                def get_discriminator(author):
                    name = "{}".format(author)
                    return name.split("#")[-1]

                df_messages['author_discriminator'] = df_messages.apply(
                    lambda x: get_discriminator(x['author']), axis=1)
                df_messages['author_discriminator'] = df_messages[
                    'author_discriminator'].astype(str)

                df_merge = df_messages.merge(df_members,
                                             left_on='author_discriminator',
                                             right_on='discriminator',
                                             suffixes=('_messages',
                                                       '_members'))
                df_merge = df_merge.merge(df_roles,
                                          left_on='top_role',
                                          right_on='name',
                                          suffixes=('', '_role'))

                # df_messages[(~df_messages['id'].isin(df_merge['id_messages']))]['author']
                df_merge.to_html("outputs/merge.html")
                df_merge.to_csv("outputs/merge.csv")
                df_merge.to_excel("outputs/merge.xlsx")

        await message.channel.send('C\'est fait !')
        await message.channel.send("J'ai fait cela en %d secondes." %
                                   int(time.time() - start_time))
        return
import discord
from discord.ext import commands
import random
from discord import Color as c

teal = c.teal()
magenta = c.magenta(
)  #choose any colour, but be mindful of the discord.Color colours, they are wierd, unless you go with a custom RGB "system"


class Load(commands.Cog):
    def __init__(self, client):
        self.client = client

    @commands.command()
    async def commands(self, ctx):
        em = discord.Embed(color=teal)
        em.add_field(name="`Prefix`",
                     value='**My Prefix Is** - <',
                     inline=False)
        em.add_field(
            name="Commands",
            value=
            'Do <Commands to get a list of the finest commands i have to offer.',
            inline=False)
        em.add_field(name='Developer',
                     value="Do <dev to see who made me!",
                     inline=False)
        em.set_author(
            name="Command Information",
            icon_url=
Exemple #22
0
 async def on_member_unban(self, guild, user):
     await self.logembed(user, "Unbanned", Color.teal())
Exemple #23
0
 def __init__(self, bot):
     self.colors = (Color.red(), Color.gold(), Color.green(),
                    Color.magenta(), Color.teal(), Color.dark_blue())
     self.bot = bot
     self.session = aiohttp.ClientSession(
         headers={'User-agent': 'RedditCrawler'})