import discord import asyncio import time import datetime import random import os from os import system from os import environ from discord.ext import commands def left(s, amount): return s[:amount] def right(s, amount): return s[-amount:] def mid(s, offset, amount): return s[offset:offset+amount] token = os.environ['TOKEN'] client = discord.Client() bot = commands.Bot(command_prefix='!') def permission(message): if client.get_guild(261575556708040705).get_role(261603488331595776) in message.author.roles: return True def member(message): if client.get_guild(261575556708040705).get_role(261603747711418371) in message.author.roles: return True emojinumbers = ["0\u20E3", "1\u20E3" , "2\u20E3" , "3\u20E3" , "4\u20E3" , "5\u20E3" , "6\u20E3" , "7\u20E3" , "8\u20E3" , "9\u20E3"] @client.event async def on_ready(): print("Bot ready on Version %s..." % discord.__version__) @client.event async def on_message(message): if message.content.startswith("!yesno"): await message.delete() await message.channel.send(content="Sorry das geht so nicht. Der Befehl hat sich geändert in !vote... für mehr Informationen schreib bitte !help oder frage deinen Admin oder Apotheker. Liebste Grüße, SecondBot <3", delete_after=20.0) if message.content == "!help": if message.channel == message.author.dm_channel: await message.author.dm_channel.send("Sorry das geht so nicht. Bitte schreibe diese Nachricht in einen Channel auf dem SecondHemd Discord, sonst kann ich nicht sehen was du für Berechtigungen hast. Vielen Dank.") else: await message.delete() if member(message): if permission(message): admin_text = "\n\n!add = Hinzufügen einer Rolle mit Textchannel und hinzufügen von Usern zur Rolle\nNutzung: !add \"\" \n\n!labor = bringt dich ins Labor :)\nNutzung: !labor\n\n!start = Starte ne Runde PnP\nNutzung: !start @Rolle\n\n!stop = Beende die gestartete Runde PnP\nNutzung: !stop\n\n!purge = Löschen von Nachrichten\nNutzung: !purge all||x minutes/hours/days/weeks\n\n!prune - kickt Member ohne Rolle, die 30 Tage nicht online waren\nNutzung: !prune" else: admin_text = "" em = discord.Embed(title="Hilfe",description="!survey = Umfrage mit mehreren Antwortmöglichkeiten\nNutzung: !survey | | ...\n\n!vote = Ja/Nein Umfrage\nNutzung: !vote \n\n!love = zeige einem User Liebe\nNutzung: !love <@User1> <@User2> ...\n\n!roll = Rolle einen oder mehrere Würfel\nNutzung: !roll W (z.B. !roll W20 oder !roll 10W6)%s" % admin_text, colour=0x00FF00) if message.author.dm_channel == None: await message.author.create_dm() await message.author.dm_channel.send(embed=em) else: if message.author.dm_channel == None: await message.author.create_dm() await message.author.dm_channel.send("Sorry, du hast leider nicht die nötigen Berechtigungen. :(") if message.content.startswith("!survey ") and member(message): if message.content == "!survey": error_message = await message.channel.send("Nutzung: !survey | | ...") await message.delete() await asyncio.sleep(15) await error_message.delete() else: answers_raw = right(message.content, len(message.content)-8) answers = answers_raw.split("|") question = answers[0] answers.remove(question) desc = "" z = 1 for y in answers: desc = desc + emojinumbers[z] + " - " + y + "\n" z = z + 1 em = discord.Embed(title=question, description=desc, colour=0x00E0FF) em.set_author(name=message.author.display_name, url=discord.Embed.Empty, icon_url=message.author.avatar_url) ask_msg = await message.channel.send(embed=em) a = 0 for x in emojinumbers: if a < z and a != 0: await ask_msg.add_reaction(x) a = a + 1 await message.delete() if message.content.startswith("!surveyedit") and member(message): if message.content == "!surveyedit": await message.delete() await message.channel.send(content="Nutzung: !surveyedit ID | | | ...", delete_after=15.0) else: await message.delete() answers_raw = right(message.content, len(message.content)-12) answers = answers_raw.split("|") survey_id = answers[0] question = answers[1] answers.remove(survey_id) answers.remove(question) desc = "" z = 1 for y in answers: desc = desc + emojinumbers[z] + " - " + y + "\n" z = z + 1 em = discord.Embed(title=question, description=desc, colour=0x00E0FF) em.set_author(name=message.author.display_name, url=discord.Embed.Empty, icon_url=message.author.avatar_url) survey_msg = await message.channel.fetch_message((int(survey_id))) await survey_msg.edit(embed=em) #---------------------------------------------------------------------------------------- if message.content.startswith("!vote") and member(message): if message.content == "!vote": error_message = await message.channel.send("Nutzung: !vote ") await message.delete() await asyncio.sleep(10) await error_message.delete() else: em = discord.Embed(description=str(right(message.content,len(message.content)-6)), colour=0x00E0FF) em.set_author(name=message.author.display_name, url=discord.Embed.Empty, icon_url=message.author.avatar_url) ask_msg = await message.channel.send( embed=em) for x in ["✅", "❔", "❌"]: await ask_msg.add_reaction(x) await message.delete() if message.content.startswith("!say") and permission(message): em = discord.Embed(description=str(right(message.content,len(message.content)-5)), colour=0x00E0FF) await message.channel.send(embed=em) await message.delete() if message.content.startswith("!ttt") and permission(message): if message.content == ("!ttt"): error_message = await message.channel.send( "Syntax: !ttt | | <description>") await asyncio.sleep(10) await message.delete() await error_message.delete() else: ttt_raw = right(message.content, len(message.content)-5) content = ttt_raw.split("|") ttt_url = content[0] ttt_title = content[1] ttt_description = content[2] em = discord.Embed(description=ttt_description,title=ttt_title,url=ttt_url,colour=0x00E0FF) ask_msg = await message.channel.send( embed=em) for x in ["✅", "❌"]: await ask_msg.add_reaction(x) await message.delete() #move Bot if message.content.startswith("!start") and permission(message): if message.content == ("!start"): error_message = await message.channel.send( "Nutzung: !start @Rolle") await asyncio.sleep(6) await message.delete() await error_message.delete() else: role_id = message.content.split(" ")[1] role_id = right(left(role_id, len(role_id)-1), len(role_id) - 4) await message.delete() for r in message.author.roles: if str(r.id) == role_id: role = r em = discord.Embed(description='gespieltes PnP: %s\nTeilnehmer (zum Start):' % role.mention, colour=0x00770d) move_member = [] for c in message.guild.channels: if str(c.type) == "voice": for m in c.members: if role in m.roles: move_member.append(m) for m in move_member: await m.move_to(client.get_channel(435869507123281920)) em.add_field(name=":white_check_mark: " + m.display_name, value = m.mention + "ist am Start! Juhu!", inline=False) start_msg = await client.get_channel(435501602485305345).send(content=":game_die: **INFO: PnP Sitzung gestartet!**",embed=em) text_file = open("start_id.txt", "w") text_file.write(str(start_msg.id)) text_file.close() if message.content == "!stop" and permission(message): text_file = open("start_id.txt", "r") start_id = text_file.read() text_file.close() start_msg = await message.channel.fetch_message(start_id) now_time = datetime.datetime.utcnow().replace(microsecond=0) then_time = start_msg.created_at.replace(microsecond=0) dauer = str(now_time - then_time) for m in client.get_channel(435869507123281920).members: await m.move_to(client.get_channel(801869864745697280)) await message.delete() await start_msg.edit(content=":game_die: **INFO: PnP Sitzung beendet!** Dauer: %s" % dauer) if message.content == "!labor" and permission(message): await message.author.move_to(client.get_channel(765601577334865972)) await message.delete() if message.content.startswith("!add") and permission(message): if message.content == "!add": explain_msg = await message.channel.send("Nutzung: !add \"<Rolle>\" <User Mentions>") await message.delete() await asyncio.sleep(10) await explain_msg.delete() else: try: role_name = message.content.split("\"")[1] text_name = role_name.lower().replace(" ", "-") role = await message.guild.create_role(name=role_name, mentionable=True) overwrites = { message.guild.default_role: discord.PermissionOverwrite(read_messages=False), role: discord.PermissionOverwrite(read_messages=True) } channel = await message.guild.create_text_channel(text_name, overwrites=overwrites, topic="Dieser Channel wurde von SecondBot erstellt.") for user in message.mentions: await user.add_roles(role) await message.delete() em = discord.Embed(title=':loudspeaker: Ein neuer Channel für %s!' % role_name, description='Herzlich Willkommen! Es gibt nun eine neue Gruppe %s und diesen wunderbaren Channel hier! Der Channel ist nur für euch und die Admins sichtbar.' % role.mention, colour=0xffa500) await channel.send(embed=em) except Exception as e: em = discord.Embed(title="Error Code", description=e, color=0xff0000) error_message = await message.channel.send(content="Das hat nicht funktioniert. Syntax: !add \"<Rolle>\" <User Mentions>", embed=em) await message.delete() await asyncio.sleep(15) await error_message.delete() if message.content.startswith("!purge") and permission(message): await message.delete() if message.content == "!purge": await message.channel.send(content="Nutzung: !purge all|<Anzahl>|x minutes/hours/days/weeks", delete_after=10.0) else: by_limit = False by_time = False try: if message.content.split(" ")[2] == "minutes": by_time = True delta = datetime.timedelta(minutes=int(message.content.split(" ")[1])) if message.content.split(" ")[2] == "hours": by_time = True delta = datetime.timedelta(hours=int(message.content.split(" ")[1])) if message.content.split(" ")[2] == "days": by_time = True delta = datetime.timedelta(days=int(message.content.split(" ")[1])) if message.content.split(" ")[2] == "weeks": by_time = True delta = datetime.timedelta(weeks=int(message.content.split(" ")[1])) except IndexError: try: if message.content.split(" ")[1] == "all": by_limit = True limit = None else: by_limit = True limit = int(message.content.split(" ")[1]) except: print("List error, ploz ignore") except: print("List error, ploz ignore") if by_time: after_time = datetime.datetime.utcnow() - delta question = await message.channel.send("Would you really like to delete all messages of the last {} {}?".format(message.content.split(" ")[1], message.content.split(" ")[2])) def check(reaction, user): return user == message.author and str(reaction.emoji) == "✅" await question.add_reaction("✅") try: reaction, user = await client.wait_for("reaction_add", timeout=60.0, check=check) except asyncio.TimeoutError: await question.delete() else: await question.delete() deleted = await message.channel.purge(limit=200, after=after_time) await message.channel.send(content='Ich habe {} Nachrichten gelöscht.'.format(len(deleted)), delete_after=5.0) if by_limit: if limit == None: count = "alle" else: count = str(limit) question = await message.channel.send("Sollen wirklich {} Nachrichten gelöscht werden?".format(count)) def check(reaction, user): return user == message.author and str(reaction.emoji) == "✅" await question.add_reaction("✅") try: reaction, user = await client.wait_for("reaction_add", timeout=60.0, check=check) except asyncio.TimeoutError: await question.delete() else: await question.delete() deleted = await message.channel.purge(limit=limit) await message.channel.send(content='Ich habe {} Nachrichten gelöscht.'.format(len(deleted)), delete_after=5.0) if message.content.startswith("!love") and member(message): await message.delete() for user in message.mentions: if user.dm_channel == None: await user.create_dm() await user.dm_channel.send("❤️") if message.content.endswith("!?") and member(message): for x in ["✅", "❌"]: await message.add_reaction(x) if message.content.startswith("!prune") and permission(message): await message.delete() count = await message.guild.estimate_pruned_members(days=30) question = await message.channel.send("Sollen wirklich {} Leichen gekickt werden?".format(count)) def check(reaction, user): return user == message.author and str(reaction.emoji) == "✅" await question.add_reaction("✅") try: reaction, user = await client.wait_for("reaction_add", timeout=60.0, check=check) except asyncio.TimeoutError: await question.delete() else: await question.delete() deleted = await message.guild.prune_members(days=30) await message.channel.send(content='Ich habe {} Leichen beseitigt.'.format(deleted), delete_after=5.0) if message.content.startswith("!roll") and member(message): if message.content == "!roll": await message.delete() await message.channel.send(content="Nutzung: !roll <anzahl_optional>W<seitenzahl> (z.B. !roll W20 oder !roll 10W6)", delete_after=10.0) else: rollt = 0 rolle = " " roll = message.content.split(" ")[1].lower() if "d" in roll: rolls = "d" if "w" in roll: rolls = "w" rollc = roll.split(rolls)[0] if rollc == "": rollc = 1 else: rollc = int(rollc) rolld = int(roll.split(rolls)[1]) for x in range(rollc): rollo = random.randint(1, rolld) rollt = rollt + rollo rolle = rolle + " :game_die: " + str(rollo) + " " if rollc > 1: rolltotal = "Total: " + str(rollt) else: rolltotal = "" if rollc > 12: rolltotal = rolle + "\n" + rolltotal rolle = "" em = discord.Embed(title=rolle, description=rolltotal, colour=0x009933) await message.channel.send(embed=em) if message.content.startswith("!rr") and permission(message): if message.content == "!rr": await message.delete() await message.channel.send(content="Nutzung: !rr Titel | @Vortragender", delete_after=10.0) else: rrdata = right(message.content, len(message.content)-4).split(" | ") rrdate = datetime.date.today() while rrdate.weekday() != 3: rrdate += datetime.timedelta(1) rrdesc = "Thema: **" + rrdata[0] + "**\nVortragender: " + rrdata[1] + "\nDatum: " + datetime.date.strftime(rrdate, "%d.%m.%Y") + " 21 Uhr\n\n*Raffinierte Referate ist ein Projekt von SecondHemd, bei dem ein Freiwilliger etwa 15 Minuten zu einem Thema seiner Wahl einen Vortrag hält. Anschließend findet eine Frage- und Diskussionsrunde statt. Jeder ist herzlich eingeladen zuzuhören.*\n*JEDEN DONNERSTAG AUF DIESEM DISCORD!*" em = discord.Embed(title="Raffinierte Referate", description=rrdesc, colour=0xffa500) await message.guild.get_channel(837747488651608080).send(content="📣 " + message.guild.get_role(261603747711418371).mention + " " + message.guild.get_role(518420868221763584).mention, embed=em) await message.delete() if message.content.startswith("!remind") and permission(message): await message.guild.get_channel(837747488651608080).send(content="📣 Heute 21 Uhr findet ein Referat statt! Jeder kann zuhören! " + message.guild.get_role(261603747711418371).mention + " " + message.guild.get_role(518420868221763584).mention) #Shiba Bilder vom Shiba Discord auf den SH Discord hauen if message.channel.id == 549177598916296723: if not message.is_system() and len(message.attachments) > 0: for a in message.attachments: await client.get_channel(775390209793064980).send(content=a.url) if message.content.startswith("!print") and permission(message): print(message.content) await message.delete() ''' if message.content == "!shiba": await message.delete() async for x in client.get_channel(549177598916296723).history(limit=1000, oldest_first=True): if not x.is_system() and len(x.attachments) > 0: for a in x.attachments: await message.channel.send(content=a.url) ''' client.run(token)