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"])
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"])
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)
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)
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))
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)
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.")