Пример #1
0
 async def leaderboard_max(self, ctx, value: int):
     self.config_initialization(ctx)
     self.server_config[str(ctx.guild.id)]["lb_max"] = value
     main_methods.save_server_configs(self.server_config)
     return await scrim_methods.temporary_feedback(
         ctx,
         f"Maximum length of leaderboards successfully set to {value}.")
Пример #2
0
 async def ping_created_scrim(self, ctx, value: bool):
     self.config_initialization(ctx)
     self.server_config[str(ctx.guild.id)]["ping_game_role"] = value
     main_methods.save_server_configs(self.server_config)
     return await scrim_methods.temporary_feedback(
         ctx,
         f"Pinging the scrim's game on scrim setup successfully set to '{value}'."
     )
Пример #3
0
 async def scrim_delete_messages(self, ctx, value: bool):
     self.config_initialization(ctx)
     self.server_config[str(ctx.guild.id)]["delete_msgs_in_scrim"] = value
     main_methods.save_server_configs(self.server_config)
     return await scrim_methods.temporary_feedback(
         ctx,
         f"Automatically deleting messages on channels with active scrims successfully set to {value}."
     )
Пример #4
0
 async def delete_idle_scrims(self, ctx, value: bool):
     self.config_initialization(ctx)
     self.server_config[str(ctx.guild.id)]["delete_inactive"] = value
     main_methods.save_server_configs(self.server_config)
     return await scrim_methods.temporary_feedback(
         ctx,
         f"Automatically deleting idle scrims on the server successfully set to {value}."
     )
Пример #5
0
 async def scrim_permissions(self, ctx, value: bool):
     self.config_initialization(ctx)
     self.server_config[str(
         ctx.guild.id)]["require_setup_permissions"] = value
     main_methods.save_server_configs(self.server_config)
     return await scrim_methods.temporary_feedback(
         ctx,
         f"Scrim setup requiring permissions successfully set to {value}.")
Пример #6
0
 async def games_is_whitelist(self, ctx, value: bool):
     self.config_initialization(ctx)
     self.server_config[str(ctx.guild.id)]["games_is_whitelist"] = value
     main_methods.save_server_configs(self.server_config)
     if value:
         text = "Server game list set to whitelist."
     else:
         text = "Server game list set to blacklist."
     return await scrim_methods.temporary_feedback(ctx, text)
Пример #7
0
 async def guild_bot_admin(self, ctx, value: bool):
     self.config_initialization(ctx)
     self.server_config[str(
         ctx.guild.id)]["guild_admin_is_bot_admin"] = value
     main_methods.save_server_configs(self.server_config)
     return await scrim_methods.temporary_feedback(
         ctx,
         f"Server admins automatically having bot admin permissions on the server successfully set to {value}."
     )
Пример #8
0
    async def remove(self, ctx, game_name):
        self.config_initialization(ctx)

        for game in elo_methods.Game.instances:
            if game_name in game.alias['alias']:
                if game.dispname not in self.server_config[str(
                        ctx.guild.id)]["games"]:
                    return await scrim_methods.temporary_feedback(
                        ctx,
                        f"The game {game.dispname} is not on the games list.")
                self.server_config[str(ctx.guild.id)]["games"].remove(
                    game.dispname)
                main_methods.save_server_configs(self.server_config)
                return await scrim_methods.temporary_feedback(
                    ctx, f"Removed game {game.dispname} from the games list.")
Пример #9
0
    async def add(self, ctx, game_name):
        self.config_initialization(ctx)

        for game in elo_methods.Game.instances:
            if game_name in game.alias['alias']:
                if game.dispname in self.server_config[str(
                        ctx.guild.id)]["games"]:
                    return await scrim_methods.temporary_feedback(
                        ctx,
                        f"The game {game.dispname} is already on the games list."
                    )
                self.server_config[str(ctx.guild.id)]["games"].append(
                    game.dispname)
                main_methods.save_server_configs(self.server_config)
                return await scrim_methods.temporary_feedback(
                    ctx, f"Added game {game.dispname} to the games list.")
Пример #10
0
 async def remove(self, ctx, members: commands.Greedy[discord.Member]):
     self.config_initialization(ctx)
     admin_list = self.server_config[str(ctx.guild.id)]["bot_guild_admins"]
     for member in members:
         if member.id in admin_list:
             admin_list.remove(member.id)
             await scrim_methods.temporary_feedback(
                 ctx,
                 f"Removed {member.display_name} from bot admins",
                 delete=False)
         else:
             await scrim_methods.temporary_feedback(
                 ctx,
                 f"User {member.display_name} is not a bot admin",
                 delete=False)
     self.server_config[str(ctx.guild.id)]["bot_guild_admins"] = admin_list
     main_methods.save_server_configs(self.server_config)
     await ctx.message.delete()
     return
Пример #11
0
 async def add(self, ctx, members: commands.Greedy[discord.Member]):
     self.config_initialization(ctx)
     moderator_list = self.server_config[str(
         ctx.guild.id)]["bot_guild_moderators"]
     for member in members:
         if member.id not in moderator_list:
             moderator_list.append(member.id)
             await scrim_methods.temporary_feedback(
                 ctx,
                 f"Added {member.display_name} as bot moderator.",
                 delete=False)
         else:
             await scrim_methods.temporary_feedback(
                 ctx,
                 f"User {member.display_name} is already a bot moderator.",
                 delete=False)
     self.server_config[str(
         ctx.guild.id)]["bot_guild_moderators"] = moderator_list
     main_methods.save_server_configs(self.server_config)
     await ctx.message.delete()
     return
Пример #12
0
 async def prefix(self, ctx, value):
     self.config_initialization(ctx)
     self.server_config[str(ctx.guild.id)]["prefix"] = value
     main_methods.save_server_configs(self.server_config)
     return await scrim_methods.temporary_feedback(
         ctx, f"Server bot prefix successfully set to '{value}'.")
Пример #13
0
 async def delete_timer_scrims(self, ctx, value: int):
     self.config_initialization(ctx)
     self.server_config[str(ctx.guild.id)]["delete_time_mins"] = value
     main_methods.save_server_configs(self.server_config)
     return await scrim_methods.temporary_feedback(
         ctx, f"Idle scrim deletion delay successfully set to {value}.")
Пример #14
0
    async def setup_roles(self, ctx):

        # getting all the games
        game_dict = main_methods.get_game_config()

        # check for the interactive creation and recognising the correct user
        def check(message):
            return (message.channel == ctx.message.channel
                    and message.author == ctx.message.author)

        self.config_initialization(ctx)

        if self.server_config[str(ctx.guild.id)]["roles_setup"]:
            query_msg = await ctx.send(
                f"This server already has a role signup system setup. If you want to run the setup again to update the roles, answer 'yes', if not, answer anything else."
            )
            try:
                response_msg = await self.client.wait_for('message',
                                                          timeout=20.0,
                                                          check=check)
                await query_msg.delete()
            except asyncio.TimeoutError:
                return await scrim_methods.temporary_feedback(
                    ctx, "Request timed out.", delay=20.0)

            if response_msg.content.lower() != "yes":
                await response_msg.delete()
                return await scrim_methods.temporary_feedback(
                    ctx, "Operation cancelled", delay=20.0)
            await response_msg.delete()

        new_role_count = 0
        overwrite_count = 0
        new_emoji_count = 0
        emoji_overwrites = 0

        # counting new and old roles and emojis for the interactive messages
        for category in game_dict["Games"]:
            for game in game_dict["Games"][category]:
                new_role_count += 1
                new_emoji_count += 1
                if game in list(emoji.name for emoji in ctx.guild.emojis):
                    emoji_overwrites += 1
                for role in ctx.message.guild.roles:
                    if str(role
                           ) == game_dict["Games"][category][game]["dispname"]:
                        overwrite_count += 1
                        break
        new_role_count -= overwrite_count
        new_emoji_count -= emoji_overwrites

        # interactive message if all roles already exist
        if new_role_count == 0:
            query_msg = await ctx.send(
                f"All games alredy have a role. Overwriting old roles is recommended. If you want to do it answer 'yes', if no, answer anything else."
            )
            try:
                response_msg = await self.client.wait_for('message',
                                                          timeout=20.0,
                                                          check=check)
                await query_msg.delete()
            except asyncio.TimeoutError:
                return await scrim_methods.temporary_feedback(
                    ctx, "Request timed out.", delay=20.0)

            if response_msg.content.lower() == "yes":
                force_overwrite = True
            else:
                force_overwrite = False
            await response_msg.delete()

        # making sure users know how many roles they will create
        else:
            query_msg = await ctx.send(
                f"This will create {new_role_count} new roles on the server. If you want to proceed answer 'yes', if not answer anything else."
            )

            try:
                response_msg = await self.client.wait_for('message',
                                                          timeout=20.0,
                                                          check=check)
                await query_msg.delete()
            except asyncio.TimeoutError:
                return await scrim_methods.temporary_feedback(
                    ctx, "Request timed out.", delay=20.0)
            if response_msg.content.lower() != "yes":
                await response_msg.delete()
                return await scrim_methods.temporary_feedback(
                    ctx, "Operation cancelled", delay=20.0)
            await response_msg.delete()

            if overwrite_count:
                query_msg = await ctx.send(
                    f"Found {overwrite_count} conflicting roles. Overwriting old roles is recommeneded. If you want to do it answer 'yes', if no, answer anything else."
                )
                try:
                    response_msg = await self.client.wait_for('message',
                                                              timeout=20.0,
                                                              check=check)
                    await query_msg.delete()
                except asyncio.TimeoutError:
                    return await scrim_methods.temporary_feedback(
                        ctx, "Request timed out.", delay=20.0)
                force_overwrite = (response_msg.content.lower() == "yes")
                await response_msg.delete()
            else:
                force_overwrite = False

        # making sure users know how many emojis they will create
        extra_string = ""
        if emoji_overwrites:
            extra_string = f" and reuse {emoji_overwrites} existing ones"
        query_msg = await ctx.send(
            f"Do you want to create a signup system for the roles? This will create {new_emoji_count} new emojis on the server{extra_string}. "
            +
            f"This will also create a signup channel if one does not already exist and post a message on that channel. "
            +
            f"If you want to do this, answer 'yes', if not, answer anything else."
        )
        try:
            response_msg = await self.client.wait_for('message',
                                                      timeout=20.0,
                                                      check=check)
            await query_msg.delete()
        except asyncio.TimeoutError:
            return await scrim_methods.temporary_feedback(ctx,
                                                          "Request timed out.",
                                                          delay=20.0)
        create_signup_system = (response_msg.content.lower() == "yes")
        await response_msg.delete()

        # creating all the necessary roles and emotes
        emojis = {}
        for category in game_dict["Games"]:
            for game in game_dict["Games"][category]:

                # check server-specific gamebans
                if ((self.server_config[str(
                        ctx.guild.id)]["games_is_whitelist"] and game
                     not in self.server_config[str(ctx.guild.id)]["games"]) or
                    (not self.server_config[str(
                        ctx.guild.id)]["games_is_whitelist"] and game
                     in self.server_config[str(ctx.guild.id)]["games"])):
                    continue

                # role creation
                for role in ctx.message.guild.roles:
                    if str(role
                           ) == game_dict["Games"][category][game]["dispname"]:
                        if force_overwrite:
                            await ctx.message.guild.get_role(role.id).delete(
                                reason=
                                "ScrimBot: overwriting old roles while setting up roles for games."
                            )
                            continue
                        else:
                            break
                else:
                    await ctx.message.guild.create_role(
                        name=game_dict["Games"][category][game]["dispname"],
                        # getting the hex values of the color from the game dictionary's color value:
                        colour=discord.Color.from_rgb(
                            int(
                                game_dict["Games"][category][game]["colour"]
                                [2:4], 16),
                            int(
                                game_dict["Games"][category][game]["colour"]
                                [4:6], 16),
                            int(
                                game_dict["Games"][category][game]["colour"]
                                [6:], 16)),
                        mentionable=True,
                        reason="ScrimBot: Setting up roles for games")

                # emoji creation
                if create_signup_system and game not in list(
                        emoji.name for emoji in ctx.guild.emojis):
                    with open(f"emoji_pics/{game}.png", "rb") as emoji_image:
                        emojis.update({
                            game_dict["Games"][category][game]["dispname"]:
                            await ctx.message.guild.create_custom_emoji(
                                name=game, image=emoji_image.read())
                        })
                elif create_signup_system:
                    for emoji in ctx.guild.emojis:
                        if emoji.name == game:
                            emojis.update({
                                game_dict["Games"][category][game]["dispname"]:
                                emoji
                            })
                            break

        if not create_signup_system:
            main_methods.save_server_configs(self.server_config)
            return await scrim_methods.temporary_feedback(
                ctx,
                "Roles setup. Did not setup automated signup channel as requested."
            )

        # setting up the signup message embed
        signup_embed = discord.Embed(
            title="Role signup",
            description=
            "React with the games you play to get pingable roles for them.",
            color=int("0x00ff00", 16))
        signup_embed.set_author(
            name="ScrimBot",
            icon_url=
            "https://upload.wikimedia.org/wikipedia/commons/thumb/3/30/Fxemoji_u1F3AE.svg/512px-Fxemoji_u1F3AE.svg.png"
        )
        signup_embed.set_footer(
            text=
            "Tip: If you are stuck with a role after this message was reset, just react with that role again and remove the reaction."
        )
        for game in emojis:
            signup_embed.add_field(name=game, value=str(emojis[game]))

        # getting the correct message depending on situation:
        # channel exists, message missing.
        if ("scrimbot-role-signup" in list(channel.name
                                           for channel in ctx.guild.channels)
            ) and (not self.server_config[str(
                ctx.guild.id)]["role_signup_message"]):
            for channel in ctx.guild.channels:
                if channel.name == "scrimbot-role-signup":
                    signup_message = await channel.send(embed=signup_embed)
                    feedback = "Role signup channel already exists. Signup message missing, a new one was created."

        # channel and message exist, update message
        elif "scrimbot-role-signup" in list(
                channel.name
                for channel in ctx.guild.channels) and self.server_config[str(
                    ctx.guild.id)]["role_signup_message"]:
            for channel in ctx.guild.channels:
                if channel.name == "scrimbot-role-signup":
                    signup_message = await channel.fetch_message(
                        self.server_config[str(
                            ctx.guild.id)]["role_signup_message"])
                    await signup_message.edit(embed=signup_embed)
                    feedback = "Role signup channel and message already exist. Updated the message."

        # channel missing: create category and channel
        else:
            for category in ctx.guild.categories:
                if category.name == "SCRIMBOT ROLE SIGNUP":
                    signup_category = category
                    break
            else:
                signup_category = await ctx.guild.create_category(
                    name="SCRIMBOT ROLE SIGNUP",
                    reason="ScrimBot: setting up role signup system.")

            signup_channel = await ctx.guild.create_text_channel(
                name="scrimbot-role-signup",
                category=signup_category,
                reason="ScrimBot: setting up role signup system.")
            signup_message = await signup_channel.send(embed=signup_embed)
            feedback = "Created a channel and a message for role signup."

        # creating the signup embed and updating
        await signup_message.clear_reactions()
        for game in emojis:
            await signup_message.add_reaction(str(emojis[game]))
        self.server_config[str(
            ctx.guild.id)]["role_signup_message"] = signup_message.id
        self.server_config[str(ctx.guild.id)]["roles_setup"] = True

        main_methods.save_server_configs(self.server_config)
        return await scrim_methods.temporary_feedback(ctx, feedback)