示例#1
0
    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)
示例#2
0
    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)
示例#3
0
    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 :)"
        )
示例#4
0
    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.')
示例#5
0
    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')}>")
示例#6
0
    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"
        )