예제 #1
0
    async def a_sil(self, ctx: commands.Context,
                    member: discord.Member) -> None:
        db_user: DBUser = await DBUser.filter(dc_id=member.id).first()

        if db_user is None:
            embed = MessageEmbed(
                ctx,
                message=
                f'Kaydınız bulunamadı. Sil komutunu kullanmak için kayıt olmanız gerekiyor.'
            )
            await embed.send_error()
            return

        confirmation_embed = ProfileEmbed(
            ctx, db_user,
            "Kayıt silme işlemini onaylıyorsanız ✅, onaylamıyorsanız ❌ emojisine tıklayın."
        )
        confirmed: bool = await confirmation_embed.ask_confirmation()
        if confirmed:
            await self.clear_roles(ctx, db_user)
            await db_user.delete()
            embed = MessageEmbed(ctx,
                                 message=f'Kaydınız başarıyla silinmiştir.')
            await embed.send()
            return
        else:
            cancel_embed = MessageEmbed(ctx, message="İşlem iptal edildi.")
            await cancel_embed.send_error()
예제 #2
0
    async def inaktif_sil(self, ctx: commands.Context, gun: int) -> None:
        inactive_users = await DBUser.filter(inactive=True).all()
        today = datetime.datetime.today()
        limit = datetime.timedelta(days=gun)
        selected_inactive_users = [
            user for user in inactive_users if today - user.last_change > limit
        ]

        embed = MessageEmbed(
            ctx,
            f"{len(inactive_users)} inaktif kullanıcı içeisinden {len(selected_inactive_users)} tanesi silinecek. Devam etmek istiyor musunuz? "
        )
        try:
            confirmed = await embed.ask_confirmation()
        except ConfirmationTimeout:
            embed = MessageEmbed(
                ctx, "Cevap vermediğiniz için işlem iptal edildi.")
            await embed.send_error()
            return

        if confirmed:
            for user in selected_inactive_users:
                await self.clear_roles(ctx, user)
                await user.delete()
            embed = MessageEmbed(
                ctx,
                f"İşlem tamamlandı, {len(selected_inactive_users)} inaktif kullanıcı başarıyla silindi."
            )
            await embed.send()
        else:
            embed = MessageEmbed(ctx, "İşlem iptal edildi.")
            await embed.send()
예제 #3
0
 async def unban(self, ctx: commands.Context,
                 member: discord.Member) -> None:
     banned = await self.config.is_banned(member)
     if not banned:
         embed = MessageEmbed(ctx, "Kullanıcı banlı değil")
         await embed.send_error()
     else:
         await self.config.remove_banned(member)
         embed = MessageEmbed(ctx, "Kullanıcının banı kaldırıldı")
         await embed.send()
예제 #4
0
 async def ban(self, ctx: commands.Context, member: discord.Member) -> None:
     banned = await self.config.is_banned(member)
     if banned:
         embed = MessageEmbed(ctx, "Kullanıcı daha önce banlanmış")
         await embed.send_error()
     else:
         await self.config.add_banned(member)
         db_user = await DBUser.filter(dc_id=member.id).first()
         if db_user is not None:
             await db_user.delete()
         embed = MessageEmbed(ctx, "Kullanıcı banlandı")
         await embed.send()
예제 #5
0
 async def kanal_ekle(self, ctx: commands.Context,
                      channel: discord.TextChannel) -> None:
     allowed = await self.config.is_channel_allowed(channel)
     if allowed:
         error_embed = MessageEmbed(
             ctx,
             "Bu kanal daha önce eklenmiş. *kanal_çıkar* komutu ile kanalı çıkarabilrsiniz."
         )
         await error_embed.send_error()
         return
     else:
         await self.config.add_allowed_channel(channel)
         embed = MessageEmbed(ctx, "Kanal başarıyla eklendi.")
         await embed.send()
예제 #6
0
 async def kanal_cikar(self, ctx: commands.Context,
                       channel: discord.TextChannel) -> None:
     allowed = await self.config.is_channel_allowed(channel)
     if not allowed:
         error_embed = MessageEmbed(
             ctx,
             "Bu kanal daha önce eklenmedi. *kanal_ekle* komutu ile kanalı ekleyebilirsiniz."
         )
         await error_embed.send_error()
         return
     else:
         await self.config.remove_allowed_channel(channel)
         embed = MessageEmbed(ctx, "Kanal başarıyla çıkarıldı.")
         await embed.send()
예제 #7
0
 async def detay(self, ctx: commands.Context,
                 member: discord.Member) -> None:
     db_user: DBUser = await DBUser.filter(dc_id=member.id).first()
     if db_user is None:
         embed = MessageEmbed(ctx, "Aradığınız kullanıcı bulunamadı")
         await embed.send_error()
         return
     else:
         msg = f"{db_user.dc_id=}\n{db_user.dc_nick=}\n{db_user.ubisoft_id=}\n" \
               f"{db_user.uplay_id=}\n{db_user.r6_nick=}\n{db_user.kd=}\n" \
               f"{db_user.level=}\n{db_user.mmr=}\n{db_user.rank=}\n" \
               f"{db_user.rank_short.value=}\n{db_user.last_update=}\n{db_user.last_command=}\n" \
               f"{db_user.last_change=}\n{db_user.platform.value=}\n{db_user.inactive=}\n"
         embed = MessageEmbed(ctx, msg)
         await embed.send()
예제 #8
0
    async def a_kayit(self, ctx: commands.Context, nickname: str,
                      platform: platform_converter,
                      member: discord.Member) -> None:
        db_user: DBUser = await DBUser.filter(dc_id=member.id).first()

        if db_user is not None:
            embed = MessageEmbed(
                ctx,
                message=
                f"Zaten `{db_user.r6_nick}` nickiyle açılmış bir kayıdınız bulunuyor."
            )
            await embed.send_error()
            return

        db_user: DBUser = await DBUser.filter(r6_nick=nickname).first()
        if db_user is not None:
            msg = f"Nick çakışması kayıtlı kullanıcı: {db_user.dc_id} - r6: {db_user.r6_nick}, kayıt olmaya çalışan: {ctx.author.mention}"
            logger.warning(msg)
            await self.log(msg, Color.RED, True)
            embed = MessageEmbed(
                ctx,
                message=
                f"`{db_user.r6_nick}` nickiyle açılmış bir kayıt bulunuyor. **Sizin olmayan nicklerle kayıt olmak yasaktır.** Eğer bu nick size aitse `#ticket` kanalından ticket oluşturunuz."
            )
            await embed.send_error()
            return

        player: Player = await self.stat_provider.get_player(
            nickname, platform)
        db_user = DBUser.create_from_player(ctx, player)

        confirmation_embed = ProfileEmbed(
            ctx,
            db_user,
            message=
            "Yukarıdaki bilgiler size aitse ✅, değilse ❌ emojisine tıklayın.")
        confirmed: bool = await confirmation_embed.ask_confirmation()

        if not confirmed:
            cancel_embed = MessageEmbed(ctx, message="İşlem iptal edildi.")
            await cancel_embed.send_error()
            return

        await self.update_roles(db_user)
        await db_user.save()

        success_embed = ProfileEmbed(ctx, db_user, "Kayıdınız tamamlanmıştır.")
        await success_embed.send()
예제 #9
0
    async def a_profil_error(self, ctx: commands.Context, error):
        if isinstance(error, CommandInvokeError):
            error = error.original
        elif isinstance(error, MissingRequiredArgument) or isinstance(
                error, TooManyArguments):
            error_embed = MessageEmbed(
                ctx,
                "Komutu yazarken yazım yanlışı yaptınız.\n`!r6r profil` yazmanız yeterli."
            )
        else:
            error_embed = MessageEmbed(
                ctx,
                "Beklenmedik bir hata ile karşılaşıldı. Sunucu yetkililerine bildirin."
            )

        await error_embed.send_error()
예제 #10
0
    async def a_guncelle(self, ctx: commands.Context,
                         member: discord.Member) -> None:
        db_user: DBUser = await DBUser.filter(dc_id=member.id).first()
        original_db_user: DBUser = copy.deepcopy(db_user)

        if db_user is None:
            embed = MessageEmbed(
                ctx,
                message=
                f'Kaydınız bulunamadı. Güncellemeden önce kayıt olmanız gerekiyor.'
            )
            await embed.send_error()
            return

        player: Player = await self.stat_provider.get_player(
            db_user.r6_nick, db_user.platform)

        if ctx.author.id == db_user.dc_id:
            db_user.update_from_player(player, True)
        else:
            db_user.update_from_player(player, False)

        await self.update_roles(db_user)
        await db_user.save()

        success_embed = ProfileEmbed(ctx,
                                     db_user,
                                     message="Profiliniz güncellenmiştir.",
                                     old_db_user=original_db_user)
        await success_embed.send()
예제 #11
0
    async def yoket(self, ctx: commands.Context, member_id: int) -> None:
        db_user: DBUser = await DBUser.filter(dc_id=member_id).first()

        if db_user is None:
            embed = MessageEmbed(ctx, message=f'Kayıt bulunamadı.')
            await embed.send_error()
            return
        member_left = False
        try:
            await self.clear_roles(ctx, db_user)
        except:
            member_left = True
        await db_user.delete()

        embed = MessageEmbed(
            ctx,
            message=
            f'Kayıt başarıyla silinmiştir{"(Kullanıcı sunucuyu terketmiş)" if member_left else ""}.'
        )
        await embed.send()
        return
예제 #12
0
    async def rol_ayarla(self, ctx: commands.Context, rol_text: str,
                         rol: discord.Role) -> None:
        try:
            platform: Platform = Platform[rol_text.upper()]
            await self.config.set_platform_role(platform, rol)
            embed = MessageEmbed(ctx, "Platform rolü başarıyla ayarlandı")
            await embed.send()
            return
        except KeyError:
            pass
        try:
            rank: RankShort = RankShort[rol_text.upper()]
            await self.config.set_rank_role(rank, rol)
            embed = MessageEmbed(ctx, "Rank rolü başarıyla ayarlandı")
            await embed.send()
            return
        except KeyError:
            pass

        embed = MessageEmbed(ctx, "Aradığınız rol bulunamadı.")
        await embed.send_error()
예제 #13
0
 async def a_guncelle_error(self, ctx: commands.Context, error):
     if isinstance(error, CommandInvokeError):
         error = error.original
     if isinstance(error, PlayerNotFound):
         error_embed = MessageEmbed(
             ctx,
             f"{error.args[0]} nicki ile kayıtlısınız. Yeni nicknameinizi kullanarak baştan kayıt olun. `!r6r sil` ardından `!r6r kayıt <nickname>` komutu ile bunu yapabilirsiniz."
         )
     elif isinstance(error, MissingRequiredArgument) or isinstance(
             error, TooManyArguments):
         error_embed = MessageEmbed(
             ctx,
             "Komutu yazarken yazım yanlışı yaptınız.\n`!r6r güncelle` yazmanız yeterli"
         )
     elif isinstance(error, ConnectionError):
         error_embed = MessageEmbed(
             ctx,
             "Stat sağlayıcına bağlanırken bir hata oluştu. Lütfen biraz sonra tekrar deneyin. Eğer hata devam ediyorsa sunucu yetkililerine bildirin."
         )
     elif isinstance(error, RateLimitExceeded):
         error_embed = MessageEmbed(
             ctx, "Bot aşırı yük altında, sonra tekrar deneyin.")
     elif isinstance(error, MemberNotFound):
         error_embed = MessageEmbed(
             ctx, "Member bulunamadı. Sunucu yetkililerine bildirin.")
     else:
         error_embed = MessageEmbed(
             ctx,
             "Beklenmedik bir hata ile karşılaşıldı. Daha sonra tekrar deneyin."
         )
     await error_embed.send_error()
예제 #14
0
 async def a_sil_error(self, ctx: commands.Context, error):
     if isinstance(error, CommandInvokeError):
         error = error.original
     if isinstance(error, MemberNotFound):
         error_embed = MessageEmbed(
             ctx, "Member bulunamadı. Sunucu yetkililerine bildirin.")
     elif isinstance(error, ConfirmationTimeout):
         error_embed = MessageEmbed(
             ctx,
             "Uzun süre cevap vermediğiniz için işleminiz iptal edildi.")
     elif isinstance(error, MissingRequiredArgument) or isinstance(
             error, TooManyArguments):
         error_embed = MessageEmbed(
             ctx,
             "Komutu yazarken yazım yanlışı yaptınız.\n`!r6r sil` yazmanız yeterli."
         )
     else:
         error_embed = MessageEmbed(
             ctx,
             "Beklenmedik bir hata ile karşılaşıldı. Sunucu yetkililerine bildirin."
         )
     await error_embed.send_error()
예제 #15
0
 async def r6r_error(self, ctx: commands.Context, error):
     if isinstance(error, ChannelNotAllowed):
         msg = f"{ctx.author}, {ctx.channel} kanalında komut kullanmaya çalıştı"
         logger.info(msg)
         await self.log(msg, Color.RED)
     elif isinstance(error, UserBanned):
         msg = f"{ctx.author}, {ctx.channel} kanalında banlıyken komut kullanmaya çalıştı"
         logger.info(msg)
         error_embed = MessageEmbed(
             ctx,
             "Botu kullanmaktan banlı olduğunuz için bu komutu kullanamassınız."
         )
         await error_embed.send_error()
예제 #16
0
    async def ranklari_sifirla(self, ctx: commands.Context) -> None:
        embed = MessageEmbed(
            ctx,
            "**TÜM KULLANICILARIN RANKLARINI UNRANKED OLARAK DEĞİŞTİRECEKSİN! DEVAM ETMEK İSTİYOR MUSUN?**"
        )
        confirmed = False
        try:
            confirmed = await embed.ask_confirmation()
        except ConfirmationTimeout:
            embed = MessageEmbed(ctx,
                                 "Cevap vermedğiniz için işlem iptal edildi.")
            await embed.send_error()
            return

        if confirmed:
            counter = 0
            all_users = await DBUser.all()
            msg = await ctx.send(f"{counter}/{len(all_users)}")
            for user in all_users:
                user.rank = "Unranked"
                user.rank_short = RankShort.UNRANKED
                try:
                    await self.update_roles(user)
                except MemberNotFound:
                    pass
                await user.save()
                await asyncio.sleep(0.2)
                counter += 1
                if counter % 30 == 0:
                    await msg.edit(content=f"{counter}/{len(all_users)}")

            await msg.edit(content=f"{counter}/{len(all_users)}")

            embed = MessageEmbed(ctx, "İşlem tamamlandı.")
            await embed.send()
        else:
            embed = MessageEmbed(ctx, "İşlem iptal edildi.")
            await embed.send_error()
예제 #17
0
    async def guncelleme_tarihlerini_yay(self, ctx: commands.Context) -> None:
        all_users = await DBUser.all()
        frequency = datetime.timedelta(days=await self.config.get_frequency())
        update_loop_frequency = datetime.timedelta(
            seconds=self.update_loop_frequency)
        today = datetime.datetime.today()

        # Split all users into n parts
        ul = len(all_users)
        n = frequency // update_loop_frequency
        splitted_users = [
            all_users[i:i + ceil(ul / n)] for i in range(0, ul, ceil(ul / n))
        ]

        embed = MessageEmbed(
            ctx,
            f"{ul} adet kullanıcının son güncelleme tarihleri {frequency} boyunca, {update_loop_frequency} aralıklarla dağıtılacak. Devam etmek istiyor musunuz?"
        )
        confirmed = await embed.ask_confirmation()
        if confirmed:
            counter = 0
            msg = await ctx.send(f"{counter}/{ul}")
            for i in range(len(splitted_users)):
                users = splitted_users[i]
                for user in users:
                    user.last_update = today - (update_loop_frequency * i)
                    await user.save()
                    counter += 1
                    if counter % 30 == 0:
                        await msg.edit(content=f"{counter}/{ul}")

            await msg.edit(content=f"{counter}/{ul}")
            embed = MessageEmbed(ctx, "İşlem tamamlandı")
            await embed.send()
        else:
            embed = MessageEmbed(ctx, "İşlem iptal edildi.")
            await embed.send()
예제 #18
0
    async def a_profil(self, ctx: commands.Context,
                       member: discord.Member) -> None:
        db_user: DBUser = await DBUser.filter(dc_id=member.id).first()

        if db_user is None:
            embed = MessageEmbed(
                ctx,
                message=
                f'Kaydınız bulunamadı. Profil komutunu kullanmak için kayıt olmanız gerekiyor.'
            )
            await embed.send_error()
            return

        db_user.last_command = datetime.datetime.today()
        db_user.inactive = False
        await db_user.save()

        success_embed = ProfileEmbed(ctx, db_user)
        await success_embed.send()
예제 #19
0
 async def a_kayit_error(self, ctx: commands.Context, error):
     if isinstance(error, CommandInvokeError):
         error = error.original
     if isinstance(error, PlayerNotFound):
         error_embed = MessageEmbed(
             ctx,
             f"`{error.args[0]}` bulunamadı, doğru yazdığınızdan emin olun."
         )
     elif isinstance(error, MissingRequiredArgument) or isinstance(
             error, TooManyArguments) or isinstance(error, BadArgument):
         error_embed = MessageEmbed(
             ctx,
             "Komutu yazarken yazım yanlışı yaptınız. `!r6r kayıt <nickname>` veya `!r6r kayıt <nickname> <platform>`"
         )
     elif isinstance(error, ConnectionError):
         error_embed = MessageEmbed(
             ctx,
             "Stat sağlayıcına bağlanırken bir hata oluştu. Lütfen biraz sonra tekrar deneyin. Eğer hata devam ediyorsa sunucu yetkililerine bildirin."
         )
     elif isinstance(error, RateLimitExceeded):
         error_embed = MessageEmbed(
             ctx, "Bot aşırı yük altında, sonra tekrar deneyin.")
     elif isinstance(error, ConfirmationTimeout):
         error_embed = MessageEmbed(
             ctx,
             "Uzun süre cevap vermediğiniz için işleminiz iptal edildi.")
     elif isinstance(error, MemberNotFound):
         error_embed = MessageEmbed(
             ctx, "Member bulunamadı. Sunucu yetkililerine bildirin.")
     elif isinstance(error, RoleNotFound):
         error_embed = MessageEmbed(
             ctx, f"Rol ataması yapılamadı. Sunucu yetkililerine bildirin.")
     else:
         error_embed = MessageEmbed(
             ctx,
             "Beklenmedik bir hata ile karşılaşıldı. Daha sonra tekrar deneyin."
         )
     await error_embed.send_error()
예제 #20
0
 async def sklk_ayarla(self, ctx: commands.Context, gun: int) -> None:
     await self.config.set_frequency(gun)
     embed = MessageEmbed(ctx, "Sıklık başarıyla ayarlandı.")
     await embed.send()
예제 #21
0
 async def log_ayarla(self, ctx: commands.Context,
                      channel: discord.TextChannel) -> None:
     await self.config.set_log_channel(channel)
     embed = MessageEmbed(ctx, "Log kanalı başarıyla ayarlandı.")
     await embed.send()