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 dns(self, ctx, domain: str, typ: str):
     typ = typ.upper()
     try:
         result = dns.resolver.query(domain, typ)
         if typ == "A":
             await ctx.sendEmbed(
                 title="DNS-Info",
                 description=f"DNS-Einträge des Typs A für '{domain}'!",
                 inline=False,
                 fields=[
                     ("IP", ipval.to_text()) for ipval in result
                 ]
             )
         elif typ == "CNAME":
             await ctx.sendEmbed(
                 title="DNS-Info",
                 description=f"DNS-Einträge des Typs CNAME für '{domain}'!",
                 inline=False,
                 fields=[
                     ("CNAME Target", cnameval.target) for cnameval in result
                 ]
             )
         elif typ == "MX":
             await ctx.sendEmbed(
                 title="DNS-Info",
                 description=f"DNS-Einträge des Typs MX für '{domain}'!",
                 inline=False,
                 fields=[
                     ("MX Record", mxdata.exchange) for mxdata in result
                 ]
             )
         else:
             await ctx.sendEmbed(
                 title="DNS-Info",
                 description=f"DNS-Einträge des Typs '{typ}' für '{domain}'!",
                 inline=False,
                 fields=[
                     ("Eintrag", str(data)) for data in result
                 ]
             )
     except dns.resolver.NXDOMAIN:
         raise ErrorMessage(
             f"Die Domain '{domain}' konnte nicht gefunden werden!")
     except dns.resolver.NoAnswer:
         raise ErrorMessage(
             f"Für die Domain '{domain}' konnten keine DNS-Einträge des Typs '{typ}' gefunden werden!")
     except dns.rdatatype.UnknownRdatatype:
         raise ErrorMessage(
             f"Unbekannter DNS-Record Typ: {typ}")
            async def meme(self, ctx, search: str = "windows-xp-error", *args):
                search = " ".join((search, ) + args)
                filenames = list(os.listdir(MEMESPATH))

                result = process.extractOne(search, filenames)
                filename = result[0]

                print("[Music] - Suchergebnis:", search, result)

                if result[1] >= 75:
                    player = PCMVolumeTransformer(
                        FFmpegPCMAudio(source=os.path.join(
                            MEMESPATH, filename),
                                       **FFMPEG_OPTIONS))

                    if ctx.voice_client.is_playing():
                        ctx.voice_client.stop()

                    ctx.voice_client.play(
                        player,
                        after=lambda e: print('[Music] - Fehler: %s' % e)
                        if e else None)
                    await ctx.sendEmbed(title="Memetime!",
                                        fields=[("Meme",
                                                 str(filename).split(".")[0])])
                else:
                    raise ErrorMessage(
                        message=
                        "Es wurden keine mit '{}' übereinstimmende Audiodatei gefunden."
                        .format(search))
 def getProfile(cls, NAME: str):
     r = requests.get(
         'https://api.mojang.com/users/profiles/minecraft/'+NAME)
     if not r.status_code == 204:
         return r.json()
     else:
         raise ErrorMessage(message="Spieler wurde nicht gefunden!")
Exemple #5
0
 async def sendNowPlaying(self, ctx):
     if ctx.voice_client and ctx.voice_client.source:
         if isinstance(ctx.voice_client.source, YouTubePlayer):
             await ctx.voice_client.source.send(
                 ctx, status="Wird aktuell gespielt.")
     else:
         raise ErrorMessage("Aktuell wird nichts abgespielt.")
Exemple #6
0
    async def viergewinnt_duell(self,
                                ctx,
                                user: typing.Union[User, Member],
                                width: int = 7,
                                height: int = 6):
        if not (user == ctx.author or user.bot):
            msg = await ctx.sendEmbed(
                title="Vier Gewinnt",
                color=0x0078D7,
                description=f"Duell gegen {user.mention} wird erstellt...")

            game = await VierGewinntGame.creategame(
                width=width,
                height=height,
                channel_id=str(ctx.channel.id),
                message_id=str(msg.id),
                player_1_id=str(ctx.author.id),
                player_2_id=str(user.id))

            embed = ctx.bot.getEmbed(title=f"Vier Gewinnt (#{game.pk})",
                                     color=0x0078D7,
                                     description=game.get_description())

            await msg.edit(embed=embed)

            for emoji in VIERGEWINNT_NUMBER_EMOJIS[:game.width]:
                await msg.add_reaction(emoji)
        else:
            raise ErrorMessage(
                "Du kannst nicht gegen dich selbst oder Bots spielen... Wenn du einen Bot herausfordern möchtest, benutze bitte `/viergewinnt challenge`!"
            )
Exemple #7
0
 async def voicechannel(self, ctx):
     if ctx.invoked_subcommand is None:
         await ctx.send_help()
     elif await getUserChannelCategory(ctx.guild) is None:
         raise ErrorMessage(
             "Dieses Modul wurde nicht aktiviert! Ein Administrator kann dieses Modul mit `/channelsetup` aktivieren."
         )
Exemple #8
0
 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 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 votekill(self, ctx, member: Member):
     if ctx.author.voice and ctx.author.voice.channel is not None:
         if member.voice and member.voice.channel == ctx.author.voice.channel:
             msg = await ctx.sendEmbed(
                 title=
                 f"[Votekill] '{member.id}' in '{ctx.author.voice.channel.id}'",
                 color=0x0078D7,
                 description=
                 f"Stimme mit {VOTEKILL_EMOJI} ab um dafür zu stimmen, dass {member.mention} aus dem Sprachkanal fliegt! (er kann danach jederzeit wieder beitreten)"
             )
             await msg.add_reaction(VOTEKILL_EMOJI)
         else:
             raise ErrorMessage(
                 "Du musst dich im gleichen Sprachkanal wie der betroffene Benutzer befinden."
             )
     else:
         raise ErrorMessage("Du musst dich in einem Sprachkanal befinden!")
Exemple #11
0
 async def reports_delete(self, ctx, *repids):
     for repid in repids:
         if await ctx.database.deleteReport(repid=repid):
             await ctx.sendEmbed(title=f"Report #{repid} gelöscht!")
         else:
             raise ErrorMessage(
                 f"Report mit der ID {repid} wurde nicht gefunden!")
     return
Exemple #12
0
 def __get_headers(self):
     key = os.environ.get("TRNAPIKEY", None)
     if key is None:
         raise ErrorMessage(
             message=
             "Der Fortnite-Befehl ist leider deaktiviert (nicht konfiguriert)!"
         )
     else:
         return {'TRN-Api-Key': key}
Exemple #13
0
    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 getip(self, ctx, domain:str):
     try:
         ip = socket.gethostbyname(domain)
         await ctx.sendEmbed(
             title="IP-Info",
             description=f"Die IP hinter '{domain}' lautet '{ip}'!",
         )
     except socket.gaierror:
         raise ErrorMessage(f"Die Domain '{domain}' konnte nicht gefunden werden!")
Exemple #15
0
    async def amongus_create(self, ctx):
        if await ctx.database.hasAmongUsGame():
            game = await ctx.database.getAmongUsGame()
            textchannel = ctx.guild.get_channel(int(game.text_channel_id))
            voicechannel = ctx.guild.get_channel(int(game.voice_channel_id))
            if textchannel and voicechannel:
                raise ErrorMessage(
                    message=
                    f"Du hast bereits ein AmongUs-Spiel auf diesem Server! (ID { game.pk } - { textchannel.mention })"
                )
            elif textchannel:
                raise ErrorMessage(
                    message=
                    f"Du hast bereits ein AmongUs-Spiel auf diesem Server, jedoch konnte der Sprachkanal nicht mehr gefunden werden! Versuche dein Game mit `/au delete` zu löschen. (ID { game.pk } - { textchannel.mention })"
                )
            else:
                raise ErrorMessage(
                    message=
                    f"Du hast bereits ein AmongUs-Spiel auf diesem Server, jedoch konnte der Textkanal nicht mehr gefunden werden! (ID { game.pk })"
                )
        else:
            category = await getAmongUsCategory(ctx.guild)
            textchannel = await category.create_text_channel(
                name=f"au-{ctx.author.name}#{ctx.author.discriminator}",
                reason="Benutzer hat AmongUs-Spiel erstellt.",
                topic=
                f"AmongUs Spiel von {ctx.author.name}#{ctx.author.discriminator}"
            )
            voicechannel = await category.create_voice_channel(
                name=f"[AU] - {ctx.author.name}#{ctx.author.discriminator}",
                reason="Benutzer hat AmongUs-Spiel erstellt.")
            game = await ctx.database.createAmongUsGame(
                text_channel_id=str(textchannel.id),
                voice_channel_id=str(voicechannel.id))

            embed = ctx.getEmbed(title=f"AmongUs Spiel erstellt",
                                 description=AMONGUS_TRACKER_INSTALL,
                                 color=0xFEDE29,
                                 fields=[("Url", str(game.get_tracker_url())),
                                         ("ID", str(game.pk)),
                                         ("API-Key", str(game.api_key)),
                                         ("Kanal", str(textchannel.mention))])
            await ctx.author.send(embed=embed)
 async def ensure_voice(self, ctx):
     if ctx.author.voice and ctx.author.voice.channel.guild == ctx.guild:
         if ctx.voice_client is None:
             await ctx.author.voice.channel.connect()
         # elif ctx.voice_client.is_playing():
         # ctx.voice_client.stop()
         await ctx.voice_client.move_to(ctx.author.voice.channel)
     else:
         raise ErrorMessage(
             "Du bist mit keinem Sprachkanal in diesem Server verbunden!")
def morse_encrypt(message):
    message = message.upper().lstrip()
    morsecode = ''
    for letter in message:
        if letter != ' ':
            morsecode += (MORSE_CODE_DICT[letter] if letter in MORSE_CODE_DICT else letter)
        morsecode += ' '

    if not morsecode.strip():
        raise ErrorMessage(message="Der Text ist entweder leer oder enthält nur ungültige Zeichen!")
    return morsecode
Exemple #18
0
 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!")
Exemple #20
0
 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!")
Exemple #22
0
 def getProfiles(cls, UUID: str):
     r = requests.get(
         'https://api.mojang.com/user/profiles/'+str(UUID)+'/names')
     if not r.status_code == 204:
         data = r.json()
         for i in data:
             if "changedToAt" in i:
                 i["changedToAt"] = datetime.datetime.fromtimestamp(
                     int(i["changedToAt"])/1000)
         return data
     else:
         raise ErrorMessage(message="UUID wurde nicht gefunden!")
 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 usersong(self, ctx, member: discord.Member):
     found = False
     for activity in member.activities:
         if str(activity.type) == "ActivityType.listening":
             try:
                 await ctx.sendEmbed(
                     title="Spotify Song",
                     fields=[("Titel", activity.title),
                             ("Künstler", activity.artist),
                             ("Link",
                              ("[Spotify](https://open.spotify.com/track/" +
                               activity.track_id + ")")),
                             ("Benutzer", member.mention)])
             except AttributeError:
                 raise ErrorMessage(
                     message=
                     "Scheinbar hört dieser Benutzer keinen richtigen Song."
                 )
             found = True
     if not found:
         raise ErrorMessage(message="Dieser Benutzer hört keinen Song!")
Exemple #25
0
 def getSkin(cls, UUID: str):
     r = requests.get(
         'https://sessionserver.mojang.com/session/minecraft/profile/'+str(UUID))
     if not r.status_code == 204:
         data = r.json()
         if not "error" in data:
             ppty = data["properties"][0]
             base64_message = ppty["value"]
             base64_bytes = base64_message.encode('ascii')
             message_bytes = base64.b64decode(base64_bytes)
             message = message_bytes.decode('ascii')
             dictmessage = eval(message)
             if not dictmessage["textures"] == {}:
                 skinurl = dictmessage["textures"]["SKIN"]["url"]
                 data["skin"] = skinurl
             else:
                 data["skin"] = None
             data.pop("properties")
             return data
         raise ErrorMessage(
             message="Abfrage für einen Skin kann pro UUID maximal ein Mal pro Minute erfolgen!")
     raise ErrorMessage(message="UUID wurde nicht gefunden!")
 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 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 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.")
Exemple #29
0
    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)])