async def voicechannel_invite(self, ctx, wer: typing.Union[Member, Role]): channel = await self.get_voice_channel(ctx.author) if not channel: raise ErrorMessage(message="Du hast noch keinen Sprachkanal!") await channel.set_permissions( wer, reason="Benuter hat Benutzer/Rolle eingeladen", read_messages=True, connect=True, speak=True) if isinstance(wer, Member): #EMBED = ctx.getEmbed(title="Benutzer zu Sprachkanal eingeladen", fields=[("Server", ctx.guild.name),("Benutzer", wer.mention)]) # await ctx.author.send(embed=EMBED) if not wer.bot: EMBED2 = ctx.getEmbed( title="Du wurdest zu einem Sprachkanal eingeladen", fields=[("Server", ctx.guild.name), ("Von", ctx.author.mention)]) await wer.send(embed=EMBED2) raise SuccessMessage("Benutzer zu Sprachkanal eingeladen", fields=[("Benutzer", wer.mention)]) if isinstance(wer, Role): #EMBED = ctx.getEmbed(title="Rolle zu Sprachkanal eingeladen", fields=[("Server", ctx.guild.name),("Rolle", wer.name)]) # await ctx.author.send(embed=EMBED) await ctx.send("Alle mit der Rolle " + wer.mention + " wurden von " + ctx.author.mention + " zu seinem/ihrem Sprachkanal eingeladen.") raise SuccessMessage("Rolle zu Sprachkanal eingeladen", fields=[("Rolle", wer.name)])
async def reports_delete(self, ctx, *repids: int): successids = [] for repid in repids: if await ctx.database.deleteReport(repid=repid): successids.append(f'#{repid}') if not successids: raise ErrorMessage( f"Report mit der ID {repid} wurde nicht gefunden!") if len(successids) > 1: raise SuccessMessage( f"Reports mit folgenden IDs gelöscht: {successids}") raise SuccessMessage(f"Report #{repid} gelöscht!")
async def kill(self, ctx, member: Member, *args): Grund = " ".join(args) if Grund.rstrip() == "": Grund = "Leer" VoiceState = member.voice if VoiceState: if VoiceState.channel.permissions_for(ctx.author).move_members: if VoiceState.channel.permissions_for( ctx.guild.get_member(self.bot.user.id)).move_members: if ctx.author.roles[-1] >= member.roles[-1]: await member.edit( voice_channel=None, reason="Von Moderator " + ctx.author.name + "#" + ctx.author.discriminator + " angefordert: " + Grund) raise SuccessMessage("Benutzer Getötet", fields=[("Betroffener", member.mention), ("Grund", Grund)]) raise ErrorMessage( message= "Deine Rolle ist nicht höher als oder gleich wie die des Benutzers, den du töten wolltest!" ) raise commands.BotMissingPermissions([]) raise commands.MissingPermissions([]) raise ErrorMessage( message="Der Benutzer befindet sich nicht in einem Sprachkanal.")
async def reports_create(self, ctx, member: Member, *args): Grund = " ".join(args) Grund = Grund if Grund.rstrip(" ") else "Leer" report = await ctx.database.createReport(dc_user=member, reason=Grund) await self.send_report(ctx, report) raise SuccessMessage("Benutzer Gemeldet", fields=[("Betroffener", member.mention), ("Grund", Grund)])
async def viergewinnt_reset(self, ctx, user: typing.Union[User, Member] = None): user = ctx.author if user is None else user if await self.bot.is_owner( user) else ctx.author await ctx.database._listdelete(VierGewinntGame, player_1_id=str(user.id)) raise SuccessMessage( f"Die VierGewinnt Spiele von { user.mention } wurden erfolgreich gelöscht!" )
async def textchannel_open(self, ctx): channel = await self.get_text_channel(ctx) if not channel: raise ErrorMessage(message="Du hast noch keinen Textkanal!") await channel.set_permissions( ctx.guild.default_role, reason="Benuter hat den Kanal für alle Geöffnet", read_messages=True, send_messages=True) raise SuccessMessage( "Der Kanal ist nun für alle auf diesem Server geöffnet!")
async def remote_allowraw(self, ctx, id: int): if not await ctx.database._has(BotPermission, id_1=str(ctx.author.id), id_2=str(id), typ="remote_permission"): await ctx.database._create(BotPermission, id_1=str(ctx.author.id), id_2=str(id), typ="remote_permission") raise SuccessMessage( str(id) + " darf nun Befehle für dich ausführen!") raise ErrorMessage("Diese ID darf bereits Befehle für dich ausführen!")
async def voicechannel_open(self, ctx): channel = await self.get_voice_channel(ctx.author) if not channel: raise ErrorMessage(message="Du hast noch keinen Sprachkanal!") await channel.set_permissions( ctx.guild.default_role, reason="Benuter hat den Kanal für alle geöffnet", read_messages=True, connect=True, speak=True) raise SuccessMessage( "Der Sprachkanal ist nun für alle auf diesem Server geöffnet!")
async def remote_disallowraw(self, ctx, id: int): if await ctx.database._has(BotPermission, id_1=str(ctx.author.id), id_2=str(id), typ="remote_permission"): await ctx.database._listdelete(BotPermission, id_1=str(ctx.author.id), id_2=str(id), typ="remote_permission") raise SuccessMessage( str(id) + " darf nun nicht mehr Befehle für dich ausführen!") raise ErrorMessage("Diese ID steht nicht auf deiner Liste!")
async def remote_disallow(self, ctx, member: typing.Union[Member, User]): if await ctx.database._has(BotPermission, id_1=str(ctx.author.id), id_2=str(member.id), typ="remote_permission"): await ctx.database._listdelete(BotPermission, id_1=str(ctx.author.id), id_2=str(member.id), typ="remote_permission") raise SuccessMessage( member.mention + " darf nun nicht mehr Befehle für dich ausführen!") raise ErrorMessage("Dieser Benutzer steht nicht auf deiner Liste!")
async def remote_allow(self, ctx, member: typing.Union[Member, User]): if not await ctx.database._has(BotPermission, id_1=str(ctx.author.id), id_2=str(member.id), typ="remote_permission"): await ctx.database._create(BotPermission, id_1=str(ctx.author.id), id_2=str(member.id), typ="remote_permission") raise SuccessMessage(member.mention + " darf nun Befehle für dich ausführen!") raise ErrorMessage( "Dieser Benutzer darf bereits Befehle für dich ausführen!")
async def textchannel_delete(self, ctx): channel = await self.get_text_channel(ctx) if channel: await channel.delete(reason="Benutzer hat den Textkanal gelöscht") member = await ctx.database.get_member() member.setSetting("CHANNELS_TEXT_ID", None) await ctx.database._save(member) if not ctx.channel == channel: raise SuccessMessage("Textkanal gelöscht") else: raise ErrorMessage(message="Du hattest gar keinen Textkanal!")
async def ban(self, ctx, member: Member, *args): if not ctx.author.roles[-1] > member.roles[-1]: raise ErrorMessage( message= "Deine Rolle ist nicht höher als die des Benutzers, den du bannen wolltest!" ) Grund = " ".join(args) if Grund.rstrip() == "": Grund = "Leer" await member.ban(reason="Von Moderator " + ctx.author.name + "#" + ctx.author.discriminator + " angefordert: " + Grund) raise SuccessMessage("Benutzer Gebannt", fields=[("Betroffener", member.mention), ("Grund", Grund)])
async def textchannel_invite(self, ctx, wer: typing.Union[Member, Role]): channel = await self.get_text_channel(ctx) if not channel: raise ErrorMessage(message="Du hast noch keinen Textkanal!") await channel.set_permissions( wer, reason="Benuter hat Benutzer/Rolle eingeladen", read_messages=True, send_messages=True) if isinstance(wer, Member): #EMBED = ctx.getEmbed(title="Benutzer zu Textkanal eingeladen", fields=[("Server", ctx.guild.name), ("Benutzer", wer.mention)]) # await ctx.author.send(embed=EMBED) await channel.send(wer.mention + " wurde zu diesem Textkanal hinzugefügt.") raise SuccessMessage("Benutzer zu Textkanal eingeladen", fields=[("Benutzer", wer.mention)]) if isinstance(wer, Role): #EMBED = ctx.getEmbed(title="Rolle zu Textkanal eingeladen", fields=[("Server", ctx.guild.name), ("Rolle", wer.name)]) # await ctx.author.send(embed=EMBED) await channel.send("Alle mit der Rolle " + wer.mention + " wurden zu diesem Textkanal hinzugefügt.") raise SuccessMessage("Rolle zu Textkanal eingeladen", fields=[("Rolle", wer.name)])
async def volume(self, ctx, newvolume: float = None): if not ctx.voice_client.source: raise ErrorMessage( "Der Bot scheint aktuell nichts abzuspielen.") oldvolume = ctx.voice_client.source.volume * 100 if newvolume is None: await ctx.sendEmbed(title="Lautstärke", fields=[("Aktuell", str(oldvolume) + "%")]) else: ctx.voice_client.source.volume = newvolume / 100 raise SuccessMessage("Lautstärke geändert", fields=[("Zuvor", str(oldvolume) + "%"), ("Jetzt", str(newvolume) + "%")])
async def unban(self, ctx, userid: int, *args): Grund = " ".join(args) if Grund.rstrip() == "": Grund = "Leer" user = self.bot.get_user(userid) if user is None: raise ErrorMessage(message="Benutzer wurde nicht gefunden!") try: await ctx.guild.unban(user, reason="Von Moderator " + ctx.author.name + "#" + ctx.author.discriminator + " angefordert: " + Grund) raise SuccessMessage("Benutzer Entbannt", fields=[("Betroffener", user.mention), ("Grund", Grund)]) except DiscordException: raise ErrorMessage(message="Benutzer wurde nicht gefunden!")
async def amongus_reset(self, ctx): if await ctx.database.hasAmongUsGame(): game = await ctx.database.getAmongUsGame() voicechannel = ctx.guild.get_channel(int(game.voice_channel_id)) if voicechannel is None: raise ErrorMessage( message= "Der Sprachkanal zu deinem Spiel wurde nicht gefunden. Versuche dein Spiel mit `/amongus close` zu löschen" ) game.reset() await ctx.database._save(game) await voicechannel.edit(sync_permissions=True) raise SuccessMessage( "Dein AmongUs Spiel wurde erfolgreich zurückgesetzt!") raise ErrorMessage( message="Du hast kein AmongUs-Spiel auf diesem Server!")
async def channelsetup(self, ctx): category = await getUserChannelCategory(ctx.guild) if category: raise ErrorMessage( "Kategorie existiert bereits! Lösche sie zuerst um sie neu aufzusetzen!" ) categoryoverwrites = { ctx.guild.default_role: PermissionOverwrite(read_messages=False, send_messages=False, connect=False, speak=False, move_members=False, use_voice_activation=True) } textchanneloverwrites = { ctx.guild.default_role: PermissionOverwrite(read_messages=True, send_messages=True) } voicechanneloverwrites = { ctx.guild.default_role: PermissionOverwrite(view_channel=True, connect=True, speak=False) } category = await ctx.guild.create_category_channel( name=CATEGORY_NAME, overwrites=categoryoverwrites, reason="Bereite Benutzerkanäle vor...") await category.create_text_channel( name=CHANNEL_NAME_TEXT, overwrites=textchanneloverwrites, reason="Bereite Benutzerkanäle vor...", topic="Hilfe: /help channels") await category.create_voice_channel( name=CHANNEL_NAME_PUBLIC, overwrites=voicechanneloverwrites, reason="Bereite Benutzerkanäle vor...") await category.create_voice_channel( name=CHANNEL_NAME_PRIVATE, overwrites=voicechanneloverwrites, reason="Bereite Benutzerkanäle vor...") raise SuccessMessage( "Die erforderlichen Kanäle wurden erfolgreich erstellt!")
async def voicechannel_create(self, ctx): category = await getUserChannelCategory(ctx.guild) channel = await self.get_voice_channel(ctx.author, category) if channel: if ctx.author.voice: await ctx.author.edit(voice_channel=channel, reason="Benutzer hat den Kanal erstellt") raise ErrorMessage(message="Du hast bereits einen Sprachkanal!") overwrites = { ctx.guild.default_role: PERM_VOICE_PRIVATE, ctx.author: PERM_VOICE_OWNER } newchannel = await category.create_voice_channel( name=(ctx.author.name.lower() + "#" + ctx.author.discriminator), overwrites=overwrites, reason="Benutzer hat den Sprachkanal erstellt") if ctx.author.voice: await ctx.author.edit( voice_channel=newchannel, reason="Benutzer hat den Sprachkanal erstellt") raise SuccessMessage("Sprachkanal erstellt!")
async def movehere(self, ctx, member: Member): if member.voice: if ctx.author.voice: if member.voice.channel.permissions_for( ctx.author).move_members: if member.voice.channel.permissions_for( ctx.guild.get_member( self.bot.user.id)).move_members: await member.edit( voice_channel=ctx.author.voice.channel, reason="Von Moderator " + ctx.author.name + "#" + ctx.author.discriminator + " angefordert.") raise SuccessMessage( "Hierhin bewegt", fields=[("Betroffener", member.mention), ("Kanal", ctx.author.voice.channel.name)]) raise commands.BotMissingPermissions([]) raise commands.MissingPermissions([]) raise ErrorMessage( message="Du befindest sich nicht in einem Sprachkanal.") raise ErrorMessage( message="Der Benutzer befindet sich nicht in einem Sprachkanal.")
async def stop(self, ctx): if ctx.voice_client: await ctx.voice_client.disconnect() raise SuccessMessage("Bye bye!") raise ErrorMessage("Der Bot war in gar keinem Sprachkanal!")
async def voicechannel_delete(self, ctx): channel = await self.get_voice_channel(ctx.author) if channel: await channel.delete(reason="Vom Benutzer gelöscht") raise SuccessMessage("Sprachkanal gelöscht!") raise ErrorMessage(message="Du hattest gar keinen Sprachkanal!")