Created
July 11, 2020 08:17
-
-
Save Cardistymo/40876a08fdcc5dfd892a4c9c08945cc5 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import discord | |
import mysql.connector | |
import os | |
import datetime | |
import math | |
from datetime import datetime | |
from datetime import date | |
from datetime import timedelta | |
import random | |
from discord.ext import tasks | |
from discord.utils import get | |
import pytz | |
client = discord.Client() | |
connector = mysql.connector | |
footer = 'Dev by Cardistymo | Laureline' | |
# emojis: | |
mute = '🔇' | |
entmute = '🔉' | |
kick = '🚫' | |
bann = '⛔' | |
info_emoji = 'ℹ️' | |
up_pfeil = '⬆️' | |
down_pfeil = '⬇️' | |
annehmen = '✅' | |
ablehnen = '❌' | |
moddingQuestEmoji = '🛠️' | |
# server: | |
ID_server = 725659612224684043 | |
# channels: | |
loggingChannelID = 727531947466948710 | |
informationChannelID = 702486261247639603 | |
moddingChannelID = 705917922014396417 | |
botCommandsID = 731176361670082630 | |
# categorys | |
openTicketCategoryID = 730450366117707826 | |
closedTicketCategoryID = 730450241580433509 | |
# rolle | |
adminRoleName = 'Admin' | |
moddingRoleID = 730455891018776668 | |
# colors: | |
Farbe = 0x1E7AEB | |
red_color = 0xff0000 | |
green_color = 0x078a18 | |
orange_color = 0x8a4407 | |
gray_color = 0x666666 | |
# other: | |
dbname = 'wasdModdingUser' | |
leaderboard_emojis = [':first_place:', ':second_place:', ':third_place:', ':four:', ':five:', ':six:', ':seven:', | |
':eight:', ':nine:', ':keycap_ten:'] | |
moddingInfoMessageID = 730458104042356827 | |
moddingInfoMessage = """Herzlich Willkommen {0} | |
Dieses ist dein persönliches Ticket zum Erlangen der Rolle Modding. | |
Bitte teile uns in diesem zugriffbeschränkten Kanal in den nächsten 24 Std folgendes über dich mit: | |
- für welches Spiel werden Zusatzinhalte, also Modifikationen, erstellt, | |
- sind die Projekte öffentlich oder lediglich privat, | |
- welche Links und/oder Bilder liegen vor? | |
- Gehörst du einem Modding-Team an? | |
Dateien können bis zu 8 MB bzw. 100 MB für Nitro Benutzer direkt hier hochgeladen werden, ansonsten ist ein Link zu der entsprechenden Modifikation erwünscht; dort sollte auch die Urheberschaft hervorgehen. | |
Abschließend bitten wir um Geduld. | |
Über den Erhalt der Rolle wird schnellstmöglich entschieden.""" | |
joinMessage = '''Wir wünschen viel Spaß und ein verständiges Miteinander. | |
Unsere Server-Regeln und generelle Inmformationen findest du hier: <#''' + str(informationChannelID) + '''> | |
Bitte zu Beginn durchlesen und daran halten. | |
**Du bist Modder oder gar in einem Modding-Team?** | |
Wir bieten selbstverständlich eine Modding-Rolle am Server an. | |
Weitere Informationen diesbezüglich sind in dem Kanal <#''' + str(moddingChannelID) + '''> auffindbar. | |
Liebe Grüße und viel Spaß, | |
die Server-Leitung''' | |
# links: | |
# https://github.com/Cardistymo/wasd-modding/blob/master/discord_bot.py | |
# https://dashboard.heroku.com/apps/wasd-modding/logs | |
# https://mcsqladmin.horlboge.de/ | |
@client.event | |
async def on_ready(): | |
print("Eingeloggt als user {0.user}".format(client)) | |
await client.change_presence(activity=discord.Game("Dev by Cardistymo | Laureline"), status=discord.Status.online) | |
execute( | |
'CREATE TABLE IF NOT EXISTS ' + dbname + '(ID INTEGER PRIMARY KEY, name TEXT, coins BIGINT, xp BIGINT, mute BOOLEAN, tickets INT, level INT, coinboost TEXT, lastmessage TEXT, messages BIGINT, wheel TEXT)') | |
execute( | |
'CREATE TABLE IF NOT EXISTS wasdInvites(ID BIGINT PRIMARY KEY, userid BIGINT, name TEXT, message TEXT, time TEXT, reaction INT, closed BOOLEAN)') | |
execute('CREATE TABLE IF NOT EXISTS wasdLeaderboard(ID BIGINT PRIMARY KEY, page BIGINT)') | |
@client.event | |
async def on_reaction_add(reaction, user): | |
target = None | |
message = reaction.message | |
if user.bot: | |
return | |
id = reaction.message.id | |
# --Invites--# | |
if is_invite(id): | |
target = client.get_user(int(invite_get_userid(id))) | |
tag_target = target.discriminator | |
if str(reaction.emoji) == entmute: | |
set_mute(tag_target, False) | |
unmuteembed = discord.Embed( | |
description=':white_check_mark: {0} wurde von {1} entmutet.'.format(target.mention, user.mention), | |
colour=green_color) | |
await client.get_channel(loggingChannelID).send(embed=unmuteembed) | |
invite_set_reaction(id, 1) | |
elif str(reaction.emoji) == bann: | |
await user.guild.ban(target, reason='Du hast einen Discord-Invite gepostet!') | |
bannedembed = discord.Embed( | |
description=':white_check_mark: {0} wurde von {1} gebannt.'.format(target.mention, user.mention), | |
colour=red_color) | |
await client.get_channel(loggingChannelID).send(embed=bannedembed) | |
invite_set_reaction(id, 2) | |
elif str(reaction.emoji) == kick: | |
await user.guild.kick(target, reason='Du hast einen Discord-Invite gepostet!') | |
kickedembed = discord.Embed( | |
description=':white_check_mark: {0} wurde von {1} gekickt.'.format(target.mention, user.mention), | |
colour=orange_color) | |
await client.get_channel(loggingChannelID).send(embed=kickedembed) | |
invite_set_reaction(id, 3) | |
invite_set_closed(id, True) | |
# --LeaderBoard--# | |
elif is_leaderboard(id): | |
if str(reaction.emoji) == up_pfeil: | |
results = get_execute('SELECT * from ' + dbname + ' ORDER BY coins DESC') | |
users = [] | |
for user in results: | |
tag_target = user[0] | |
target = None | |
for member in message.guild.members: | |
if not member.bot: | |
tag2 = member.discriminator | |
if int(tag2) == int(tag_target): | |
target = member | |
if target != None: | |
users.append(target) | |
if round(len(users) / 10 + 0.49) < get_page(id) - 1: | |
rangliste = '\nDie Top Liste aller User' | |
j = int(get_page(id) - 1 * 10) - 11 | |
users = users[j:j + 10] | |
if len(users) >= 10: | |
maximal = 10 | |
else: | |
maximal = len(users) | |
for user in users: | |
rangliste = rangliste + "\n`" + str(j) + ".)` " + user.mention | |
rangliste = rangliste + " - Coins: " + str(get_coins(user.discriminator)) | |
j += 1 | |
leaderboard = discord.Embed(title='Leaderbaord', description=rangliste, color=Farbe) | |
seite_footer = "Seite 1 von " + str(round(len(users) / 10 + 0.49)) | |
leaderboard.set_footer(text=seite_footer) | |
set_page(id, get_page(id) + 1) | |
await message.edit(embed=leaderboard) | |
await message.remove_reaction(up_pfeil, user) | |
elif str(reaction.emoji) == down_pfeil: | |
results = get_execute('SELECT * from ' + dbname + ' ORDER BY coins DESC') | |
users = [] | |
for user in results: | |
tag_target = user[0] | |
target = None | |
for member in message.guild.members: | |
if not member.bot: | |
tag2 = member.discriminator | |
if int(tag2) == int(tag_target): | |
target = member | |
if target != None: | |
users.append(target) | |
if round(len(users) / 10 + 0.49) < get_page(id) + 1: | |
rangliste = '\nDie Top Liste aller User' | |
j = int(get_page(id) + 1 * 10) - 11 | |
users = users[j:j + 10] | |
if len(users) >= 10: | |
maximal = 10 | |
else: | |
maximal = len(users) | |
for user in users: | |
rangliste = rangliste + "\n`" + str(j) + ".)` " + user.mention | |
rangliste = rangliste + " - Coins: " + str(get_coins(user.discriminator)) | |
j += 1 | |
leaderboard = discord.Embed(title='Leaderbaord', description=rangliste, color=Farbe) | |
seite_footer = "Seite 1 von " + str(round(len(users) / 10 + 0.49)) | |
leaderboard.set_footer(text=seite_footer) | |
set_page(id, get_page(id) + 1) | |
leaderboard = discord.Embed(title='Leaderbaord', description=rangliste, color=Farbe) | |
await message.edit(embed=leaderboard) | |
await message.remove_reaction(down_pfeil, user) | |
@client.event | |
async def on_message(message): | |
author = message.author | |
tag = author.discriminator | |
if message.author.bot: | |
return | |
# --Registermembers--# | |
elif message.content.startswith("!registermembers"): | |
if message.author.id == 608646306084159508: | |
add_all_members(message) | |
embed = discord.Embed(description='Alle User wurden erfolgreich registriert!', colour=green_color) | |
await message.channel.send(embed=embed) | |
else: | |
pass | |
# --Mutes--# | |
elif is_mute(tag): | |
await message.delete() | |
# --Invites--# | |
elif 'discord.gg/' in message.content: | |
logging = client.get_channel(loggingChannelID) | |
now = message.created_at | |
now = now.astimezone(pytz.timezone("Europe/Berlin")) | |
zeit = now.strftime("`%d.%m.%Y um %H:%M Uhr`") | |
await message.delete() | |
mute = discord.Embed(title="**Ein User wurde gemutet**", description='', colour=gray_color) | |
mute.add_field(name='__User:__', value=author.mention, inline=False) | |
mute.add_field(name='__Grund:__', value='`Versenden von Discord-invites`', inline=False) | |
mute.add_field(name='__Zeit:__', value=str(zeit), inline=False) | |
mute.add_field(name='__Channel:__', value=message.channel.mention, inline=False) | |
mute.add_field(name='__Nachricht:__', value=message.content, inline=False) | |
# mute = discord.Embed(title="**Ein User wurde gemutet**", description='__User:__ <@' + str(author) + '> \n__Grund:__ `Versenden von Discord-invites` \n__Zeit:__ `' + str(zeit) + '` \n__Channel:__ <#' + str(message.channel.id) + '> \n \n__Nachricht:__ ' + str(message.content) + '\n', colour = Farbe) | |
nachricht = await logging.send(embed=mute) | |
set_mute(tag, True) | |
insert_new_invite(message, nachricht) | |
await nachricht.add_reaction(entmute) | |
await nachricht.add_reaction(kick) | |
await nachricht.add_reaction(bann) | |
# --Casino--# | |
elif message.content.startswith("!casino"): | |
args = message.content.split(' ') | |
if len(args) == 2: | |
einsatz = args[1] | |
if einsatz.isdigit(): | |
einsatz = int(einsatz) | |
if einsatz > 50: | |
await message.channel.send(get_casino_syntax()) | |
elif einsatz > int(get_coins(tag)): | |
embed = discord.Embed( | |
description='Du hast nur {0} Coins. Mehr Kannst du nicht setzen.'.format(get_coins(tag)), | |
colour=red_color) | |
await message.channel.send(embed=embed) | |
else: | |
wert = random.randint(1, 100) | |
if wert <= 50: | |
# lose all | |
set_coins(tag, int(get_coins(tag) - einsatz)) | |
embed = discord.Embed( | |
description='{0} du hast leider deinen Einsatz verloren.'.format(author.mention), | |
colour=red_color) | |
await message.channel.send(embed=embed) | |
elif wert <= 75: | |
# +10 | |
set_coins(tag, int(get_coins(tag) + 10)) | |
embed = discord.Embed(description='{0} du hast 10 Coins dazubekommen!'.format(author.mention), | |
colour=Farbe) | |
await message.channel.send(embed=embed) | |
elif wert <= 95: | |
# *2 | |
set_coins(tag, int(get_coins(tag) + (einsatz * 2))) | |
embed = discord.Embed(description='{0} dein Einsatz wurde verdoppelt!'.format(author.mention), | |
colour=Farbe) | |
await message.channel.send(embed=embed) | |
elif wert <= 100: | |
# *5 | |
set_coins(tag, int(get_coins(tag) + (einsatz * 5))) | |
embed = discord.Embed(description='{0} dein Einsatz wurde verfünffacht!'.format(author.mention), | |
colour=Farbe) | |
await message.channel.send(embed=embed) | |
else: | |
await message.channel.send(get_casino_syntax()) | |
else: | |
await message.channel.send(get_casino_syntax()) | |
# --Glücksrad--# | |
elif message.content.startswith("!glücksrad"): | |
wheeltime = get_wheel(tag) | |
day = wheeltime.split('-')[0] | |
month = wheeltime.split('-')[1] | |
year = wheeltime.split('-')[2] | |
nowday = date.today().strftime("%d") | |
nowmonth = date.today().strftime("%m") | |
nowyear = date.today().strftime("%Y") | |
now = datetime.now() | |
zeit = str(now.strftime("%d-%m-%Y")) | |
if day < nowday or month < nowmonth or year < nowyear: | |
wert = random.randint(1, 100) | |
set_wheel(tag, zeit) | |
if wert <= 40: | |
set_coins(tag, int(get_coins(tag) + 10)) | |
embed = discord.Embed(description='Glückwunsch {0}, du hast 10 Coins gewonnen!'.format(author.mention), | |
colour=Farbe) | |
await message.channel.send(embed=embed) | |
elif wert <= 70: | |
set_coins(tag, int(get_coins(tag) + 20)) | |
embed = discord.Embed(description='Glückwunsch {0}, du hast 20 Coins gewonnen!'.format(author.mention), | |
colour=Farbe) | |
await message.channel.send(embed=embed) | |
elif wert <= 90: | |
set_coins(tag, int(get_coins(tag) + 50)) | |
embed = discord.Embed(description='Glückwunsch {0}, du hast 50 Coins gewonnen!'.format(author.mention), | |
colour=Farbe) | |
await message.channel.send(embed=embed) | |
elif wert <= 100: | |
set_coins(tag, int(get_coins(tag) + 100)) | |
embed = discord.Embed(description='Glückwunsch {0}, du hast 100 Coins gewonnen!'.format(author.mention), | |
colour=Farbe) | |
await message.channel.send(embed=embed) | |
else: | |
embed = discord.Embed(description='{0} du hast das Glücksrad heute schon benutzt!'.format(author.mention), | |
colour=red_color) | |
await message.channel.send(embed=embed) | |
# --CoinsBoost--# | |
elif message.content.startswith("!coinbooster"): | |
if get_coins(tag) >= 249: | |
if is_coinboost(tag): | |
embed = discord.Embed(description='{0}, du hast schon einen CoinBooster.'.format(author.mention), | |
colour=red_color) | |
await message.channel.send(embed=embed) | |
return | |
set_coins(tag, int(get_coins(tag) - 249)) | |
now = pytz.timezone('Europe/Berlin') | |
datetime_now = datetime.now(now) | |
zeit = datetime_now + timedelta(days=5) | |
zeit = zeit.strftime("%Y-%m-%d-%H-%M") | |
set_coinboost(tag, zeit) | |
embed = discord.Embed( | |
description='Du hast dir erfolgreich einen Coinbooster gekauft {0}.'.format(author.mention), | |
colour=green_color) | |
await message.channel.send(embed=embed) | |
else: | |
embed = discord.Embed( | |
description='{0}, du hast nicht genug Coins um den Coinbooster zu kaufen.'.format(author.mention), | |
colour=red_color) | |
await message.channel.send(embed=embed) | |
# --info command--# | |
elif message.content.startswith('!info'): | |
membercount = 0 | |
guildcount = 0 | |
for guild in client.guilds: | |
membercount += guild.member_count | |
guildcount += 1 | |
embed = discord.Embed(title='Informationen zum WASD-Modding Bot', | |
description=f'Dieser Bot ist zuständig für: \n-Das Levelsystem \n-Die Invite-Banns \n-Das Ticket-System \n-Die Userinfo \n-Die Giveaways \nund noch vieles mehr... \n \n Der Bot ist derzeit auf {guildcount - 1} anderen ' | |
f'Servern und sieht {membercount} Members.', | |
color=Farbe) | |
embed.set_footer(text=footer) | |
await message.channel.send(embed=embed) | |
# --Userinfo--# | |
elif message.content.startswith("!show"): | |
admin_rolle = discord.utils.get(message.guild.roles, name=adminRoleName) | |
if admin_rolle not in message.author.roles: | |
embed = discord.Embed(description="{0}, du hast nicht die Berechtigung dies zu tun.".format(author.mention), | |
colour=red_color) | |
await message.channel.send(embed=embed) | |
return | |
args = message.content.split(" ") | |
if len(args) == 2: | |
if len(args[1]) == 4: | |
tag_target = args[1] | |
for member in message.guild.members: | |
if not member.bot: | |
tag2 = member.discriminator | |
if tag2 == tag_target: | |
target = member | |
if target == None: | |
return | |
else: | |
target = message.guild.get_member(int(args[1])) | |
tag_target = target.discriminator | |
embed = discord.Embed(title=info_emoji + ' Userinformation für', | |
description='**' + target.mention + '**\nINFOs:', color=Farbe) | |
embed.add_field(name='Name', value=target.name, inline=True) | |
embed.add_field(name='Nickname', value=target.nick, inline=True) | |
embed.add_field(name='Server beigetreten', value=target.joined_at.strftime('%d/%m/%Y, %H:%M:%S'), | |
inline=True) | |
embed.add_field(name='Discord beigetreten', value=target.created_at.strftime('%d/%m/%Y, %H:%M:%S'), | |
inline=True) | |
rollen = '' | |
for role in target.roles: | |
if not role.is_default(): | |
rollen += '{} \r\n'.format(role.mention) | |
if rollen: | |
embed.add_field(name='Rollen', value=rollen, inline=True) | |
embed.add_field(name='Coins:', value=get_coins(tag_target)) | |
embed.add_field(name='XPs:', value=get_xp(tag_target)) | |
embed.add_field(name='Rang:', value=get_level(tag_target)) | |
embed.add_field(name='Nachrichten:', value=get_messages(tag_target)) | |
embed.add_field(name='Tickets:', value=get_tickets(tag_target)) | |
if is_coinboost(tag): | |
now = pytz.timezone('Europe/Berlin') | |
datetime_now = datetime.now(now) | |
coinboost = get_coinboost(tag).split('-') | |
cointime = datetime(int(coinboost[0]), int(coinboost[1]), int(coinboost[2]), int(coinboost[3]) - 2, | |
int(coinboost[4]), 00) | |
cointime = pytz.utc.localize(cointime) | |
cointime.replace(tzinfo=pytz.timezone('Europe/Berlin')) | |
td = cointime - datetime_now | |
secs = td.total_seconds() | |
hours = int(secs / 3600) % 24 | |
minutes = int(secs / 60) % 60 | |
embed.add_field(name='Booster:', | |
value='CoinBooster läuft ab in {0} Tagen {1} Stunden und {2} Minuten'.format(td.days, | |
hours, | |
minutes), | |
inline=False) | |
else: | |
embed.add_field(name='Booster:', value='keine', inline=False) | |
embed.set_thumbnail(url=target.avatar_url) | |
embed.set_footer(text=footer) | |
await message.channel.send(embed=embed) | |
# --Coins--# | |
elif message.content == "!coins": | |
embed = discord.Embed(title='Kontoinformation für', | |
description='**' + author.mention + '**\nWährungen:', color=Farbe) | |
embed.add_field(name='Coins:', value=str(get_coins(tag)), ) | |
embed.add_field(name='XPs:', value=str(get_xp(tag))) | |
if is_coinboost(tag): | |
now = pytz.timezone('Europe/Berlin') | |
datetime_now = datetime.now(now) | |
coinboost = get_coinboost(tag).split('-') | |
cointime = datetime(int(coinboost[0]), int(coinboost[1]), int(coinboost[2]), int(coinboost[3]) - 2, | |
int(coinboost[4]), 00) | |
cointime = pytz.utc.localize(cointime) | |
cointime.replace(tzinfo=pytz.timezone('Europe/Berlin')) | |
td = cointime - datetime_now | |
secs = td.total_seconds() | |
hours = int(secs / 3600) % 24 | |
minutes = int(secs / 60) % 60 | |
embed.add_field(name='Booster:', | |
value='CoinBooster läuft ab in {0} Tagen {1} Stunden und {2} Minuten'.format(td.days, hours, | |
minutes), | |
inline=False) | |
else: | |
embed.add_field(name='Booster:', value='keine', inline=False) | |
embed.set_thumbnail(url=author.avatar_url) | |
embed.set_footer(text=footer) | |
await message.channel.send(embed=embed) | |
# --Addcoins--# | |
elif message.content.startswith("!addcoins"): | |
admin_rolle = discord.utils.get(message.guild.roles, name=adminRoleName) | |
if admin_rolle not in message.author.roles: | |
embed = discord.Embed(description="{0}, du hast nicht die Berechtigung dies zu tun.".format(author.mention), | |
colour=red_color) | |
await message.channel.send(embed=embed) | |
return | |
args = message.content.split(' ') | |
if len(args) == 2: | |
user = author | |
tag = user.discriminator | |
coins = args[1] | |
set_coins(tag, int(get_coins(tag) + int(coins))) | |
embed = discord.Embed(description="{0} wurden {1} Coins hinzugefügt.".format(user.mention, coins), | |
colour=green_color) | |
await message.channel.send(embed=embed) | |
if len(args) == 3: | |
user = client.get_user(message.mentions[0].id) | |
tag = user.discriminator | |
coins = args[2] | |
embed = discord.Embed(description="{0} wurden {1} Coins hinzugefügt.".format(user.mention, coins), | |
colour=green_color) | |
await message.channel.send(embed=embed) | |
# --RemoveCoins--# | |
elif message.content.startswith("!removecoins"): | |
admin_rolle = discord.utils.get(message.guild.roles, name=adminRoleName) | |
if admin_rolle not in message.author.roles: | |
embed = discord.Embed(description="{0}, du hast nicht die Berechtigung dies zu tun.".format(author.mention), | |
colour=red_color) | |
await message.channel.send(embed=embed) | |
return | |
args = message.content.split(' ') | |
if len(args) == 2: | |
user = author | |
tag = user.discriminator | |
coins = args[1] | |
if coins == "*": | |
set_coins(tag, 0) | |
embed = discord.Embed(description="Die Coins von {0} entfernt.".format(user.mention), colour=red_color) | |
await message.channel.send(embed=embed) | |
return | |
set_coins(tag, int(get_coins(tag) - int(coins))) | |
embed = discord.Embed(description="{0} wurden {1} Coins abgezogen.".format(user.mention, coins), | |
colour=red_color) | |
await message.channel.send(embed=embed) | |
if len(args) == 3: | |
user = client.get_user(message.mentions[0].id) | |
tag = user.discriminator | |
coins = args[2] | |
if coins == "*": | |
set_coins(tag, 0) | |
embed = discord.Embed(description="Die Coins von {0} entfernt.".format(user.mention), colour=red_color) | |
await message.channel.send(embed=embed) | |
return | |
set_coins(tag, int(get_coins(tag) - int(coins))) | |
embed = discord.Embed(description="{0} wurden {1} Coins abgezogen.".format(user.mention, coins), | |
colour=red_color) | |
await message.channel.send(embed=embed) | |
# --AddXPs--# | |
elif message.content.startswith("!addxps"): | |
admin_rolle = discord.utils.get(message.guild.roles, name=adminRoleName) | |
if admin_rolle not in message.author.roles: | |
embed = discord.Embed(description="{0}, du hast nicht die Berechtigung dies zu tun.".format(author.mention), | |
colour=red_color) | |
await message.channel.send(embed=embed) | |
return | |
args = message.content.split(' ') | |
if len(args) == 2: | |
user = author | |
tag = user.discriminator | |
xps = args[1] | |
set_xp(tag, int(get_xp(tag) + int(xps))) | |
embed = discord.Embed(description="{0} wurden {1} XPs hinzugefügt.".format(user.mention, xps), | |
colour=green_color) | |
await message.channel.send(embed=embed) | |
if len(args) == 3: | |
user = client.get_user(message.mentions[0].id) | |
tag = user.discriminator | |
xps = args[2] | |
set_xp(tag, int(get_xp(tag) + int(xps))) | |
embed = discord.Embed(description="{0} wurden {1} XPs hinzugefügt.".format(user.mention, xps), | |
colour=green_color) | |
await message.channel.send(embed=embed) | |
# --RemoveXPs--# | |
elif message.content.startswith("!removexps"): | |
admin_rolle = discord.utils.get(message.guild.roles, name=adminRoleName) | |
if admin_rolle not in message.author.roles: | |
embed = discord.Embed(description="{0}, du hast nicht die Berechtigung dies zu tun.".format(author.mention), | |
colour=red_color) | |
await message.channel.send(embed=embed) | |
return | |
args = message.content.split(' ') | |
if len(args) == 2: | |
user = author | |
tag = user.discriminator | |
xps = args[1] | |
if xps == "*": | |
set_xp(tag, 0) | |
embed = discord.Embed(description="Die Xps von {0} entfernt.".format(user.mention), colour=red_color) | |
await message.channel.send(embed=embed) | |
return | |
set_xp(tag, int(get_xp(tag) - int(xps))) | |
embed = discord.Embed(description="{0} wurden {1} Xps abgezogen.".format(user.mention, xps), | |
colour=red_color) | |
await message.channel.send(embed=embed) | |
if len(args) == 3: | |
user = client.get_user(message.mentions[0].id) | |
tag = user.discriminator | |
xps = args[2] | |
if xps == "*": | |
set_xp(tag, 0) | |
embed = discord.Embed(description="Die Xps von {0} entfernt.".format(user.mention), colour=red_color) | |
await message.channel.send(embed=embed) | |
return | |
set_xp(tag, int(get_xp(tag) - int(xps))) | |
embed = discord.Embed(description="{0} wurden {1} Xps abgezogen.".format(user.mention, xps), | |
colour=red_color) | |
await message.channel.send(embed=embed) | |
# --LeaderBoard--# | |
elif message.content.startswith('!leaderboard'): | |
results = get_execute('SELECT * from ' + dbname + ' ORDER BY coins DESC') | |
users = [] | |
for user in results: | |
tag_target = user[0] | |
target = None | |
for member in message.guild.members: | |
if not member.bot: | |
tag2 = member.discriminator | |
if int(tag2) == int(tag_target): | |
target = member | |
if target != None: | |
users.append(target) | |
rangliste = '\nDie Top Liste aller User' | |
i = 1 | |
if len(users) >= 10: | |
maximal = 10 | |
else: | |
maximal = len(users) | |
for user in users: | |
rangliste = rangliste + "\n`" + str(i) + ".)` " + user.mention | |
# rangliste = rangliste.ljust(50, ' ') | |
rangliste = rangliste + " - Coins: " + str(get_coins(user.discriminator)) | |
if i == maximal: | |
break | |
i += 1 | |
leaderboard = discord.Embed(title='Leaderbaord', description=rangliste, color=Farbe) | |
seite_footer = "Seite 1 von {0}".format(str(round(len(users) / 10 + 0.49))) | |
leaderboard.set_footer(text=seite_footer) | |
nachricht = await message.channel.send(embed=leaderboard) | |
insert_leaderboard(nachricht.id) | |
set_page(id, 1) | |
await nachricht.add_reaction(up_pfeil) | |
await nachricht.add_reaction(down_pfeil) | |
# --Help--# | |
elif message.content.startswith('!hilfe'): | |
help = discord.Embed(title='Befehle für den WASD-Modding Bot:', | |
description='\n`!hilfe` - zeigt dir diese Nachricht \n`!info` - zeigt dir die Informationen über diesen Bot \n`!show[user-ID]` - zeigt dir die Information für einen bestimmten User\n `!ticket[reason]` - für eine Bewerbung der Modding-Rolle \n`!casino[amount]` - du kannst casino spielen \n`!coins` - zeigt dir deine Coins', | |
color=Farbe) | |
help.set_footer(text=footer) | |
await message.channel.send(embed=help) | |
# --Easteregg by Laureline--# | |
elif 'easteregg' in message.content: | |
easteregg = discord.Embed(title="> **<:osterei:726818243477504061> Easteregg!**", | |
description="[KA11I](https://discord.gg/4q4C7rH) ist cool!", colour=Farbe) | |
easteregg.set_footer(text='Hier könnte ihre Werbung stehen...') | |
await message.channel.send(embed=easteregg) | |
# --Coins bei "normaler" Nachricht"--# | |
else: | |
now = pytz.timezone('Europe/Berlin') | |
datetime_now = datetime.now(now) | |
lastmessage = get_lastmessage(tag).split('-') | |
lastyear = lastmessage[0] | |
lastmonth = lastmessage[1] | |
lastday = lastmessage[2] | |
lasthour = lastmessage[3] | |
lastminute = lastmessage[4] | |
year = datetime_now.strftime("%Y") | |
month = datetime_now.strftime("%m") | |
day = datetime_now.strftime("%d") | |
hour = datetime_now.strftime("%H") | |
minute = datetime_now.strftime("%M") | |
if lastyear < year or lastmonth < month or lastday < day or lasthour < hour: | |
if int(int(lastminute) + 10) < int(minute): | |
pass | |
set_messages(tag, get_messages(tag) + 1) | |
zeit = datetime_now.strftime("%Y-%m-%d-%H-%M") | |
set_lastmessage(tag, zeit) | |
wert = random.randint(1, 100) | |
if wert <= 25: | |
set_coins(tag, int(get_coins(tag) + 1)) | |
elif wert <= 50: | |
set_coins(tag, int(get_coins(tag) + 2)) | |
elif wert <= 70: | |
set_coins(tag, int(get_coins(tag) + 3)) | |
elif wert <= 85: | |
set_coins(tag, int(get_coins(tag) + 4)) | |
elif wert <= 95: | |
set_coins(tag, int(get_coins(tag) + 5)) | |
elif wert <= 100: | |
set_coins(tag, int(get_coins(tag) + 6)) | |
xps = random.randint(1, 4) | |
if is_coinboost(tag): | |
set_xp(tag, int(get_xp(tag) + int(xps + 2))) | |
else: | |
set_xp(tag, int(get_xp(tag) + xps)) | |
# ------------------LOGGING-------------------------# | |
# --nachricht gelöscht--# | |
@client.event | |
async def on_message_delete(message): | |
author = message.author.id | |
channel = message.channel | |
if 'discord.gg/' in message.content or message.author.id == 724717586725601351: | |
return | |
else: | |
if is_mute(author.discriminator): | |
mute = " (muted)" | |
else: | |
mute = "" | |
gelöscht = discord.Embed(description='**Nachricht gelöscht** \n__User__: <@' + str( | |
author) + '> ' + mute + ' \n__Channel:__ <#' + str(channel.id) + '>\n__Nachricht:__ `' + str( | |
message.content) + '`', colour=red_color) | |
await client.get_channel(loggingChannelID).send(embed=gelöscht) | |
# --nachricht editiert--# | |
@client.event | |
async def on_message_edit(before, after): | |
if before.author.bot or after.author.bot: | |
return | |
if 'discord.gg/' in after.content: | |
# hier könnte deine werbung stehen... | |
await after.delete() | |
else: | |
editiert = discord.Embed(description='**Nachricht editiert** \n __User:__ <@' + str( | |
before.author.id) + '> \n__Vorher:__ `' + before.content + '` \n __Nachher:__ `' + after.content + '`', | |
colour=orange_color) | |
await client.get_channel(loggingChannelID).send(embed=editiert) | |
# --nickname geändert--# | |
@client.event | |
async def on_member_update(before, after): | |
if str(before.nick) != str(after.nick): | |
logging = client.get_channel(loggingChannelID) | |
geändert = discord.Embed(description=f'**Nickname geändert** \n __User:__ {str( | |
client.get_user(after.id).mention)} \n__Vorheriger Nickname:__ | |
repr({str( | |
before.nick)}) | |
\n__Neuer Nickname:__ `{str(after.nick)}`') | |
await logging.send(embed=geändert) | |
# -----------------END----------------------------# | |
# ----------------TICKETSYSTEM-------------------# | |
@client.event | |
async def on_raw_reaction_add(payload): | |
ticketid = payload.channel_id | |
ticket_channel = client.get_channel(ticketid) | |
guild = client.get_guild(ID_server) | |
category = guild.get_channel(openTicketCategoryID) | |
author_id = payload.user_id | |
author = client.get_user(author_id) | |
emoji = str(payload.emoji) | |
if payload.message_id == moddingInfoMessageID and emoji == moddingQuestEmoji: | |
ticket_channel = await guild.create_text_channel("ticket", category=category) | |
ticketembed = discord.Embed(title=f"Request der Modding-Rolle von {str(author)}", | |
description=moddingInfoMessage.format(author.mention), colour=0x1E7AEB) | |
ticketembed.set_footer(text='Annehmen : {0} - Ablehnen : {1} {2}'.format(annehmen, ablehnen, | |
time.today().strftime( | |
"%d.%m.%Y um %H:%M:%S Uhr"))) | |
nachricht = await ticket_channel.send(embed=ticketembed) | |
await nachricht.add_reaction(annehmen) | |
await nachricht.add_reaction(ablehnen) | |
ticketid = ticket_channel.id | |
everyone = discord.utils.get(guild.roles, name='@everyone') | |
await ticket_channel.set_permissions(author, read_messages=True, send_messages=True) | |
await ticket_channel.set_permissions(everyone, read_messages=False, send_messages=False) | |
if emoji == ablehnen and not author.bot and not payload.user_id == author_id and ticket_channel.category.id != closedTicketCategoryID: | |
guild = client.get_guild(ID_server) | |
categoryneu = guild.get_channel(closedTicketCategoryID) | |
ticket_channel = client.get_channel(ticketid) | |
await ticket_channel.edit(reason=None, name='ticket closed', category=categoryneu) | |
await ticket_channel.set_permissions(author, read_messages=False, | |
send_messages=False) | |
abgelehnt = discord.Embed( | |
description='Deine Ticketanfrage wurde bearbeitet und nach längerem Überlegen abgelehnt.', colour=0xDA1414) | |
await author.send(embed=abgelehnt) | |
if emoji == annehmen and not author.bot and payload.channel_id == ticketid and not payload.user_id == author_id and ticket_channel.category.id != closedTicketCategoryID: | |
guild = client.get_guild(ID_server) | |
categoryneu = guild.get_channel(closedTicketCategoryID) | |
ticket_channel = client.get_channel(ticketid) | |
await ticket_channel.edit(reason=None, name='ticket accepted', category=categoryneu) | |
author = discord.utils.get(guild.members, id=author.id) | |
modding = guild.get_role(moddingRoleID) | |
await author.add_roles(modding) | |
await ticket_channel.set_permissions(author, read_messages=False, send_messages=False) | |
angenommen = discord.Embed( | |
description='Deine Ticketanfrage wurde bearbeitet. Du wurdest angenommen und hast die Modding Rolle erhalten.', | |
colour=0x14F50C) | |
await author.send(embed=angenommen) | |
# -----------------END----------------------------# | |
def add_all_members(message): | |
for member in message.guild.members: | |
if not member.bot: | |
tag = member.discriminator | |
insert_new_member(member) | |
def get_casino_syntax(): | |
return "Snytax für das Casino: ```!casino [coins]```Dabei muss [coins] eine Zahl sein und darf nicht großer als 50 sein" | |
# willkommensnachricht | |
@client.event | |
async def on_member_join(member): | |
insert_new_member(member) | |
welcome = discord.Embed(title='**Herzlich Willkommen auf dem Discord Server von WASD Modding!**', | |
description=joinMessage, colour=Farbe) | |
welcome.set_footer(text=footer) | |
await member.send(embed=welcome) | |
def insert_new_member(member): | |
conn = connector.connect(host="mcsql.horlboge.de", user="p_mc_1687", passwd=os.environ['MYSQL_PASSWORT'], | |
db="p_mc_1687") | |
cursor = conn.cursor() | |
tag = int(member.discriminator) | |
cursor.execute('INSERT IGNORE INTO ' + dbname + ' VALUES(%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s)', | |
(tag, member.name, 0, 0, 0, 0, 0, '0000-00-00-00-00', '0000-00-00-00-00', 0, '00-00-0000')) | |
conn.commit() | |
conn.close() | |
def insert_new_invite(message, nachricht): | |
member = message.author | |
now = datetime.now() | |
zeit = now.strftime("%d.%m.%Y um %H:%M:%S Uhr") | |
conn = connector.connect(host="mcsql.horlboge.de", user="p_mc_1687", passwd=os.environ['MYSQL_PASSWORT'], | |
db="p_mc_1687") | |
cursor = conn.cursor() | |
cursor.execute('INSERT INTO wasdInvites VALUES(%s, %s, %s, %s, %s, %s, %s)', | |
(nachricht.id, member.id, member.name, message.content, zeit, 0, 0)) | |
conn.commit() | |
conn.close() | |
def execute(mysql): | |
conn = connector.connect(host="mcsql.horlboge.de", user="p_mc_1687", passwd=os.environ['MYSQL_PASSWORT'], | |
db="p_mc_1687") | |
cursor = conn.cursor() | |
cursor.execute(mysql) | |
conn.commit() | |
conn.close() | |
def get_execute(mysql): | |
conn = connector.connect(host="mcsql.horlboge.de", user="p_mc_1687", passwd=os.environ['MYSQL_PASSWORT'], | |
db="p_mc_1687") | |
cursor = conn.cursor() | |
cursor.execute(mysql) | |
row = cursor.fetchall() | |
conn.close() | |
return row | |
def get_coins(userid): | |
return get_execute('SELECT * from ' + dbname + ' WHERE ID = {0}'.format(userid))[0][2] | |
# int | |
def set_coins(userid, coins): | |
execute('UPDATE ' + dbname + ' SET coins = {0} WHERE ID = {1}'.format(coins, userid)) | |
# int | |
def get_xp(userid): | |
return get_execute('SELECT * from ' + dbname + ' WHERE ID = {0}'.format(userid))[0][3] | |
# int | |
def set_xp(userid, xp): | |
execute('UPDATE ' + dbname + ' SET xp = {0} WHERE ID = {1}'.format(xp, userid)) | |
botCommandChannel = client.get_channel(botCommandsID) | |
if math.floor(get_xp(userid) / 200) >= get_level(userid): | |
set_level(userid, math.floor(get_xp(userid) / 200)) | |
wert = random.randint(1, 4) | |
if wert < 4: | |
belohnung = "50 Münzen" | |
set_coins(userid, get_coins(userid) + 50) | |
else: | |
belohnung = "einen Coinbooster" | |
if is_coinboost(userid): | |
coinboost = get_coinboost(userid).split('-') | |
lastyear = coinboost[0] | |
lastmonth = coinboost[1] | |
lastday = coinboost[2] | |
lasthour = coinboost[3] | |
lastminute = coinboost[4] | |
datetime_coinboost = datetime(int(coinboost[0]), int(coinboost[1]), int(coinboost[2]), | |
int(coinboost[3]) - 2, int(coinboost[4])) | |
datetime_coinboost = pytz.utc.localize(datetime_coinboost) | |
datetime_coinboost.replace(tzinfo=pytz.timezone('Europe/Berlin')) | |
zeit = datetime_coinboost + timedelta(days=5) | |
zeit = zeit.strftime("%Y-%m-%d-%H-%M") | |
else: | |
set_coinboost(userid, zeit) | |
now = pytz.timezone('Europe/Berlin') | |
datetime_now = datetime.now(now) | |
zeit = datetime_now + timedelta(days=5) | |
zeit = zeit.strftime("%Y-%m-%d-%H-%M") | |
set_coinboost(userid, zeit) | |
text = "Glückwunsch {0}, du hast Rang {1} erreicht!\nZur Beholung erhälst du {2}.".format( | |
client.get_user(userid).mention, get_level(userid), belohnung) | |
embed = discord.Embed(description=text, colour=green_color) | |
botCommandChannel.send(embed=embed) | |
# boolean | |
def is_mute(userid): | |
return get_execute('SELECT * from ' + dbname + ' WHERE ID = {0}'.format(userid))[0][4] == 1 | |
# boolean | |
def set_mute(userid, mute): | |
if mute == True: | |
execute('UPDATE ' + dbname + ' SET mute = 1 WHERE ID = {0}'.format(userid)) | |
else: | |
execute('UPDATE ' + dbname + ' SET mute = 0 WHERE ID = {0}'.format(userid)) | |
# boolean | |
def get_tickets(userid): | |
return get_execute('SELECT * from ' + dbname + ' WHERE ID = {0}'.format(userid))[0][5] | |
# int | |
def set_tickets(userid, tickets): | |
execute('UPDATE ' + dbname + ' SET level = {0} WHERE ID = {1}'.format(level, userid)) | |
# int | |
def get_level(userid): | |
return get_execute('SELECT * from ' + dbname + ' WHERE ID = {0}'.format(userid))[0][6] | |
# int | |
def set_level(userid, level): | |
execute('UPDATE ' + dbname + ' SET level = {0} WHERE ID = {1}'.format(level, userid)) | |
# int | |
def get_coinboost(userid): | |
return get_execute('SELECT * from ' + dbname + ' WHERE ID = {0}'.format(userid))[0][7] | |
# string | |
def set_coinboost(userid, coinboost): | |
execute('UPDATE ' + dbname + ' SET coinboost = "{0}" WHERE ID = {1}'.format(coinboost, userid)) | |
# string | |
def is_coinboost(userid): | |
if get_coinboost(userid) == '0000-00-00-00-00': | |
return False | |
else: | |
now = pytz.timezone('Europe/Berlin') | |
datetime_now = datetime.now(now) | |
coinboost = get_coinboost(userid).split('-') | |
lastyear = coinboost[0] | |
lastmonth = coinboost[1] | |
lastday = coinboost[2] | |
lasthour = coinboost[3] | |
lastminute = coinboost[4] | |
datetime_coinboost = datetime(int(coinboost[0]), int(coinboost[1]), int(coinboost[2]), int(coinboost[3]) - 2, | |
int(coinboost[4])) | |
datetime_coinboost = pytz.utc.localize(datetime_coinboost) | |
datetime_coinboost.replace(tzinfo=pytz.timezone('Europe/Berlin')) | |
if datetime_now < datetime_coinboost: | |
return True | |
else: | |
set_coinboost(userid, '0000-00-00-00-00') | |
return False | |
# boolean | |
def get_lastmessage(userid): | |
return get_execute('SELECT * from ' + dbname + ' WHERE ID = {0}'.format(userid))[0][8] | |
# int | |
def set_lastmessage(userid, lastmessage): | |
execute('UPDATE ' + dbname + ' SET lastmessage = "{0}" WHERE ID = {1}'.format(lastmessage, userid)) | |
# int | |
def get_messages(userid): | |
return get_execute('SELECT * from ' + dbname + ' WHERE ID = {0}'.format(userid))[0][9] | |
# int | |
def set_messages(userid, messages): | |
execute('UPDATE ' + dbname + ' SET messages = {0} WHERE ID = {1}'.format(messages, userid)) | |
# int | |
def get_wheel(userid): | |
return get_execute('SELECT * from ' + dbname + ' WHERE ID = {0}'.format(userid))[0][10] | |
# string | |
def set_wheel(userid, wheel): | |
execute('UPDATE ' + dbname + ' SET wheel = "{0}" WHERE ID = {1}'.format(str(wheel), userid)) | |
# string | |
def is_invite(inviteid): | |
return len(get_execute('SELECT * from wasdInvites WHERE ID = {0} AND closed = 0'.format(inviteid))) != 0 | |
# boolean | |
def invite_get_userid(inviteid): | |
return get_execute('SELECT * from wasdInvites WHERE ID = {0}'.format(inviteid))[0][1] | |
# int | |
def invite_get_name(inviteid): | |
return get_execute('SELECT * from wasdInvites WHERE ID = {0}'.format(inviteid))[0][2] | |
# string | |
def invite_get_message(inviteid): | |
return get_execute('SELECT * from wasdInvites WHERE ID = {0}'.format(inviteid))[0][3] | |
# string | |
def invite_get_time(inviteid): | |
return get_execute('SELECT * from wasdInvites WHERE ID = {0}'.format(inviteid))[0][4] | |
# string | |
def invite_get_reaction(inviteid): | |
return get_execute('SELECT * from wasdInvites WHERE ID = {0}'.format(inviteid))[0][5] | |
# int | |
def invite_set_reaction(inviteid, reaction): | |
execute('UPDATE wasdInvites SET reaction = {0} WHERE ID = {1}'.format(reaction, inviteid)) | |
# int | |
def invite_get_closed(inviteid): | |
if get_execute('SELECT * from wasdInvites WHERE ID = {0}'.format(inviteid))[0][6] == 0: | |
return False | |
else: | |
return True | |
# boolean | |
def invite_set_closed(inviteid, closed): | |
if closed == True: | |
execute('UPDATE wasdInvites SET closed = 1 WHERE ID = {0}'.format(inviteid)) | |
else: | |
execute('UPDATE wasdInvites SET closed = 0 WHERE ID = {0}'.format(inviteid)) | |
# boolean | |
def insert_leaderboard(id): | |
conn = connector.connect(host="mcsql.horlboge.de", user="p_mc_1687", passwd=os.environ['MYSQL_PASSWORT'], | |
db="p_mc_1687") | |
cursor = conn.cursor() | |
cursor.execute('INSERT INTO wasdLeaderboard VALUES(%s, %s)', (id, 1)) | |
conn.commit() | |
conn.close() | |
def is_leaderboard(id): | |
return len(get_execute('SELECT * from wasdLeaderboard WHERE id = {0}'.format(id))) != 0 | |
def get_page(id): | |
return get_execute('SELECT * from wasdLeaderboard WHERE ID = {0}'.format(id))[0][1] | |
# int | |
def set_page(id, page): | |
execute('UPDATE wasdLeaderboard SET page = {0} WHERE ID = {1}'.format(page, id)) | |
# int | |
client.run(os.environ['DISCORD_TOKEN']) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment