Пример #1
0
async def insert_default_initial_configs(bot):
    serversSql = ServersSql(bot)
    await serversSql.insert_default_initial_server_configs(bot.guilds)
    usersSql = UsersSql(bot)
    await usersSql.insert_all_server_users(bot.guilds)
    gw2Configs = Gw2ConfigsSql(bot)
    await gw2Configs.insert_default_initial_gw2_server_configs(bot.guilds, bot.gw2_settings["BGRoleTimer"])
Пример #2
0
async def last_session_gw2_event(bot, before: discord.Member,
                                 after: discord.Member):
    before_activity = None
    after_activity = None

    for bact in before.activities:
        if bact.type is not discord.ActivityType.custom:
            before_activity = bact

    for aact in after.activities:
        if aact.type is not discord.ActivityType.custom:
            after_activity = aact

    if (after_activity is not None and "guild wars 2" in str(after_activity.name).lower())\
    and (after_activity.type == discord.ActivityType.playing or after_activity.type == discord.ActivityType.streaming)\
    or (before_activity is not None and "guild wars 2" in str(before_activity.name).lower())\
    and (before_activity.type == discord.ActivityType.playing or before_activity.type == discord.ActivityType.streaming):
        gw2Configs = Gw2ConfigsSql(bot)
        rs_gw2_sc = await gw2Configs.get_gw2_server_configs(after.guild.id)
        if len(rs_gw2_sc) > 0 and rs_gw2_sc[0]["last_session"] == "Y":
            gw2KeySql = Gw2KeySql(bot)
            rs_api_key = await gw2KeySql.get_server_user_api_key(
                after.guild.id, after.id)
            if len(rs_api_key) > 0:
                if after_activity is not None:
                    await insert_gw2_session_starts(bot, after,
                                                    rs_api_key[0]["key"])
                else:
                    await update_gw2_session_ends(bot, before,
                                                  rs_api_key[0]["key"])
Пример #3
0
async def _roletimer(self, ctx, role_timer: int):
    """(Configure the timer the bot should check for api roles in seconds)

    Example:
    gw2 config roletimer 3600
    """

    await ctx.message.channel.trigger_typing()
    err_msg_number = "Wrong option!!!\n" \
                     "Timer must be in seconds and higher than 3600 secs (1hour).\n" \
                     f"Using default timer: {self.bot.gw2_settings['BGRoleTimer']}"

    try:
        role_timer = int(role_timer)
        if not math.isnan(role_timer):
            if role_timer < 3600:
                await BotUtils.send_error_msg(self, ctx, err_msg_number)
                role_timer = self.bot.gw2_settings["BGRoleTimer"]
    except Exception:
        await BotUtils.send_error_msg(self, ctx, err_msg_number)
        return

    color = discord.Color.green()
    msg = f"Timer changed to: `{role_timer} seconds`"
    embed = discord.Embed(description=msg, color=color)
    gw2Configs = Gw2ConfigsSql(self.bot)
    await gw2Configs.update_gw2_role_timer(ctx.message.channel.guild.id,
                                           role_timer)

    await BotUtils.send_embed(self, ctx, embed, False, msg)
Пример #4
0
async def _lastsession(self, ctx, new_status: str):
    """(Configure if the bot should record users last sessions)

    Example:
    gw2 config lastsession on
    gw2 config lastsession off
    """

    await ctx.message.channel.trigger_typing()
    if new_status.lower() == "on":
        new_status = "Y"
        color = discord.Color.green()
        msg = f"Last session `ACTIVATED`\nBot will now record Gw2 users last sessions."
    elif new_status.lower() == "off":
        new_status = "N"
        color = discord.Color.red()
        msg = f"Last session `DEACTIVATED`\nBot will `NOT` record Gw2 users last sessions."
    else:
        raise commands.BadArgument(message="BadArgument")

    embed = discord.Embed(description=msg, color=color)
    gw2Configs = Gw2ConfigsSql(self.bot)
    rs = await gw2Configs.get_gw2_server_configs(ctx.message.channel.guild.id)
    if len(rs) == 0:
        role_timer = self.bot.gw2_settings["BGRoleTimer"]
        await gw2Configs.insert_gw2_last_session(ctx.message.channel.guild.id,
                                                 new_status, role_timer)
    elif rs[0]["last_session"] != new_status:
        await gw2Configs.update_gw2_last_session(ctx.message.channel.guild.id,
                                                 new_status)

    await BotUtils.send_embed(self, ctx, embed, False, msg)
Пример #5
0
async def set_gw2_roles(bot):
    if bot.gw2_settings["BGCheckRoleTimer"].lower() == "yes":
        gw2Configs = Gw2ConfigsSql(bot)
        gw2Roles = Gw2RolesSql(bot)
        bgTasks = BgTasks(bot)

        for g in bot.guilds:
            rs_gw2_rl = await gw2Roles.get_all_gw2_server_roles(g.id)
            if len(rs_gw2_rl) > 0:
                for key, value in rs_gw2_rl.items():
                    role_name = value["role_name"]
                    for rol in g.roles:
                        if rol.name.lower() == role_name.lower():
                            rs_gw2_sc = await gw2Configs.get_gw2_server_configs(g.id)
                            if len(rs_gw2_sc) > 0:
                                role_timer = rs_gw2_sc[0]["role_timer"]
                            else:
                                role_timer = bot.gw2_settings["BGRoleTimer"]

                            bot.loop.create_task(bgTasks.bgtask_check_gw2_roles(g, rol, role_timer))
Пример #6
0
async def _list(self, ctx):
    """(List all gw2 configurations in the current server)

    Example:
    gw2 config list
    """

    color = self.bot.gw2_settings["EmbedColor"]
    embed = discord.Embed(color=color)
    embed.set_thumbnail(url=f"{ctx.message.channel.guild.icon_url}")
    embed.set_author(
        name=
        f"Guild Wars 2 configurations for {ctx.message.channel.guild.name}",
        icon_url=f"{ctx.message.channel.guild.icon_url}")
    embed.set_footer(text=f"For more info: {ctx.prefix}help gw2 config")

    gw2Configs = Gw2ConfigsSql(self.bot)
    rs = await gw2Configs.get_gw2_server_configs(ctx.message.channel.guild.id)

    if len(rs) == 0:
        last_session = "N"
        role_timer = f"{self.bot.gw2_settings['BGRoleTimer']} secs (Default)"
    else:
        last_session = rs[0]["last_session"]
        role_timer = f"{rs[0]['role_timer']} secs"

    on = Formatting.green_text("ON")
    off = Formatting.red_text("OFF")
    embed.add_field(name="Bot should record gw2 users last sessions",
                    value=f"{on}" if last_session == "Y" else f"{off}",
                    inline=False)
    embed.add_field(name="Timer the bot should check for api roles in seconds",
                    value=f"{Formatting.box(role_timer)}",
                    inline=False)

    await BotUtils.send_embed(self, ctx, embed, True)
Пример #7
0
async def _add_key(self, ctx, api_key: str):
    #     if (isinstance(ctx.channel, discord.DMChannel)):
    #         msg = "GW2 add api command needs to be used in a server channel for proper roles to be assign!!!"
    #         await BotUtils.send_private_error_msg(self, ctx, msg)
    #         return

    gw2Configs = Gw2ConfigsSql(self.bot)
    rs_gw2_sc = await gw2Configs.get_gw2_server_configs(ctx.guild.id)
    if len(rs_gw2_sc) == 0 or (len(rs_gw2_sc) > 0
                               and rs_gw2_sc[0]["last_session"] == "N"):
        return await BotUtils.send_error_msg(
            self, ctx, "Unable to add api key.\n"
            "Last session is not active on this server.\n"
            f"To activate use: `{ctx.prefix}gw2 config lastsession on`")
    discord_user_id = ctx.message.author.id
    discord_server_id = ctx.message.guild.id

    # searching if API key already exists in bot database
    gw2KeySql = Gw2KeySql(self.bot)
    rs = await gw2KeySql.get_api_key(discord_server_id, api_key)
    if len(rs) == 0:
        gw2Api = Gw2Api(self.bot)
        is_valid_key = await gw2Api.check_api_key(api_key)
        if not isinstance(is_valid_key, dict):
            return await BotUtils.send_private_error_msg(
                self, ctx, f"{is_valid_key.args[1]}\n`{api_key}`")

        key_name = is_valid_key["name"]
        permissions = ','.join(is_valid_key["permissions"])

        try:
            # getting gw2 acc name
            api_req_acc_info = await gw2Api.call_api("account", key=api_key)
            gw2_acc_name = api_req_acc_info["name"]
            member_server_id = api_req_acc_info["world"]
        except Exception as e:
            await BotUtils.send_private_error_msg(self, ctx, e)
            return self.bot.log.error(ctx, e)

        try:
            # getting gw2 server name
            endpoint = f"worlds/{member_server_id}"
            api_req_server = await gw2Api.call_api(endpoint, key=api_key)
            gw2_server_name = api_req_server["name"]
        except Exception as e:
            await BotUtils.send_private_error_msg(self, ctx, e)
            self.bot.log.error(ctx, e)
            return

        # searching if user has 1 api key already
        rs = await gw2KeySql.get_server_user_api_key(discord_server_id,
                                                     discord_user_id)
        if len(rs) > 0:
            # update key
            updateObject = BotUtils.Object()
            updateObject.discord_user_id = discord_user_id
            updateObject.discord_server_id = discord_server_id
            updateObject.key_name = key_name
            updateObject.gw2_acc_name = gw2_acc_name
            updateObject.permissions = permissions
            updateObject.key = api_key
            updateObject.server_name = gw2_server_name
            await gw2KeySql.update_api_key(updateObject)
            msg = "Your API key was **replaced**.\n" \
                  f"Server: `{gw2_server_name}`\n" \
                  f"To get info about your new api key use: `{ctx.prefix}gw2 key info`"
            color = self.bot.gw2_settings["EmbedColor"]
            await BotUtils.send_private_msg(self, ctx, color, msg)
        else:
            # insert key
            insertObject = BotUtils.Object()
            insertObject.discord_user_id = discord_user_id
            insertObject.discord_server_id = discord_server_id
            insertObject.key_name = key_name
            insertObject.gw2_acc_name = gw2_acc_name
            insertObject.permissions = permissions
            insertObject.key = api_key
            insertObject.server_name = gw2_server_name
            await gw2KeySql.insert_api_key(insertObject)
            msg = "Your key was verified and was **added** to your discord account.\n" \
                  f"Server: `{gw2_server_name}`\n" \
                  f"To get info about your api key use: `{ctx.prefix}gw2 key info`"
            color = self.bot.gw2_settings["EmbedColor"]
            await BotUtils.send_private_msg(self, ctx, color, msg)

        # checking if the bot needs to assign gw2 server roles to user
        gw2Roles = Gw2RolesSql(self.bot)
        rs = await gw2Roles.get_gw2_server_role(ctx.message.channel.guild.id,
                                                gw2_server_name.lower())
        if len(rs) > 0:
            new_role = BotUtils.check_server_has_role(self, ctx.guild,
                                                      gw2_server_name.lower())
            if new_role is not None:
                await Gw2Utils.assignGw2GuildRoles(self, ctx,
                                                   ctx.message.author,
                                                   new_role, api_key)
        else:
            await Gw2Utils.removeAllGw2RolesFromUser(self, ctx.message.author)

    elif len(rs) == 1 and rs[0]["discord_user_id"] == discord_user_id:
        msg = "That API key is already registered by you or someone else.\n" \
              f"To get info about your api key use: `{ctx.prefix}gw2 key info`"
        await BotUtils.send_private_error_msg(self, ctx, msg)
    else:
        await BotUtils.send_private_error_msg(
            self, ctx, "That API key is already in use by someone else.")