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()
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()
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()
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()
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()
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()
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()
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()
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()
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()
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
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()
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()
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()
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()
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()
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()
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()
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()
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()
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()