1
0
Fork 0
mirror of synced 2024-05-20 12:32:26 +12:00
Bonfire/cogs/core.py

125 lines
4.8 KiB
Python
Raw Normal View History

2016-07-09 13:27:19 +12:00
from discord.ext import commands
from .utils import config
import discord
import subprocess
import urllib.parse
import urllib.request
import json
import random
import discord
2016-07-11 01:58:46 +12:00
import re
2016-07-09 13:27:19 +12:00
class Core:
"""Core commands, these are the not 'complicated' commands."""
2016-07-09 13:27:19 +12:00
def __init__(self, bot):
self.bot = bot
@commands.command()
async def addbot(self):
"""Provides a link that you can use to add me to a server"""
perms = discord.Permissions.none()
perms.read_messages = True
perms.send_messages = True
perms.manage_roles = True
perms.ban_members = True
perms.kick_members = True
perms.manage_messages = True
perms.embed_links = True
perms.read_message_history = True
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()
2016-07-09 13:27:19 +12:00
async def joke(self):
"""Prints a random riddle"""
fortuneCommand = "/usr/bin/fortune riddles"
fortune = subprocess.check_output(fortuneCommand.split()).decode("utf-8")
await self.bot.say(fortune)
2016-07-09 13:27:19 +12:00
@commands.command()
async def urban(self, *msg: str):
"""Pulls the top urbandictionary.com definition for a term"""
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:
await self.bot.say("No result with that term!")
else:
await self.bot.say(data['list'][0]['definition'])
except discord.HTTPException:
await self.bot.say('```Error: Definition is too long for me to send```')
@commands.command(pass_context=True)
async def derpi(self, ctx, *search: str):
"""Provides a random image from the first page of derpibooru.org for the following term"""
if len(search) > 0:
url = 'https://derpibooru.org/search.json?q='
query = '+'.join(search)
url += query
cursor = config.getCursor()
cursor.execute('use phxntx5_bonfire')
cursor.execute('select * from nsfw_channels')
result = cursor.fetchall()
if {'channel_id': '{}'.format(ctx.message.channel.id)} in result:
url += ",+explicit&filter_id=95938"
2016-07-10 04:33:48 +12:00
config.closeConnection()
# 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']
2016-07-09 13:27:19 +12:00
if len(results) > 0:
index = random.randint(0, len(results) - 1)
imageLink = 'http://' + results[index].get('representations').get('full')[2:].strip()
2016-07-09 13:27:19 +12:00
else:
await self.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 self.bot.say(response)
2016-07-09 13:27:19 +12:00
@commands.command(pass_context=True)
async def roll(self, ctx, notation: str="d6"):
"""Rolls a die based on the notation given
Format should be #d#"""
try:
dice = re.search("(\d*)d(\d*)", notation).group(1)
num = re.search("(\d*)d(\d*)", notation).group(2)
except AttributeError:
await self.bot.say("Please provide the die notation in #d#!")
return
if dice == '':
dice = '1'
if int(dice) > 10:
await self.bot.say("I'm not rolling more than 10 dice, I have tiny hands")
return
if int(num) > 100:
await self.bot.say("What die has more than 100 sides? Please, calm down")
return
valueStr = str(random.randint(1, int(num)))
for i in range(1, int(dice)):
value = random.randint(1, int(num))
valueStr += ", {}".format(value)
if int(dice) == 1:
2016-07-12 06:13:25 +12:00
fmt = '{0.message.author.name} has rolled a {2} sided die and got the number {3}!'
else:
2016-07-12 05:58:53 +12:00
fmt = '{0.message.author.name} has rolled {1}, {2} sided dice and got the numbers {3}!'
2016-07-12 06:13:25 +12:00
await self.bot.say(fmt.format(ctx, dice, num, valueStr))
2016-07-09 13:27:19 +12:00
def setup(bot):
bot.add_cog(Core(bot))