1
0
Fork 0
mirror of synced 2024-05-07 06:02:24 +12:00

Modified file to match PEP-8

This commit is contained in:
phxntxm 2016-07-07 17:10:24 -05:00
parent 2feaf487e2
commit 2a9c64f7aa

202
bot.py
View file

@ -16,39 +16,55 @@ import yaml
import playlist
from threading import Timer
with open("/home/phxntx5/public_html/bot/config.yml","r") as f:
with open("/home/phxntx5/public_html/bot/config.yml", "r") as f:
global_config = yaml.load(f)
botDescription = global_config.get("description")
commandPrefix = global_config.get("command_prefix")
#Custom predicates
# Custom predicates
def isOwner():
def predicate(ctx):
return ctx.message.author.id==ownerID
return ctx.message.author.id == ownerID
return commands.check(predicate)
def isMod():
def predicate(ctx):
return ctx.message.author.top_role.permissions.kick_members
return commands.check(predicate)
def isAdmin():
def predicate(ctx):
return ctx.message.author.top_role.permissions.manage_server
return commands.check(predicate)
def isPM():
def predicate(ctx):
return ctx.message.channel.is_private
return commands.check(predicate)
def battled():
def predicate(ctx):
return ctx.message.author==battleP2
return ctx.message.author == battleP2
return commands.check(predicate)
bot = commands.Bot(command_prefix=commandPrefix,description=botDescription)
bot = commands.Bot(command_prefix=commandPrefix, description=botDescription)
music = playlist.Music(bot)
bot.add_cog(music)
#Turn battling off, reset users
# Turn battling off, reset users
def battlingOff():
global battleP1
global battleP2
@ -57,36 +73,40 @@ def battlingOff():
battleP1 = ""
battleP2 = ""
#Bot event overrides
# Bot event overrides
@bot.event
async def on_ready():
#Change the status upon connection to the default status
game = discord.Game(name=defaultStatus,type=0)
# Change the status upon connection to the default status
game = discord.Game(name=defaultStatus, type=0)
await bot.change_status(game)
cursor = connection.cursor()
'''success = checkSetup(cursor)
if success=="Error: default_db":
await bot-send_message(determineId(ownerID),("The bot ran into an error while checking the database information."
"Please double check the config.yml file, make sure the database is created, and the user has access to the database"))'''
fmt = "The bot ran into an error while checking the database information."
await bot.send_message(determineId(ownerID),fmt)'''
cursor.execute('use {0}'.format(db_default))
cursor.execute('select channel_id from restart_server where id=1')
result = cursor.fetchone()['channel_id']
if int(result)!=0:
await bot.send_message(determineId(result),"I have just finished restarting!")
if int(result) != 0:
await bot.send_message(determineId(result), "I have just finished restarting!")
cursor.execute('update restart_server set channel_id=0 where id=1')
connection.commit()
@bot.event
async def on_member_join(member):
await bot.say("Welcome to the '{0.server.name}' server {0.mention}!".format(member))
@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))
#Bot commands
# Bot commands
@bot.command()
async def joke():
try:
@ -97,6 +117,7 @@ async def joke():
fmt = 'An error occurred while processing this request: ```py\n{}: {}\n```'
await bot.say(fmt.format(type(e).__name__, e))
@bot.command(pass_context=True)
@isOwner()
async def restart(ctx):
@ -113,6 +134,7 @@ async def restart(ctx):
fmt = 'An error occurred while processing this request: ```py\n{}: {}\n```'
await bot.say(fmt.format(type(e).__name__, e))
@bot.command(pass_context=True)
@isOwner()
async def py(ctx):
@ -128,11 +150,13 @@ async def py(ctx):
else:
def r(v):
loop.create_task(bot.say("```{0}```".format(v)))
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))
@bot.command(pass_context=True)
@isOwner()
async def shutdown(ctx):
@ -145,6 +169,7 @@ async def shutdown(ctx):
fmt = 'An error occurred while processing this request: ```py\n{}: {}\n```'
await bot.say(fmt.format(type(e).__name__, e))
@bot.command()
@isOwner()
async def avatar(content):
@ -156,6 +181,7 @@ async def avatar(content):
fmt = 'An error occurred while processing this request: ```py\n{}: {}\n```'
await bot.say(fmt.format(type(e).__name__, e))
@bot.command()
@isOwner()
async def name(newNick):
@ -169,7 +195,8 @@ async def name(newNick):
fmt = 'An error occurred while processing this request: ```py\n{}: {}\n```'
await bot.say(fmt.format(type(e).__name__, e))
@bot.command(pass_context=True,no_pm=True)
@bot.command(pass_context=True, no_pm=True)
@isOwner()
async def leave(ctx):
try:
@ -179,9 +206,10 @@ async def leave(ctx):
fmt = 'An error occurred while processing this request: ```py\n{}: {}\n```'
await bot.say(fmt.format(type(e).__name__, e))
@bot.command()
@isMod()
async def status(*stat : str):
async def status(*stat: str):
try:
newStatus = ' '.join(stat)
game = discord.Game(name=newStatus, type=0)
@ -191,9 +219,10 @@ async def status(*stat : str):
fmt = 'An error occurred while processing this request: ```py\n{}: {}\n```'
await bot.say(fmt.format(type(e).__name__, e))
@bot.command(pass_context=True)
@isMod()
async def say(ctx,*msg : str):
async def say(ctx, *msg: str):
try:
msg = ' '.join(msg)
await bot.say(msg)
@ -201,15 +230,16 @@ async def say(ctx,*msg : str):
except Exception as e:
fmt = 'An error occurred while processing this request: ```py\n{}: {}\n```'
await bot.say(fmt.format(type(e).__name__, e))
@bot.command()
async def urban(*msg : str):
async def urban(*msg: str):
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'))
if len(data['list'])==0:
if len(data['list']) == 0:
await bot.say("No result with that term!")
else:
await bot.say(data['list'][0]['definition'])
@ -218,16 +248,17 @@ async def urban(*msg : str):
except Exception as e:
fmt = 'An error occurred while processing this request: ```py\n{}: {}\n```'
await bot.say(fmt.format(type(e).__name__, e))
@bot.command(pass_context=True)
async def derpi(ctx,*search : str):
async def derpi(ctx, *search: str):
try:
if len(search) > 0:
url = 'https://derpibooru.org/search.json?q='
query = '+'.join(search)
url += query
if ctx.message.channel.id in nsfwChannels:
url+=",+explicit&filter_id=95938"
url += ",+explicit&filter_id=95938"
# 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)
@ -253,6 +284,7 @@ async def derpi(ctx,*search : str):
fmt = 'An error occurred while processing this request: ```py\n{}: {}\n```'
await bot.say(fmt.format(type(e).__name__, e))
@bot.command(pass_context=True)
async def roll(ctx):
try:
@ -263,6 +295,7 @@ async def roll(ctx):
fmt = 'An error occurred while processing this request: ```py\n{}: {}\n```'
await bot.say(fmt.format(type(e).__name__, e))
@bot.command(no_pm=True)
@battled()
async def accept():
@ -273,15 +306,16 @@ async def accept():
fmt = battleWins[random.randint(0, len(battleWins) - 1)]
if num <= 50:
await bot.say(fmt.format(battleP1.mention, battleP2.mention))
updateBattleRecords(battleP1,battleP2)
updateBattleRecords(battleP1, battleP2)
elif num > 50:
await bot.say(fmt.format(battleP2.mention, battleP1.mention))
updateBattleRecords(battleP2,battleP1)
updateBattleRecords(battleP2, battleP1)
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))
@bot.command(no_pm=True)
@battled()
async def decline():
@ -289,12 +323,13 @@ async def decline():
if not battling:
return
await bot.say("{0} has chickened out! {1} wins by default!".format(battleP2.mention, battleP1.mention))
updateBattleRecords(battleP1,battleP2)
updateBattleRecords(battleP1, battleP2)
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))
@bot.command(pass_context=True)
async def commands(ctx):
try:
@ -302,8 +337,8 @@ async def commands(ctx):
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))
fmt2 = 'I have just sent you a private message, containing all the commands you have access to {0.author.mention}!'
fmt2 = 'I have just sent you a PM, containing all the commands you have access to {0.author.mention}!'
ocmds = 'Commands for everyone: ```'
for com, act in openCommands.items():
ocmds += commandPrefix + com + ": " + act + "\n\n"
@ -340,7 +375,8 @@ async def commands(ctx):
fmt = 'An error occurred while processing this request: ```py\n{}: {}\n```'
await bot.say(fmt.format(type(e).__name__, e))
@bot.command(pass_context=True,no_pm=True)
@bot.command(pass_context=True, no_pm=True)
async def battle(ctx):
try:
global battleP1
@ -372,7 +408,8 @@ async def battle(ctx):
fmt = 'An error occurred while processing this request: ```py\n{}: {}\n```'
await bot.say(fmt.format(type(e).__name__, e))
@bot.command(pass_context=True,no_pm=True)
@bot.command(pass_context=True, no_pm=True)
async def boop(ctx):
try:
if len(ctx.message.mentions) == 0:
@ -413,8 +450,9 @@ async def boop(ctx):
cursor.execute(sql)
# Booper's table does not exist, need to create the table
else:
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"
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"
cursor.execute(sql)
sql = "insert into `" + str(booper.id) + "` (id,amount) values ('" + str(boopee.id) + "',1)"
cursor.execute(sql)
@ -425,7 +463,8 @@ async def boop(ctx):
fmt = 'An error occurred while processing this request: ```py\n{}: {}\n```'
await bot.say(fmt.format(type(e).__name__, e))
@bot.command(pass_context=True,no_pm=True)
@bot.command(pass_context=True, no_pm=True)
async def mostboops(ctx):
try:
cursor = connection.cursor()
@ -434,13 +473,15 @@ async def mostboops(ctx):
cursor.execute(sql)
result = cursor.fetchone()
member = determineId(result.get('id'))
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')))
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')))
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))
@bot.command(pass_context=True,no_pm=True)
@bot.command(pass_context=True, no_pm=True)
async def mostwins(ctx):
try:
members = ctx.message.server.members
@ -459,26 +500,26 @@ async def mostwins(ctx):
winAmt = int(record.split('-')[0])
loseAmt = int(record.split('-')[1])
percentage = winAmt / ( winAmt + loseAmt )
percentage = winAmt / (winAmt + loseAmt)
position = count
indexPercentage = 0
if count > 0:
indexRecord = re.search('\d+-\d+',fmt[position-1]).group(0)
indexRecord = re.search('\d+-\d+', fmt[position - 1]).group(0)
indexWin = int(indexRecord.split('-')[0])
indexLose = int(indexRecord.split('-')[1])
indexPercentage = indexWin / (indexWin + indexLose)
while position > 0 and indexPercentage < percentage:
position -= 1
indexRecord = re.search('\d+-\d+',fmt[position-1]).group(0)
indexRecord = re.search('\d+-\d+', fmt[position - 1]).group(0)
indexWin = int(indexRecord.split('-')[0])
indexLose = int(indexRecord.split('-')[1])
indexPercentage = indexWin / (indexWin + indexLose)
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])
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])
connection.commit()
if len(fmt) == 0:
await bot.say("```No battling records found from any members in this server```")
@ -488,9 +529,10 @@ async def mostwins(ctx):
fmt = 'An error occurred while processing this request: ```py\n{}: {}\n```'
await bot.say(fmt.format(type(e).__name__, e))
def determineId(ID):
if type(ID) is int:
ID=str(ID)
ID = str(ID)
member = discord.utils.find(lambda m: m.id == ID, bot.get_all_members())
if member is not None:
return member
@ -504,40 +546,42 @@ def determineId(ID):
if channel is not None:
return channel
def updateBattleRecords(winner,loser):
def updateBattleRecords(winner, loser):
cursor = connection.cursor()
cursor.execute('use {0}'.format(db_default))
#Update winners records
# Update winners records
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('-')
result[0] = str(int(result[0])+1)
sql = "update battle_records set record ='{0}' where id='{1}'".format("-".join(result),winner.id)
result[0] = str(int(result[0]) + 1)
sql = "update battle_records set record ='{0}' where id='{1}'".format("-".join(result), winner.id)
cursor.execute(sql)
else:
sql = "insert into battle_records (id,record) values ('{0}','1-0')".format(winner.id)
cursor.execute(sql)
connection.commit()
#Update losers records
# Update losers records
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('-')
result[1] = str(int(result[1])+1)
sql = "update battle_records set record ='{0}' where id='{1}'".format('-'.join(result),loser.id)
result[1] = str(int(result[1]) + 1)
sql = "update battle_records set record ='{0}' where id='{1}'".format('-'.join(result), loser.id)
cursor.execute(sql)
else:
sql = "insert into battle_records (id,record) values ('{0}','0-1')".format(loser.id)
cursor.execute(sql)
connection.commit()
def checkSetup(cursor):
try:
cursor.execute('use {}'.format(db_default))
@ -547,15 +591,17 @@ def checkSetup(cursor):
try:
cursor.execute('describe battle_records')
except pymysql.ProgrammingError:
#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"
# 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"
cursor.execute(sql)
connection.commit()
try:
cursor.execute('describe restart_server')
except pymysql.ProgrammingError:
#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;"
# 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;"
cursor.execute(sql)
connection.commit()
sql = "insert into restart_server (id,channel_id) values (1,'0')"
@ -565,32 +611,34 @@ def checkSetup(cursor):
cursor.execute('use {}'.format(db_boops))
except pymysql.OperationalError:
return "Error: boop_db"
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"),
password=global_config.get("db_user_pass"),charset='utf8mb4',cursorclass=pymysql.cursors.DictCursor)
password=global_config.get("db_user_pass"), charset='utf8mb4',
cursorclass=pymysql.cursors.DictCursor)
battling=False
battleP1=None
battleP2=None
battling = False
battleP1 = None
battleP2 = None
battleWins = global_config.get("battleWins",[])
defaultStatus = global_config.get("default_status","")
botToken = global_config.get("bot_token","")
ownerID = global_config.get("owner_id","")
battleWins = global_config.get("battleWins", [])
defaultStatus = global_config.get("default_status", "")
botToken = global_config.get("bot_token", "")
ownerID = global_config.get("owner_id", "")
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",{})
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", {})
getter = re.compile(r'`(?!`)(.*?)`')
multi = re.compile(r'```(.*?)```',re.DOTALL)
multi = re.compile(r'```(.*?)```', re.DOTALL)
loop = asyncio.get_event_loop()
try:
bot.run(botToken)
except:
quit()
quit()