1
0
Fork 0
mirror of synced 2024-05-17 19:12:33 +12:00
Bonfire/bot.py

648 lines
23 KiB
Python
Raw Normal View History

2016-07-08 01:05:42 +12:00
#!/usr/local/bin/python3.5
import asyncio
import discord
from discord.ext import commands
import sys
import os
import random
import subprocess
import urllib.request
import urllib.parse
import json
import re
import pymysql.cursors
import yaml
import playlist
from threading import Timer
2016-07-08 10:10:24 +12:00
with open("/home/phxntx5/public_html/bot/config.yml", "r") as f:
2016-07-08 01:05:42 +12:00
global_config = yaml.load(f)
botDescription = global_config.get("description")
commandPrefix = global_config.get("command_prefix")
2016-07-08 10:10:24 +12:00
# Custom predicates
2016-07-08 01:05:42 +12:00
def isOwner():
def predicate(ctx):
2016-07-08 10:10:24 +12:00
return ctx.message.author.id == ownerID
2016-07-08 01:05:42 +12:00
return commands.check(predicate)
2016-07-08 10:10:24 +12:00
2016-07-08 01:05:42 +12:00
def isMod():
def predicate(ctx):
return ctx.message.author.top_role.permissions.kick_members
2016-07-08 10:10:24 +12:00
2016-07-08 01:05:42 +12:00
return commands.check(predicate)
2016-07-08 10:10:24 +12:00
2016-07-08 01:05:42 +12:00
def isAdmin():
def predicate(ctx):
return ctx.message.author.top_role.permissions.manage_server
2016-07-08 10:10:24 +12:00
2016-07-08 01:05:42 +12:00
return commands.check(predicate)
2016-07-08 10:10:24 +12:00
2016-07-08 01:05:42 +12:00
def isPM():
def predicate(ctx):
return ctx.message.channel.is_private
2016-07-08 10:10:24 +12:00
2016-07-08 01:05:42 +12:00
return commands.check(predicate)
2016-07-08 10:10:24 +12:00
2016-07-08 01:05:42 +12:00
def battled():
def predicate(ctx):
2016-07-08 10:10:24 +12:00
return ctx.message.author == battleP2
2016-07-08 01:05:42 +12:00
return commands.check(predicate)
2016-07-08 10:10:24 +12:00
bot = commands.Bot(command_prefix=commandPrefix, description=botDescription)
2016-07-08 01:05:42 +12:00
music = playlist.Music(bot)
bot.add_cog(music)
2016-07-08 10:10:24 +12:00
# Turn battling off, reset users
2016-07-08 01:05:42 +12:00
def battlingOff():
global battleP1
global battleP2
global battling
battling = False
battleP1 = ""
battleP2 = ""
2016-07-08 10:10:24 +12:00
# Bot event overrides
2016-07-08 01:05:42 +12:00
@bot.event
async def on_ready():
2016-07-08 10:10:24 +12:00
# Change the status upon connection to the default status
game = discord.Game(name=defaultStatus, type=0)
2016-07-08 01:05:42 +12:00
await bot.change_status(game)
cursor = connection.cursor()
2016-07-08 10:10:24 +12:00
2016-07-08 01:05:42 +12:00
'''success = checkSetup(cursor)
if success=="Error: default_db":
fmt = "The bot ran into an error while checking for the default database information."
await bot.send_message(determineId(ownerID),fmt)
elif success="Error: boop_db":
fmt = "The bot ran into an error while checking for the boop database information."
2016-07-08 10:10:24 +12:00
await bot.send_message(determineId(ownerID),fmt)'''
2016-07-08 01:05:42 +12:00
cursor.execute('use {0}'.format(db_default))
cursor.execute('select channel_id from restart_server where id=1')
result = cursor.fetchone()['channel_id']
2016-07-08 10:10:24 +12:00
if int(result) != 0:
await bot.send_message(determineId(result), "I have just finished restarting!")
2016-07-08 01:05:42 +12:00
cursor.execute('update restart_server set channel_id=0 where id=1')
connection.commit()
2016-07-08 10:10:24 +12:00
2016-07-08 01:05:42 +12:00
@bot.event
async def on_member_join(member):
await bot.say("Welcome to the '{0.server.name}' server {0.mention}!".format(member))
2016-07-08 10:10:24 +12:00
2016-07-08 01:05:42 +12:00
@bot.event
async def on_member_remove(member):
await bot.say("{0} has left the server, I hope it wasn't because of something I said :c".format(member))
2016-07-08 10:10:24 +12:00
# Bot commands
2016-07-08 01:05:42 +12:00
@bot.command()
async def joke():
try:
fortuneCommand = "/usr/bin/fortune riddles"
fortune = subprocess.check_output(fortuneCommand.split()).decode("utf-8")
await bot.say(fortune)
except Exception as e:
fmt = 'An error occurred while processing this request: ```py\n{}: {}\n```'
await bot.say(fmt.format(type(e).__name__, e))
2016-07-08 10:10:24 +12:00
2016-07-08 01:05:42 +12:00
@bot.command(pass_context=True)
@isOwner()
async def restart(ctx):
try:
cursor = connection.cursor()
cursor.execute('use {0}'.format(db_default))
sql = "update restart_server set channel_id={0} where id=1".format(ctx.message.channel.id)
cursor.execute(sql)
connection.commit()
await bot.say("Restarting; see you in the next life {0}!".format(ctx.message.author.mention))
python = sys.executable
os.execl(python, python, *sys.argv)
except Exception as e:
fmt = 'An error occurred while processing this request: ```py\n{}: {}\n```'
await bot.say(fmt.format(type(e).__name__, e))
2016-07-08 10:10:24 +12:00
2016-07-08 01:05:42 +12:00
@bot.command(pass_context=True)
@isOwner()
async def py(ctx):
try:
match_single = getter.findall(ctx.message.content)
match_multi = multi.findall(ctx.message.content)
if not match_single and not match_multi:
return
else:
if not match_multi:
result = eval(match_single[0])
await bot.say("```{0}```".format(result))
else:
def say(v):
2016-07-08 01:05:42 +12:00
loop.create_task(bot.say("```{0}```".format(v)))
2016-07-08 10:10:24 +12:00
2016-07-08 01:05:42 +12:00
exec(match_multi[0])
except Exception as e:
fmt = 'An error occurred while processing this request: ```py\n{}: {}\n```'
await bot.say(fmt.format(type(e).__name__, e))
2016-07-08 10:10:24 +12:00
2016-07-08 01:05:42 +12:00
@bot.command(pass_context=True)
@isOwner()
async def shutdown(ctx):
try:
fmt = 'Shutting down, I will miss you {0.author.name}'
await bot.say(fmt.format(ctx.message))
await bot.logout()
await bot.close()
except Exception as e:
fmt = 'An error occurred while processing this request: ```py\n{}: {}\n```'
await bot.say(fmt.format(type(e).__name__, e))
2016-07-08 10:10:24 +12:00
2016-07-08 01:05:42 +12:00
@bot.command()
@isOwner()
async def avatar(content):
try:
file = '/home/phxntx5/public_html/bot/images/' + content
with open(file, 'rb') as fp:
await bot.edit_profile(avatar=fp.read())
except Exception as e:
fmt = 'An error occurred while processing this request: ```py\n{}: {}\n```'
await bot.say(fmt.format(type(e).__name__, e))
2016-07-08 10:10:24 +12:00
2016-07-08 01:05:42 +12:00
@bot.command()
@isOwner()
async def name(newNick):
try:
await bot.edit_profile(username=newNick)
await bot.say('Changed username to ' + newNick)
# Restart the bot after this, as profile changes are not immediate
python = sys.executable
os.execl(python, python, *sys.argv)
except Exception as e:
fmt = 'An error occurred while processing this request: ```py\n{}: {}\n```'
await bot.say(fmt.format(type(e).__name__, e))
2016-07-08 10:10:24 +12:00
@bot.command(pass_context=True, no_pm=True)
2016-07-08 01:05:42 +12:00
@isOwner()
async def leave(ctx):
try:
await bot.say('Why must I leave? Hopefully I can come back :c')
await bot.leave_server(ctx.message.server)
except Exception as e:
fmt = 'An error occurred while processing this request: ```py\n{}: {}\n```'
await bot.say(fmt.format(type(e).__name__, e))
2016-07-08 10:10:24 +12:00
2016-07-08 01:05:42 +12:00
@bot.command()
@isMod()
2016-07-08 10:10:24 +12:00
async def status(*stat: str):
2016-07-08 01:05:42 +12:00
try:
newStatus = ' '.join(stat)
game = discord.Game(name=newStatus, type=0)
await bot.change_status(game)
await bot.say("Just changed my status to '{0}'!".format(newStatus))
except Exception as e:
fmt = 'An error occurred while processing this request: ```py\n{}: {}\n```'
await bot.say(fmt.format(type(e).__name__, e))
2016-07-08 10:10:24 +12:00
2016-07-08 01:05:42 +12:00
@bot.command(pass_context=True)
@isMod()
2016-07-08 10:10:24 +12:00
async def say(ctx, *msg: str):
2016-07-08 01:05:42 +12:00
try:
msg = ' '.join(msg)
await bot.say(msg)
await bot.delete_message(ctx.message)
except Exception as e:
fmt = 'An error occurred while processing this request: ```py\n{}: {}\n```'
await bot.say(fmt.format(type(e).__name__, e))
2016-07-08 10:10:24 +12:00
2016-07-08 01:05:42 +12:00
@bot.command()
2016-07-08 10:10:24 +12:00
async def urban(*msg: str):
2016-07-08 01:05:42 +12:00
try:
term = '+'.join(msg)
url = "http://api.urbandictionary.com/v0/define?term={}".format(term)
response = urllib.request.urlopen(url)
data = json.loads(response.read().decode('utf-8'))
2016-07-08 10:10:24 +12:00
if len(data['list']) == 0:
2016-07-08 01:05:42 +12:00
await bot.say("No result with that term!")
else:
await bot.say(data['list'][0]['definition'])
except discord.HTTPException:
await bot.say('```Error: Defintion is too long for me to send```')
except Exception as e:
fmt = 'An error occurred while processing this request: ```py\n{}: {}\n```'
await bot.say(fmt.format(type(e).__name__, e))
2016-07-08 10:10:24 +12:00
2016-07-08 01:05:42 +12:00
@bot.command(pass_context=True)
2016-07-08 10:10:24 +12:00
async def derpi(ctx, *search: str):
2016-07-08 01:05:42 +12:00
try:
if len(search) > 0:
url = 'https://derpibooru.org/search.json?q='
query = '+'.join(search)
url += query
if ctx.message.channel.id in nsfwChannels:
2016-07-08 10:10:24 +12:00
url += ",+explicit&filter_id=95938"
2016-07-08 01:05:42 +12:00
# url should now be in the form of url?q=search+terms
# Next part processes the json format, and saves the data in useful lists/dictionaries
response = urllib.request.urlopen(url)
data = json.loads(response.read().decode('utf-8'))
results = data['search']
if len(results) > 0:
index = random.randint(0, len(results) - 1)
randImageUrl = results[index].get('representations').get('full')[2:]
randImageUrl = 'http://' + randImageUrl
imageLink = randImageUrl.strip()
else:
await bot.say("No results with that search term, {0}!".format(ctx.message.author.mention))
return
else:
with urllib.request.urlopen('https://derpibooru.org/images/random') as response:
imageLink = response.geturl()
url = 'https://shpro.link/redirect.php/'
data = urllib.parse.urlencode({'link': imageLink}).encode('ascii')
response = urllib.request.urlopen(url, data).read().decode('utf-8')
await bot.say(response)
except Exception as e:
fmt = 'An error occurred while processing this request: ```py\n{}: {}\n```'
await bot.say(fmt.format(type(e).__name__, e))
2016-07-08 10:10:24 +12:00
2016-07-08 01:05:42 +12:00
@bot.command(pass_context=True)
async def roll(ctx):
try:
num = random.randint(1, 6)
fmt = '{0.author.name} has rolled a die and got the number {1}!'
await bot.say(fmt.format(ctx.message, num))
except Exception as e:
fmt = 'An error occurred while processing this request: ```py\n{}: {}\n```'
await bot.say(fmt.format(type(e).__name__, e))
2016-07-08 10:10:24 +12:00
2016-07-08 01:05:42 +12:00
@bot.command(no_pm=True)
@battled()
async def accept():
try:
if not battling:
return
num = random.randint(1, 100)
fmt = battleWins[random.randint(0, len(battleWins) - 1)]
if num <= 50:
await bot.say(fmt.format(battleP1.mention, battleP2.mention))
2016-07-08 10:10:24 +12:00
updateBattleRecords(battleP1, battleP2)
2016-07-08 01:05:42 +12:00
elif num > 50:
await bot.say(fmt.format(battleP2.mention, battleP1.mention))
2016-07-08 10:10:24 +12:00
updateBattleRecords(battleP2, battleP1)
2016-07-08 01:05:42 +12:00
battlingOff()
except Exception as e:
fmt = 'An error occurred while processing this request: ```py\n{}: {}\n```'
await bot.say(fmt.format(type(e).__name__, e))
2016-07-08 10:10:24 +12:00
2016-07-08 01:05:42 +12:00
@bot.command(no_pm=True)
@battled()
async def decline():
try:
if not battling:
return
await bot.say("{0} has chickened out! {1} wins by default!".format(battleP2.mention, battleP1.mention))
2016-07-08 10:10:24 +12:00
updateBattleRecords(battleP1, battleP2)
2016-07-08 01:05:42 +12:00
battlingOff()
except Exception as e:
fmt = 'An error occurred while processing this request: ```py\n{}: {}\n```'
await bot.say(fmt.format(type(e).__name__, e))
2016-07-08 10:10:24 +12:00
2016-07-08 01:05:42 +12:00
@bot.command(pass_context=True)
async def commands(ctx):
try:
fmt = 'Hello {0.author.name}!\n\nThis is {1.user.name}! '
fmt += 'Here is a list of commands that you have access to '
fmt += '(please note that this only includes the commands that you have access to):'
await bot.whisper(fmt.format(ctx.message, bot))
2016-07-08 10:10:24 +12:00
fmt2 = 'I have just sent you a PM, containing all the commands you have access to {0.author.mention}!'
2016-07-08 01:05:42 +12:00
ocmds = 'Commands for everyone: ```'
for com, act in openCommands.items():
ocmds += commandPrefix + com + ": " + act + "\n\n"
ocmds += '```'
await bot.whisper(ocmds)
vcmds = 'Voice Commands: ```'
for com, act in voiceCommands.items():
vcmds += commandPrefix + com + ": " + act + "\n\n"
vcmds += '```'
await bot.whisper(vcmds)
if ctx.message.author.top_role.permissions.kick_members:
if len(modCommands) > 0:
mcmds = 'Moderator Commands: ```'
for com, act in modCommands.items():
mcmds += commandPrefix + com + ": " + act + "\n\n"
mcmds += '```'
await bot.whisper(mcmds)
if ctx.message.author.top_role.permissions.manage_server:
if len(adminCommands) > 0:
acmds = 'Admin Commands: ```'
for com, act in adminCommands.items():
acmds += commandPrefix + com + ": " + act + "\n\n"
acmds += '```'
await bot.whisper(acmds)
if ctx.message.author.id == ownerID:
if len(ownerCommands) > 0:
owncmds = 'Owner Commands: ```'
for com, act in ownerCommands.items():
owncmds += commandPrefix + com + ": " + act + "\n\n"
owncmds += '```'
await bot.whisper(owncmds)
await bot.say(fmt2.format(ctx.message))
except Exception as e:
fmt = 'An error occurred while processing this request: ```py\n{}: {}\n```'
await bot.say(fmt.format(type(e).__name__, e))
2016-07-08 10:10:24 +12:00
@bot.command(pass_context=True, no_pm=True)
2016-07-08 01:05:42 +12:00
async def battle(ctx):
try:
global battleP1
global battleP2
global battling
if battling:
return
if len(ctx.message.mentions) == 0:
await bot.say("You must mention someone in the room " + ctx.message.author.mention + "!")
return
if len(ctx.message.mentions) > 1:
await bot.say("You cannot battle more than one person at once!")
return
player2 = ctx.message.mentions[0]
if ctx.message.author.id == player2.id:
await bot.say("Why would you want to battle yourself? Suicide is not the answer")
return
if bot.user.id == player2.id:
await bot.say("I always win, don't even try it.")
return
fmt = "{0.mention} has challenged you to a battle {1.mention}\n!accept or !decline"
battleP1 = ctx.message.author
battleP2 = player2
await bot.say(fmt.format(ctx.message.author, player2))
t = Timer(180, battlingOff)
t.start()
battling = True
except Exception as e:
fmt = 'An error occurred while processing this request: ```py\n{}: {}\n```'
await bot.say(fmt.format(type(e).__name__, e))
2016-07-08 10:10:24 +12:00
@bot.command(pass_context=True, no_pm=True)
2016-07-08 01:05:42 +12:00
async def boop(ctx):
try:
if len(ctx.message.mentions) == 0:
await bot.say("You must mention someone in the room " + ctx.message.author.mention + "!")
return
if len(ctx.message.mentions) > 1:
await bot.say("You cannot boop more than one person at once!")
return
boopee = ctx.message.mentions[0]
booper = ctx.message.author
if boopee.id == booper.id:
await bot.say("You can't boop yourself! Silly...")
return
if boopee.id == bot.user.id:
await bot.say("Why the heck are you booping me? Get away from me >:c")
return
cursor = connection.cursor()
cursor.execute('use {0}'.format(db_boops))
sql = "show tables like '" + str(booper.id) + "'"
cursor.execute(sql)
result = cursor.fetchone()
amount = 1
# Booper's table exists, continue
if result is not None:
sql = "select `amount` from `" + booper.id + "` where id='" + str(boopee.id) + "'"
cursor.execute(sql)
result = cursor.fetchone()
# Boopee's entry exists, continue
if result is not None:
amount = result.get('amount') + 1
sql = "update `" + str(booper.id) + "` set amount = " + str(amount) + " where id=" + str(
boopee.id)
cursor.execute(sql)
# Boopee does not exist, need to create the field for it
else:
sql = "insert into `" + str(booper.id) + "` (id,amount) values ('" + str(boopee.id) + "',1)"
cursor.execute(sql)
# Booper's table does not exist, need to create the table
else:
2016-07-08 10:10:24 +12:00
sql = "create table `" + str(booper.id) + \
"` (`id` varchar(255) not null,`amount` int(11) not null" + \
",primary key (`id`)) engine=InnoDB default charset=utf8 collate=utf8_bin"
2016-07-08 01:05:42 +12:00
cursor.execute(sql)
sql = "insert into `" + str(booper.id) + "` (id,amount) values ('" + str(boopee.id) + "',1)"
cursor.execute(sql)
fmt = "{0.mention} has just booped you {1.mention}! That's {2} times now!"
await bot.say(fmt.format(booper, boopee, amount))
connection.commit()
except Exception as e:
fmt = 'An error occurred while processing this request: ```py\n{}: {}\n```'
await bot.say(fmt.format(type(e).__name__, e))
2016-07-08 10:10:24 +12:00
@bot.command(pass_context=True, no_pm=True)
2016-07-08 01:05:42 +12:00
async def mostboops(ctx):
try:
cursor = connection.cursor()
cursor.execute('use {0}'.format(db_boops))
sql = "select id,amount from `{0}` where amount=(select MAX(amount) from `{0}`)".format(ctx.message.author.id)
cursor.execute(sql)
result = cursor.fetchone()
member = determineId(result.get('id'))
2016-07-08 10:10:24 +12:00
await bot.say("{0} you have booped {1} the most amount of times, coming in at {2} times".format(
ctx.message.author.mention, member.mention, result.get('amount')))
2016-07-08 01:05:42 +12:00
connection.commit()
except Exception as e:
fmt = 'An error occurred while processing this request: ```py\n{}: {}\n```'
await bot.say(fmt.format(type(e).__name__, e))
2016-07-08 10:10:24 +12:00
@bot.command(pass_context=True, no_pm=True)
2016-07-08 01:05:42 +12:00
async def mostwins(ctx):
try:
members = ctx.message.server.members
cursor = connection.cursor()
cursor.execute('use {0}'.format(db_default))
sql = "select * from battle_records"
cursor.execute(sql)
result = cursor.fetchall()
count = 0
fmt = []
if result is not None:
for r in result:
member = determineId(r['id'])
if member in members:
record = r['record']
winAmt = int(record.split('-')[0])
loseAmt = int(record.split('-')[1])
2016-07-08 10:10:24 +12:00
percentage = winAmt / (winAmt + loseAmt)
2016-07-08 01:05:42 +12:00
position = count
indexPercentage = 0
if count > 0:
2016-07-08 10:10:24 +12:00
indexRecord = re.search('\d+-\d+', fmt[position - 1]).group(0)
2016-07-08 01:05:42 +12:00
indexWin = int(indexRecord.split('-')[0])
indexLose = int(indexRecord.split('-')[1])
indexPercentage = indexWin / (indexWin + indexLose)
while position > 0 and indexPercentage < percentage:
position -= 1
2016-07-08 10:10:24 +12:00
indexRecord = re.search('\d+-\d+', fmt[position - 1]).group(0)
2016-07-08 01:05:42 +12:00
indexWin = int(indexRecord.split('-')[0])
indexLose = int(indexRecord.split('-')[1])
indexPercentage = indexWin / (indexWin + indexLose)
2016-07-08 10:10:24 +12:00
fmt.insert(position, "{0} has a battling record of {1}".format(member.name, record))
count += 1
for index in range(0, len(fmt)):
fmt[index] = "{0}) {1}".format(index + 1, fmt[index])
2016-07-08 01:05:42 +12:00
connection.commit()
if len(fmt) == 0:
await bot.say("```No battling records found from any members in this server```")
return
await bot.say("```{}```".format("\n".join(fmt)))
except Exception as e:
fmt = 'An error occurred while processing this request: ```py\n{}: {}\n```'
await bot.say(fmt.format(type(e).__name__, e))
2016-07-08 10:10:24 +12:00
2016-07-08 01:05:42 +12:00
def determineId(ID):
if type(ID) is int:
2016-07-08 10:10:24 +12:00
ID = str(ID)
2016-07-08 01:05:42 +12:00
member = discord.utils.find(lambda m: m.id == ID, bot.get_all_members())
if member is not None:
return member
msg = discord.utils.find(lambda m: m.id == ID, bot.messages)
if msg is not None:
return msg
server = discord.utils.find(lambda s: s.id == ID, bot.servers)
if server is not None:
return server
channel = discord.utils.find(lambda c: c.id == ID, bot.get_all_channels())
if channel is not None:
return channel
2016-07-08 10:10:24 +12:00
def updateBattleRecords(winner, loser):
2016-07-08 01:05:42 +12:00
cursor = connection.cursor()
cursor.execute('use {0}'.format(db_default))
2016-07-08 10:10:24 +12:00
# Update winners records
2016-07-08 01:05:42 +12:00
sql = "select record from battle_records where id={0}".format(winner.id)
cursor.execute(sql)
result = cursor.fetchone()
if result is not None:
result = result['record'].split('-')
2016-07-08 10:10:24 +12:00
result[0] = str(int(result[0]) + 1)
sql = "update battle_records set record ='{0}' where id='{1}'".format("-".join(result), winner.id)
2016-07-08 01:05:42 +12:00
cursor.execute(sql)
else:
sql = "insert into battle_records (id,record) values ('{0}','1-0')".format(winner.id)
cursor.execute(sql)
2016-07-08 10:10:24 +12:00
2016-07-08 01:05:42 +12:00
connection.commit()
2016-07-08 10:10:24 +12:00
# Update losers records
2016-07-08 01:05:42 +12:00
sql = "select record from battle_records where id={0}".format(loser.id)
cursor.execute(sql)
result = cursor.fetchone()
if result is not None:
result = result['record'].split('-')
2016-07-08 10:10:24 +12:00
result[1] = str(int(result[1]) + 1)
sql = "update battle_records set record ='{0}' where id='{1}'".format('-'.join(result), loser.id)
2016-07-08 01:05:42 +12:00
cursor.execute(sql)
else:
sql = "insert into battle_records (id,record) values ('{0}','0-1')".format(loser.id)
cursor.execute(sql)
2016-07-08 10:10:24 +12:00
2016-07-08 01:05:42 +12:00
connection.commit()
2016-07-08 10:10:24 +12:00
2016-07-08 01:05:42 +12:00
def checkSetup(cursor):
try:
cursor.execute('use {}'.format(db_default))
except pymysql.OperationalError:
return "Error: default_db"
else:
try:
cursor.execute('describe battle_records')
except pymysql.ProgrammingError:
2016-07-08 10:10:24 +12:00
# battle_records does not exist, create it
sql = "create table `battle_records` (`id` varchar(32) not null,`record` varchar(32) not null," + \
"primary key (`id`)) engine=InnoDB default charset=utf8 collate=utf8_bin"
2016-07-08 01:05:42 +12:00
cursor.execute(sql)
connection.commit()
try:
cursor.execute('describe restart_server')
except pymysql.ProgrammingError:
2016-07-08 10:10:24 +12:00
# restart_server does not exist, create it
sql = "create table `restart_server` (`id` int(11) not null auto_increment,`channel_id` varchar(32)" + \
"not null,primary key (`id`)) engine=InnoDB default charset=utf8 collate=utf8_bin;"
2016-07-08 01:05:42 +12:00
cursor.execute(sql)
connection.commit()
sql = "insert into restart_server (id,channel_id) values (1,'0')"
cursor.execute(sql)
connection.commit()
try:
cursor.execute('use {}'.format(db_boops))
except pymysql.OperationalError:
return "Error: boop_db"
2016-07-08 10:10:24 +12:00
2016-07-08 01:05:42 +12:00
db_default = global_config.get("db_default")
db_boops = global_config.get("db_boops")
nsfwChannels = global_config.get("nsfw_channel")
connection = pymysql.connect(host=global_config.get("db_host"), user=global_config.get("db_user"),
2016-07-08 10:10:24 +12:00
password=global_config.get("db_user_pass"), charset='utf8mb4',
cursorclass=pymysql.cursors.DictCursor)
2016-07-08 01:05:42 +12:00
2016-07-08 10:10:24 +12:00
battling = False
battleP1 = None
battleP2 = None
2016-07-08 01:05:42 +12:00
2016-07-08 10:10:24 +12:00
battleWins = global_config.get("battleWins", [])
defaultStatus = global_config.get("default_status", "")
botToken = global_config.get("bot_token", "")
ownerID = global_config.get("owner_id", "")
2016-07-08 01:05:42 +12:00
2016-07-08 10:10:24 +12:00
modCommands = global_config.get("modCommands", {})
adminCommands = global_config.get("adminCommands", {})
openCommands = global_config.get("openCommands", {})
ownerCommands = global_config.get("ownerCommands", {})
voiceCommands = global_config.get("voiceCommands", {})
2016-07-08 01:05:42 +12:00
getter = re.compile(r'`(?!`)(.*?)`')
2016-07-08 10:10:24 +12:00
multi = re.compile(r'```(.*?)```', re.DOTALL)
2016-07-08 01:05:42 +12:00
loop = asyncio.get_event_loop()
try:
bot.run(botToken)
except:
2016-07-08 10:10:24 +12:00
quit()