Skip to content

Instantly share code, notes, and snippets.

@Cardistymo
Created July 11, 2020 08:17
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save Cardistymo/40876a08fdcc5dfd892a4c9c08945cc5 to your computer and use it in GitHub Desktop.
Save Cardistymo/40876a08fdcc5dfd892a4c9c08945cc5 to your computer and use it in GitHub Desktop.
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