async def rsworld(self, ctx: Context, *, player_name: str): player = rs3clans.Player(player_name) if not player.exists: return await ctx.send(f"Jogador {player_name} não existe.") if not player.clan: return await ctx.send(f"Jogador {player_name} não está em um clã.") world = await grab_world(player.name, player.clan) world_display = "Offline" if (world == "Offline" or not world) else f"**Mundo:** {world}" nb = '\u200B' color = discord.Colour.green() if world == "Offline": color = discord.Colour.dark_red() embed = discord.Embed(title=nb, description=world_display, color=color) url_name = player.name.replace(' ', '%20') url_clan = player.clan.replace(' ', '%20') embed.set_author( name=player.name, icon_url= f"https://secure.runescape.com/m=avatar-rs/{url_name}/chat.png") embed.set_thumbnail( url= f"http://services.runescape.com/m=avatar-rs/l=3/a=869/{url_clan}/clanmotif.png" ) return await ctx.send(embed=embed)
async def clan_user_info(self, ctx: Context, *, username: str): try: player = rs3clans.Player(name=username, runemetrics=True) except ConnectionError: return await ctx.send( f"Houve um erro ao tentar conectar a API da Jagex. Tente novamente mais tarde." ) if not player.exists: return await ctx.send(f"Jogador '{player.name}' não existe.") if not player.clan: return await ctx.send( f"Jogador '{player.name}' não está em um clã.") user_clan = rs3clans.Clan(name=player.clan) member = user_clan.get_member(username) user_clan_exp = member.exp user_rank = member.rank display_username = player.name if self.bot.setting.show_titles: if player.suffix: display_username = f"{player.name} {player.title}" else: display_username = f"{player.title} {player.name}" user_url_name = player.name.replace(" ", "%20") user_url_clan = player.clan.replace(" ", "%20") icon_url = f"https://secure.runescape.com/m=avatar-rs/{user_url_name}/chat.png" runeclan_url = f"https://runeclan.com/user/{user_url_name}" clan_banner_url = f"http://services.runescape.com/m=avatar-rs/l=3/a=869/{user_url_clan}/clanmotif.png" embed_title = "RuneClan" rank_header = "__Rank__" clan_header = "__Clã__" exp_header = "__Exp no Clã__" total_exp_header = "__Exp Total__" private_profile_header = "Indisponível - Perfil Privado" rank_emoji = self.bot.setting.clan_settings[user_rank]['Emoji'] user_rank = self.bot.setting.clan_settings[user_rank]['Translation'] clan_info_embed = discord.Embed( title=embed_title, description="", color=discord.Colour.dark_blue(), url=runeclan_url, ) clan_info_embed.set_author(icon_url=icon_url, name=display_username) clan_info_embed.set_thumbnail(url=clan_banner_url) clan_info_embed.add_field(name=clan_header, value=player.clan) clan_info_embed.add_field(name=rank_header, value=f"{user_rank} {rank_emoji}") clan_info_embed.add_field(name=exp_header, value=f"{user_clan_exp:,}") if player.private_profile: clan_info_embed.add_field(name=total_exp_header, value=private_profile_header, inline=False) else: clan_info_embed.add_field(name=total_exp_header, value=f"{player.exp:,}") return await ctx.send(content=None, embed=clan_info_embed)
async def aplicar_role(self, ctx: commands.Context): if not has_any_role(ctx.author, self.bot.setting.role.get('convidado')): return await ctx.send("Fool! Você não é um Convidado!") def check(message): return message.author == ctx.author await ctx.send( f"{ctx.author.mention}, por favor me diga o seu nome no jogo.") try: ingame_name = await self.bot.wait_for('message', timeout=180.0, check=check) except asyncio.TimeoutError: return await ctx.send( f"{ctx.author.mention}, autenticação Cancelada. Tempo Esgotado." ) await ctx.trigger_typing() player = rs3clans.Player(ingame_name.content) if not player.exists: return await ctx.send( f"{ctx.author.mention}, o jogador '{player.name}' não existe.") elif player.clan != self.bot.setting.clan_name: return await ctx.send( f"{ctx.author.mention}, o jogador '{player.name}' não é um membro do Clã Atlantis." ) return await ctx.send( f"{ctx.author.mention} um <@&{self.bot.setting.role.get('mod')}> ou " f"<@&{self.bot.setting.role.get('admin')}> irá dar seu cargo em breve :)" )
async def amigo_secreto_check_clan(self, ctx: commands.Context): # Só aceitar respostas de quem iniciou o comando def check(message): return message.author == ctx.author with self.bot.db_session() as session: query = session.query(AmigoSecretoPerson).all() for member in query: player = rs3clans.Player(member.ingame_name) if player.clan != 'Atlantis': await ctx.send(f'{member.ingame_name} ({member.discord_name}) não está no clã. Remover? (Y/n)') answer = await self.bot.wait_for('message', timeout=60.0, check=check) if answer.content.lower() == 'y': session.delete(member) session.commit() await ctx.send(f'{member.ingame_name} ({member.discord_name}) removido do Amigo Secreto.') else: await ctx.send(f'{member.ingame_name} ({member.discord_name}) está no Clã.') return await ctx.send('Finalizado.')
async def aplicar_raids(self, ctx: Context): denied_message = "Fool! Você já tem permissão para ir Raids!" if has_any_role(ctx.author, self.bot.setting.role.get('raids')): return await ctx.send(denied_message) user = ctx.get_user() ingame_name = user.ingame_name raids_channel = f"<#{self.bot.setting.chat.get('raids')}>" try: player = rs3clans.Player(ingame_name) except ConnectionError: return await ctx.send( 'Não foi possível acessar a API do Runemetrics no momento, tente novamente mais tarde.' ) if not player.exists: return await ctx.send( f"{ctx.author.mention}, o jogador '{player.name}' não existe.") elif player.clan not in self.bot.setting.clan_names: return await ctx.send( f"{ctx.author.mention}, o jogador '{player.name}' não é um membro do Clã Atlantis." ) elif player.private_profile: return await ctx.send( f"{ctx.author.mention}, seu perfil no Runemetrics está privado, por favor o deixe público " f"e tente aplicar novamente.") emojis = { 'prayer': '<:prayer:499707566012497921>', 'herblore': '<:herblore:499707566272544778>', 'attack': '<:attack:499707565949583391>', 'invention': '<:invention:499707566419607552>', 'inventory': '<:inventory:615747024775675925>', 'full_manual': '<:full_manual:615751745049722880>' } herb_level = player.skill('herblore').level if herb_level < 90: await ctx.send( f"Ei {ctx.author.mention}, vejo aqui que seu nível de {emojis['herblore']} " f"Herbologia é apenas " f"**{herb_level}**. Isso é um pouco baixo!\n" f"**Irei continuar com o processo de aplicação, mas não será possível te dar permissão para " f"participar no momento, aplique novamente quando obter um nível de {emojis['herblore']} " f"Herbologia superior a " f"90**, falta apenas **{5_346_332 - player.skill('herblore').exp:,.0f}** de Exp!" ) elif 96 > herb_level >= 90: await ctx.send( f"Ei {ctx.author.mention}, vejo aqui que seu nível de {emojis['herblore']} " f"Herbologia é **{herb_level}**. " f"Isso é suficiente para fazer Poções de sobrecarregamento (Overloads), mas " f"apenas usando Boosts, caso já não tenha, faça alguns usando o seguinte " f"boost (ou outro como Pulse Cores) <https://rs.wiki/Spicy_stew>" ) prayer_level = player.skill('prayer').level left_to_95 = 8_771_558 - player.skill('prayer').exp if prayer_level < 95: d_bones_price = await self.get_price(536) d_bones_exp = 252 d_bones_till_99 = int(left_to_95 / d_bones_exp) f_bones_price = await self.get_price(18832) frost_bones_exp = 630 f_bones_till_99 = int(left_to_95 / frost_bones_exp) gp_emoji = "<:coins:573305319661240340>" await ctx.send( f"Ei {ctx.author.mention}, vejo aqui que seu nível de {emojis['prayer']} Oração é " f"apenas **{prayer_level}**. Isso é um pouco baixo!\n" f"Mas tudo bem, falta apenas **{int(left_to_95):,.0f}** de Exp para o nível 95. Com esse nível você " f"irá poder usar as segundas melhores Maldições de aumento de dano. Há diversas formas de você " f"alcançar o nível 95. Veja algumas abaixo:\n" f"• {int(left_to_95 / d_bones_exp):,.0f} Ossos de Dragão no Altar de Casa sem nenhum Boost " f"({gp_emoji} {int(d_bones_till_99 * d_bones_price):,.0f})\n" f"• {int(left_to_95 / frost_bones_exp):,.0f} Ossos de Dragão Gelado no Altar de Casa sem nenhum Boost " f"({gp_emoji} {int(f_bones_till_99 * f_bones_price):,.0f})\n") embed = discord.Embed( title="Aplicação para Raids", description= f"Olá! Você aplicou para receber o cargo <@&{self.bot.setting.role.get('raids')}> para " f"participar dos Raids do Clã.", color=discord.Color.blue()) nb_space = '\u200B' embed.set_thumbnail(url="https://i.imgur.com/2HPEdiz.png") embed.add_field( name= f"{nb_space}\nPor favor postar uma ou mais screenshots com os itens abaixo. " f"(pode enviar uma de cada vez)", value= f"• {emojis['attack']} Equipamento (Arma/Armadura/Acessórios/Switches etc.)\n" f"• {emojis['inventory']} Inventário\n" f"• {emojis['invention']} Perks de Arma, Armadura, Escudo e Switches que irá usar\n\n", inline=False) perks_pocketbook = 'https://rspocketbook.com/rs_pocketbook.pdf#page=6' embed.add_field( name=f"{nb_space}\nLinks Úteis", value= f"• {emojis['full_manual']} [Exemplos de Barras de Habilidade](https://imgur.com/a/XKzqyFs)\n" f"• {emojis['invention']} [Melhores Perks e como os obter]({perks_pocketbook})\n" f"• [Exemplo de Aplicação](https://i.imgur.com/CMNzquL.png)\n" f"• Guia de Yakamaru: <#{self.bot.setting.chat.get('guia_yaka')}>\n\n", inline=False) seconds_till_raids = time_till_raids( self.bot.setting.raids_start_date()) raids_diff = datetime.timedelta(seconds=seconds_till_raids) days = raids_diff.days hours = raids_diff.seconds // 3600 minutes = (raids_diff.seconds // 60) % 60 embed.add_field( name=f"{nb_space}\nInformações sobre os Times", value=f"Os times de Raids acontecem a cada 2 Dias.\n**A próxima " f"notificação de Raids será em {days} Dia(s), {hours} Hora(s) e " f"{minutes} Minuto(s)**.\n\nPara participar basta digitar **`in raids`** no canal " f"<#{self.bot.setting.chat.get('raids_chat')}> após a notificação do Bot, e ele irá o colocar " f"no time automaticamente, caso o time já esteja cheio, ele te colocará como substituto até que " f"abra alguma vaga. Caso aconteça, ele irá te notificar.\n\n1 hora após o Bot ter iniciado o time " f"irá começar o Raids no jogo, não chegue atrasado. Mais informações no canal {raids_channel}.", inline=False) await ctx.send( embed=embed, content=f"<@&{self.bot.setting.role.get('pvm_teacher')}>")
async def amigo_secreto(self, ctx: commands.Context): dev = self.bot.get_user(self.bot.setting.developer_id) await dev.send(f'{ctx.author} está se inscrevendo no amigo secreto.') with self.bot.db_session() as session: state = session.query(AmigoSecretoState).first() if not state: state = AmigoSecretoState(activated=False) session.add(state) session.commit() current_state = state.activated if not current_state: return await ctx.send(f"{ctx.author.mention}, o Amigo Secreto do Atlantis ainda não está ativo.") atlantis = self.bot.get_guild(self.bot.setting.server_id) member = atlantis.get_member(ctx.author.id) if not member: return await ctx.send( f"{ctx.author.mention}, é necessário estar no Servidor do Atlantis " f"para participar do Amigo Secreto\nhttps://discord.me/atlantis" ) allowed_roles = ['membro', 'mod_trial', 'mod', 'mod+', 'admin'] allowed_roles = [self.bot.setting.role.get(role) for role in allowed_roles] if not has_any_role(member, *allowed_roles): return await ctx.send( f"{ctx.author.mention}, você precisa ser um Membro do Clã para participar do Amigo Secreto." ) # Só aceitar respostas de quem iniciou o comando def check(message): return message.author == ctx.author await ctx.send(f"{ctx.author.mention}, digite o seu nome in-game.") try: ingame_name_message = await self.bot.wait_for('message', timeout=60.0, check=check) except asyncio.TimeoutError: await ctx.send(f"{ctx.author.mention}, entrada cancelada. Tempo expirado.") return await dev.send(f'{ctx.author}: Inscrição cancelada. Tempo expirado.') try: player = rs3clans.Player(ingame_name_message.content) except ConnectionError: await ctx.send( f"{ctx.author.mention}, erro ao se conectar com a API da Jagex. Tente novamente mais tarde :(" ) return await dev.send(f'{ctx.author}: Inscrição cancelada. Erro na API da Jagex.') if player.clan != 'Atlantis': await ctx.send( f"{ctx.author.mention}, você precisa ser um membro do Clã para participar do Amigo Secreto." ) return await dev.send(f'{ctx.author}: Inscrição cancelada. Não é do clã ({player.name})') with self.bot.db_session() as session: exists = session.query(AmigoSecretoPerson).filter( AmigoSecretoPerson.discord_id == str(ctx.author.id)).first() if exists: session.close() await ctx.send(f"{ctx.author.mention}, você já está cadastrado no Amigo Secreto!") return await dev.send(f'{ctx.author}: Inscrição cancelada. Já está no Amigo Secreto.') session.add(AmigoSecretoPerson( discord_id=str(ctx.author.id), ingame_name=str(player.name), discord_name=str(ctx.author) )) session.commit() await dev.send(f'{ctx.author} foi cadastrado no Amigo Secreto com sucesso ({player.name})') return await ctx.send( f"{ctx.author.mention}, você foi cadastrado no Amigo Secreto do Atlantis com sucesso! :)\n" f"Uma mensagem será enviada pra você no privado do Discord com o nome do seu Amigo Secreto no dia 21/12" )