1
0
Fork 0
mirror of synced 2024-05-17 19:12:33 +12:00

Git rid of useless references, and updated for pep8

This commit is contained in:
phxntxm 2016-07-17 16:10:12 -05:00
parent 362270510f
commit a9267f106e
9 changed files with 88 additions and 94 deletions

18
bot.py
View file

@ -1,8 +1,6 @@
#!/usr/local/bin/python3.5
import discord
import traceback
import sys
from discord.ext import commands
from cogs.utils import config
@ -27,7 +25,7 @@ async def on_ready():
if channel_id != 0:
destination = discord.utils.find(lambda m: m.id == channel_id, bot.get_all_channels())
await bot.send_message(destination, "I have just finished restarting!")
config.saveContent('restart_server',0)
config.saveContent('restart_server', 0)
@bot.event
@ -44,7 +42,8 @@ async def on_member_join(member):
@bot.event
async def on_member_remove(member):
await bot.send_message(member.server, "{0} has left the server, I hope it wasn't because of something I said :c".format(member))
await bot.send_message(member.server,
"{0} has left the server, I hope it wasn't because of something I said :c".format(member))
@bot.event
@ -58,15 +57,16 @@ async def on_command_error(error, ctx):
elif isinstance(error, commands.CheckFailure):
fmt = "You can't tell me what to do!"
await bot.send_message(ctx.message.channel, fmt)
#elif isinstance(error, commands.CommandInvokeError):
#f = open("/home/phxntx5/public_html/Bonfire/error_log", 'w')
#print('In {0.command.qualified_name}:'.format(ctx), file=f)
#traceback.print_tb(error.original.__traceback__, file=f)
#print('{0.__class__.__name__}: {0}'.format(error.original), file=f)
# elif isinstance(error, commands.CommandInvokeError):
# f = open("/home/phxntx5/public_html/Bonfire/error_log", 'w')
# print('In {0.command.qualified_name}:'.format(ctx), file=f)
# traceback.print_tb(error.original.__traceback__, file=f)
# print('{0.__class__.__name__}: {0}'.format(error.original), file=f)
else:
fmt = 'An error occurred while processing this request: ```py\n{}: {}\n```'
await bot.send_message(ctx.message.channel, fmt.format(type(error).__name__, error))
if __name__ == '__main__':
for e in extensions:
bot.load_extension(e)

View file

@ -34,16 +34,16 @@ class Core:
perms.attach_files = True
await self.bot.say("Use this URL to add me to a server that you'd like!\n{}"
.format(discord.utils.oauth_url('183748889814237186', perms)))
@commands.command(pass_context=True)
@checks.customPermsOrRole("none")
async def doggo(self, ctx):
"""Use this to print a random doggo image.
Doggo is love, doggo is life."""
os.chdir('/home/phxntx5/public_html/Bonfire/images')
f = glob.glob('doggo*')[random.randint(0,len(glob.glob('doggo*'))-1)]
f = glob.glob('doggo*')[random.randint(0, len(glob.glob('doggo*')) - 1)]
f = open(f, 'rb')
await self.bot.send_file(ctx.message.channel,f)
await self.bot.send_file(ctx.message.channel, f)
f.close()
@commands.command()
@ -79,16 +79,16 @@ class Core:
url = 'https://derpibooru.org/search.json?q='
query = '+'.join(search)
url += query
nsfw_channels = config.getContent("nsfw_channels")
if ctx.message.channel.id in nsfw_channels:
url += ",+explicit&filter_id=95938"
# Get the response from derpibooru and parse the 'searc' result from it
response = urllib.request.urlopen(url)
data = json.loads(response.read().decode('utf-8'))
results = data['search']
# Get the link if it exists, if not return saying no results found
if len(results) > 0:
index = random.randint(0, len(results) - 1)
@ -100,7 +100,7 @@ class Core:
# If no search term was provided, search for a random image
with urllib.request.urlopen('https://derpibooru.org/images/random') as response:
imageLink = response.geturl()
# Post link to my link shortening site
# discord still shows image previews through redirects so this is not an issue.
url = 'https://shpro.link/redirect.php/'
@ -169,10 +169,10 @@ class Core:
for t in tags:
if t['tag'] == tag and t['server_id'] == ctx.message.server.id:
t['result'] = tag_result
config.saveContent('tags',tags)
config.saveContent('tags', tags)
return
tags.append({'server_id':ctx.message.server.id,'tag':tag,'result':tag_result})
config.saveContent('tags',tags)
tags.append({'server_id': ctx.message.server.id, 'tag': tag, 'result': tag_result})
config.saveContent('tags', tags)
await self.bot.say("I have just added the tag `{0}`! You can call this tag by entering !tag {0}".format(tag))
@tag.command(name='delete', aliases=['remove', 'stop'], pass_context=True, no_pm=True)
@ -184,12 +184,13 @@ class Core:
tags = config.getContent('tags')
result = [t for t in tags if t['tag'] == tag and t['server_id'] == ctx.message.server.id]
if len(result) == 0:
await self.bot.say("The tag {} does not exist! You can't remove something if it doesn't exist...".format(tag))
await self.bot.say(
"The tag {} does not exist! You can't remove something if it doesn't exist...".format(tag))
return
for t in tags:
if t['tag'] == tag and t['server_id'] == ctx.message.server.id:
tags.remove(t)
config.saveContent('tags',tags)
config.saveContent('tags', tags)
await self.bot.say('I have just removed the tag `{}`'.format(tag))

View file

@ -33,12 +33,13 @@ def updateBattleRecords(winner, loser):
result[1] = str(int(result[1]) + 1)
battles[loser.id] = "-".join(result)
else:
battles = {winner.id:"1-0",loser.id:"0-1"}
config.saveContent('battle_records',battles)
battles = {winner.id: "1-0", loser.id: "0-1"}
config.saveContent('battle_records', battles)
class Interaction:
"""Commands that interact with another user"""
def __init__(self, bot):
self.bot = bot
@ -87,7 +88,7 @@ class Interaction:
await self.bot.say(fmt.format(battleP2.mention, battleP1.mention))
updateBattleRecords(battleP2, battleP1)
battlingOff()
@commands.command(pass_context=True, no_pm=True)
@checks.customPermsOrRole("none")
async def decline(self, ctx):
@ -97,7 +98,7 @@ class Interaction:
await self.bot.say("{0} has chickened out! {1} wins by default!".format(battleP2.mention, battleP1.mention))
updateBattleRecords(battleP1, battleP2)
battlingOff()
@commands.command(pass_context=True, no_pm=True)
@checks.customPermsOrRole("none")
async def boop(self, ctx, boopee: discord.Member):
@ -122,7 +123,7 @@ class Interaction:
amount = 1
booper_boops = boops.get(ctx.message.author.id)
if booper_boops is None:
boops[ctx.message.author.id] = {boopee.id:1}
boops[ctx.message.author.id] = {boopee.id: 1}
elif booper_boops.get(boopee.id) is None:
booper_boops[boopee.id] = 1
boops[ctx.message.author.id] = booper_boops
@ -130,8 +131,8 @@ class Interaction:
amount = booper_boops.get(boopee.id) + 1
booper_boops[boopee.id] = amount
boops[ctx.message.author.id] = booper_boops
config.saveContent('boops',boops)
config.saveContent('boops', boops)
fmt = "{0.mention} has just booped you {1.mention}! That's {2} times now!"
await self.bot.say(fmt.format(booper, boopee, amount))

View file

@ -1,7 +1,6 @@
from discord.ext import commands
from .utils import checks
from .utils import config
import pymysql
import discord
import re
@ -29,19 +28,19 @@ class Mod:
await self.bot.say("This channel is already registered as 'nsfw'!")
else:
nsfw_channels.append(ctx.message.channel.id)
config.saveContent('nsfw_channels',nsfw_channels)
config.saveContent('nsfw_channels', nsfw_channels)
await self.bot.say("This channel has just been registered as 'nsfw'! Have fun you naughties ;)")
@nsfw.command(name="remove", aliases=["delete"], pass_context=True)
@nsfw.command(name="remove", aliases=["delete"], pass_context=True, no_pm=True)
@checks.customPermsOrRole("kick_members")
async def nsfw_remove(self, ctx, no_pm=True):
async def nsfw_remove(self, ctx):
"""Removes this channel as a 'nsfw' channel"""
nsfw_channels = config.getContent('nsfw_channels')
if not ctx.message.channel.id in nsfw_channels:
if ctx.message.channel.id not in nsfw_channels:
await self.bot.say("This channel is not registered as a ''nsfw' channel!")
else:
nsfw_channels.remove(ctx.message.channel.id)
config.saveContent('nsfw_channels',nsfw_channels)
config.saveContent('nsfw_channels', nsfw_channels)
await self.bot.say("This channel has just been unregistered as a nsfw channel")
@commands.command(pass_context=True, no_pm=True)
@ -68,7 +67,7 @@ class Mod:
await self.bot.say("Valid permissions are: ```{}```".format("\n".join("{}".format(i) for i in valid_perms)))
return
command = " ".join(command)
custom_perms = config.getContent('custom_permissions')
if custom_perms is None:
await self.bot.say("There are no custom permissions setup on this server yet!")
@ -81,8 +80,8 @@ class Mod:
if command_perms is None:
await self.bot.say("That command has no custom permissions setup on it!")
else:
await self.bot.say("You need to have the permission `{}` " \
"to use the command `{}` in this server".format(command_perms,command))
await self.bot.say("You need to have the permission `{}` "
"to use the command `{}` in this server".format(command_perms, command))
@perms.command(name="add", aliases=["setup,create"], pass_context=True, no_pm=True)
@commands.has_permissions(manage_server=True)
@ -90,11 +89,11 @@ class Mod:
"""Sets up custom permissions on the provided command
Format must be 'perms add <command> <permission>'
If you want to open the command to everyone, provide 'none' as the permission"""
command = " ".join(msg[0:len(msg)-1])
permissions = msg[len(msg)-1]
command = " ".join(msg[0:len(msg) - 1])
permissions = msg[len(msg) - 1]
if permissions.lower() == "none":
permissions = "send_messages"
msg = msg[0:len(msg)-1]
msg = msg[0:len(msg) - 1]
count = 0
cmd = self.bot.commands.get(msg[count])
while isinstance(cmd, commands.Group):
@ -103,36 +102,35 @@ class Mod:
cmd = cmd.commands.get(msg[count])
except:
break
for check in cmd.checks:
if "isOwner" == check.__name__ or re.search("has_permissions",str(check)) is not None:
if "isOwner" == check.__name__ or re.search("has_permissions", str(check)) is not None:
await self.bot.say("This command cannot have custom permissions setup!")
return
if getattr(discord.Permissions, permissions, None) is None and not permissions.lower() == "none":
await self.bot.say("{} does not appear to be a valid permission! Valid permissions are: ```{}```"
.format(permissions, "\n".join(valid_perms)))
return
return
custom_perms = config.getContent('custom_permissions')
if custom_perms is None:
custom_perms = {}
server_perms = custom_perms.get(ctx.message.server.id)
if server_perms is None:
custom_perms[ctx.message.server.id] = {command:permissions}
custom_perms[ctx.message.server.id] = {command: permissions}
else:
server_perms[command] = permissions
custom_perms[ctx.message.server.id] = server_perms
config.saveContent('custom_permissions',custom_perms)
config.saveContent('custom_permissions', custom_perms)
await self.bot.say("I have just added your custom permissions; "
"you now need to have `{}` permissions to use the command `{}`".format(permissions, command))
@perms.command(name="remove", aliases=["delete"], pass_context=True, no_pm=True)
@commands.has_permissions(manage_server=True)
async def remove_perms(self, ctx, *command: str):
"""Removes the custom permissions setup on the command specified"""
cmd = " ".join(command)
sid = ctx.message.server.id
custom_perms = config.getContent('custom_permissions')
if custom_perms is None:
await self.bot.say("You do not have custom permissions setup on this server yet!")
@ -146,8 +144,9 @@ class Mod:
await self.bot.say("You do not have custom permissions setup on this command yet!")
return
del custom_perms[ctx.message.server.id][cmd]
config.saveContent('custom_permissions',custom_perms)
config.saveContent('custom_permissions', custom_perms)
await self.bot.say("I have just removed the custom permissions for {}!".format(cmd))
def setup(bot):
bot.add_cog(Mod(bot))

View file

@ -7,14 +7,17 @@ import urllib.parse
import urllib.request
import urllib.error
import json
import re
base_url = "https://owapi.net/api/v2/u/"
check_g_stats = ["eliminations","deaths",'kpd','wins','losses','time_played',
'cards','damage_done','healing_done','multikills']
check_o_stats = ['wins','losses']
check_g_stats = ["eliminations", "deaths", 'kpd', 'wins', 'losses', 'time_played',
'cards', 'damage_done', 'healing_done', 'multikills']
check_o_stats = ['wins', 'losses']
class Overwatch:
"""Class for viewing Overwatch stats"""
def __init__(self, bot):
self.bot = bot
@ -32,12 +35,12 @@ class Overwatch:
if user is None:
user = ctx.message.author
bt = config.getContent('overwatch').get(ctx.message.author.id)
if bt is None:
await self.bot.say("I do not have this user's battletag saved!")
return
await self.bot.say("Searching profile information....")
try:
if hero == "":
result = urllib.request.urlopen(base_url + "{}/stats/general".format(bt))
@ -45,7 +48,8 @@ class Overwatch:
fmt = "\n".join("{}: {}".format(i, r) for i, r in data['game_stats'].items() if i in check_g_stats)
fmt += "\n"
fmt += "\n".join("{}: {}".format(i, r) for i, r in data['overall_stats'].items() if i in check_o_stats)
await self.bot.say("Overwatch stats for {}: ```py\n{}```".format(user.name, fmt.title().replace("_", " ")))
await self.bot.say(
"Overwatch stats for {}: ```py\n{}```".format(user.name, fmt.title().replace("_", " ")))
else:
result = urllib.request.urlopen(base_url + "{}/heroes/{}".format(bt, hero.lower().replace('-', '')))
data = json.loads(result.read().decode('utf-8'))
@ -55,7 +59,7 @@ class Overwatch:
await self.bot.say("Overwatch stats for {} using the hero {}: ```py\n{}``` "
.format(user.name, hero.title(), fmt.title().replace("_", " ")))
except urllib.error.HTTPError as error:
error_no = int(re.search("\d+",str(error)).group(0))
error_no = int(re.search("\d+", str(error)).group(0))
if error_no == 500:
await self.bot.say("{} has not used the hero {} before!".format(user.name, hero.title()))
elif error_no == 404:
@ -76,8 +80,8 @@ class Overwatch:
return
ow = config.getContent('overwatch')
ow[ctx.message.author.id] = bt
config.saveContent('overwatch',ow)
config.saveContent('overwatch', ow)
await self.bot.say("I have just saved your battletag {}".format(ctx.message.author.mention))
@ow.command(pass_context=True, name="delete", aliases=['remove'], no_pm=True)
@ -87,7 +91,7 @@ class Overwatch:
result = config.getContent('overwatch')
if result.get(ctx.message.author.id):
del result[ctx.message.author.id]
config.saveContent('overwatch',result)
config.saveContent('overwatch', result)
await self.bot.say("I no longer have your battletag saved {}".format(ctx.message.author.mention))
else:
await self.bot.say("I don't even have your battletag saved {}".format(ctx.message.author.mention))

View file

@ -15,6 +15,7 @@ multi = re.compile(r'```(.*?)```', re.DOTALL)
class Owner:
"""Commands that can only be used by Phantom, bot management commands"""
def __init__(self, bot):
self.bot = bot
@ -22,21 +23,21 @@ class Owner:
@commands.check(checks.isOwner)
async def restart(self, ctx):
"""Forces the bot to restart"""
config.saveContent('restart_server',ctx.message.channel.id)
config.saveContent('restart_server', ctx.message.channel.id)
await self.bot.say("Restarting; see you in the next life {0}!".format(ctx.message.author.mention))
python = sys.executable
os.execl(python, python, *sys.argv)
@commands.command(pass_context=True)
@commands.command()
@commands.check(checks.isOwner)
async def adddoggo(self, ctx, url: str):
async def adddoggo(self, url: str):
"""Saves a URL as an image to add for the doggo command"""
os.chdir('/home/phxntx5/public_html/Bonfire/images')
local_path = 'doggo{}.jpg'.format(len(glob.glob('doggo*')))
urllib.request.urlretrieve(url,local_path)
await self.bot.say("Just saved a new doggo image! You now have {} doggo images!".format(len(glob.glob('doggo*'))))
urllib.request.urlretrieve(url, local_path)
await self.bot.say(
"Just saved a new doggo image! You now have {} doggo images!".format(len(glob.glob('doggo*'))))
@commands.command(pass_context=True)
@commands.check(checks.isOwner)
async def py(self, ctx):

View file

@ -3,11 +3,11 @@ from discord.utils import find
from .utils import config
from .utils import checks
import re
import pymysql
class Stats:
"""Leaderboard/stats related commands"""
def __init__(self, bot):
self.bot = bot
@ -20,14 +20,14 @@ class Stats:
if not boops.get(ctx.message.author.id):
await self.bot.say("You have not booped anyone {} Why the heck not...?".format(ctx.message.author.mention))
return
most_boops = 0
for b_id,amt in boops.get(ctx.message.author.id).items():
for b_id, amt in boops.get(ctx.message.author.id).items():
member = find(lambda m: m.id == b_id, self.bot.get_all_members())
if member in members and amt > most_boops:
most_boops = amt
most_id = b_id
member = find(lambda m: m.id == most_id, self.bot.get_all_members())
await self.bot.say("{0} you have booped {1} the most amount of times, coming in at {2} times".format(
ctx.message.author.mention, member.mention, most_boops))
@ -42,7 +42,7 @@ class Stats:
await self.bot.say("You have not booped anyone {} Why the heck not...?".format(ctx.message.author.mention))
return
output = "You have booped:"
for b_id,amt in boops.get(ctx.message.author.id).items():
for b_id, amt in boops.get(ctx.message.author.id).items():
member = find(lambda m: m.id == b_id, self.bot.get_all_members())
if member in members:
output += "\n{0.name}: {1} times".format(member, amt)
@ -57,7 +57,7 @@ class Stats:
count = 0
fmt = []
if battles is not None:
for m_id,record in battles.items():
for m_id, record in battles.items():
member = find(lambda m: m.id == m_id, self.bot.get_all_members())
if member in members:
winAmt = int(record.split('-')[0])

View file

@ -47,14 +47,14 @@ class Twitch:
config.closeConnection()
await asyncio.sleep(30)
@commands.group(no_pm=True, invoke_without_command=True,pass_context=True)
@commands.group(no_pm=True, invoke_without_command=True, pass_context=True)
@checks.customPermsOrRole("none")
async def twitch(self, ctx, *, member: discord.Member=None):
"""Use this command to check the twitch info of a user"""
if member is not None:
twitch = config.getContent('twitch')
result = twitch.get(ctx.message.author.id)
if result is not None:
url = result['twitch_url']
user = re.search("(?<=twitch.tv/)(.*)", url).group(1)
@ -88,12 +88,13 @@ class Twitch:
twitch = config.getContent('twitch')
result = twitch.get(ctx.message.author.id)
if result is not None:
twitch[ctx.message.author.id]['twitch_url'] = url
else:
twitch[ctx.message.author.id] = {'twitch_url':url,'server_id':ctx.message.server.id,'notifications_on': 1,'live':0}
config.saveContent('twitch',twitch)
twitch[ctx.message.author.id] = {'twitch_url': url, 'server_id': ctx.message.server.id,
'notifications_on': 1, 'live': 0}
config.saveContent('twitch', twitch)
await self.bot.say("I have just saved your twitch url {}".format(ctx.message.author.mention))
@twitch.command(name='remove', aliases=['delete'], pass_context=True, no_pm=True)
@ -103,7 +104,7 @@ class Twitch:
twitch = config.getContent('twitch')
if twitch.get(ctx.message.author.id) is not None:
del twitch[ctx.message.author.id]
config.saveContent('twitch',twitch)
config.saveContent('twitch', twitch)
await self.bot.say("I am no longer saving your twitch URL {}".format(ctx.message.author.mention))
else:
await self.bot.say(
@ -131,7 +132,7 @@ class Twitch:
ctx.message.author.mention))
else:
twitch[ctx.message.author.id]['notifications_on'] = 1
config.saveContent('twitch',twitch)
config.saveContent('twitch', twitch)
await self.bot.say("I will notify if you go live {}, you'll get a bajillion followers I promise c:".format(
ctx.message.author.mention))
@ -144,12 +145,12 @@ class Twitch:
await self.bot.say(
"I do not have your twitch URL added {}. You can save your twitch url with !twitch add".format(
ctx.message.author.mention))
elif not result['notifications_on']:
elif not twitch.get(ctx.message.author.id)['notifications_on']:
await self.bot.say("I am already set to not notify if you go live! Pay attention brah {}".format(
ctx.message.author.mention))
else:
twitch[ctx.message.author.id]['notifications_on'] = 0
config.saveContent('twitch',twitch)
config.saveContent('twitch', twitch)
await self.bot.say(
"I will not notify if you go live anymore {}, "
"are you going to stream some lewd stuff you don't want people to see?~".format(

View file

@ -1,5 +1,4 @@
import yaml
import pymysql.cursors
import asyncio
import json
@ -19,18 +18,6 @@ botToken = global_config.get("bot_token", "")
ownerID = global_config.get("owner_id", "")
def getCursor():
global connection
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)
return connection.cursor()
def closeConnection():
connection.commit()
connection.close()
def saveContent(key: str, content):
with open("/home/phxntx5/public_html/Bonfire/config.json", "r+") as jf:
data = json.load(jf)