remove pointless things
This commit is contained in:
parent
bb8e0c0abf
commit
b4f8cbc5ef
|
@ -1,91 +0,0 @@
|
|||
"dotnetpad.py: by sklnd, because gobiner wouldn't shut up"
|
||||
|
||||
import urllib
|
||||
import httplib
|
||||
import socket
|
||||
import json
|
||||
|
||||
from util import hook
|
||||
|
||||
|
||||
def dotnetpad(lang, code, timeout=30):
|
||||
"Posts a provided snippet of code in a provided langugage to dotnetpad.net"
|
||||
|
||||
code = code.encode('utf8')
|
||||
params = urllib.urlencode({'language': lang, 'code': code})
|
||||
|
||||
headers = {"Content-type": "application/x-www-form-urlencoded",
|
||||
"Accept": "text/plain"}
|
||||
|
||||
try:
|
||||
conn = httplib.HTTPConnection("dotnetpad.net", 80, timeout=timeout)
|
||||
conn.request("POST", "/Skybot", params, headers)
|
||||
response = conn.getresponse()
|
||||
except httplib.HTTPException:
|
||||
conn.close()
|
||||
return 'error: dotnetpad is broken somehow'
|
||||
except socket.error:
|
||||
return 'error: unable to connect to dotnetpad'
|
||||
|
||||
try:
|
||||
result = json.loads(response.read())
|
||||
except ValueError:
|
||||
conn.close()
|
||||
return 'error: dotnetpad is broken somehow'
|
||||
|
||||
conn.close()
|
||||
|
||||
if result['Errors']:
|
||||
return 'First error: %s' % (result['Errors'][0]['ErrorText'])
|
||||
elif result['Output']:
|
||||
return result['Output'].lstrip()
|
||||
else:
|
||||
return 'No output'
|
||||
|
||||
|
||||
@hook.command
|
||||
def fs(inp):
|
||||
".fs -- post a F# code snippet to dotnetpad.net and print the results"
|
||||
|
||||
return dotnetpad('fsharp', inp)
|
||||
|
||||
|
||||
@hook.command
|
||||
def cs(snippet):
|
||||
".cs -- post a C# code snippet to dotnetpad.net and print the results"
|
||||
|
||||
file_template = ('using System; '
|
||||
'using System.Linq; '
|
||||
'using System.Collections.Generic; '
|
||||
'using System.Text; '
|
||||
'%s')
|
||||
|
||||
class_template = ('public class Default '
|
||||
'{'
|
||||
' %s \n'
|
||||
'}')
|
||||
|
||||
main_template = ('public static void Main(String[] args) '
|
||||
'{'
|
||||
' %s \n'
|
||||
'}')
|
||||
|
||||
# There are probably better ways to do the following, but I'm feeling lazy
|
||||
# if no main is found in the snippet, use the template with Main in it
|
||||
if 'public static void Main' not in snippet:
|
||||
code = main_template % snippet
|
||||
code = class_template % code
|
||||
code = file_template % code
|
||||
|
||||
# if Main is found, check for class and see if we need to use the
|
||||
# classed template
|
||||
elif 'class' not in snippet:
|
||||
code = class_template % snippet
|
||||
code = file_template % code
|
||||
|
||||
return 'Error using dotnetpad'
|
||||
# if we found class, then use the barebones template
|
||||
else:
|
||||
code = file_template % snippet
|
||||
|
||||
return dotnetpad('csharp', code)
|
|
@ -1,21 +0,0 @@
|
|||
import random
|
||||
|
||||
from util import hook, http
|
||||
|
||||
|
||||
@hook.api_key('giphy')
|
||||
@hook.command('gif')
|
||||
@hook.command
|
||||
def giphy(inp, api_key=None):
|
||||
'''.gif/.giphy <query> -- returns first giphy search result'''
|
||||
url = 'http://api.giphy.com/v1/gifs/search'
|
||||
try:
|
||||
response = http.get_json(url, q=inp, limit=10, api_key=api_key)
|
||||
except http.HTTPError as e:
|
||||
return e.msg
|
||||
|
||||
results = response.get('data')
|
||||
if results:
|
||||
return random.choice(results).get('bitly_gif_url')
|
||||
else:
|
||||
return 'no results found'
|
|
@ -1,35 +0,0 @@
|
|||
import unittest
|
||||
|
||||
from util import http, hook
|
||||
|
||||
|
||||
@hook.regex(r'(?i)https://(?:www\.)?news\.ycombinator\.com\S*id=(\d+)')
|
||||
def hackernews(match):
|
||||
base_api = 'https://hacker-news.firebaseio.com/v0/item/'
|
||||
entry = http.get_json(base_api + match.group(1) + ".json")
|
||||
|
||||
if entry['type'] == "story":
|
||||
entry['title'] = http.unescape(entry['title'])
|
||||
return u"{title} by {by} with {score} points and {descendants} comments ({url})".format(**entry)
|
||||
|
||||
if entry['type'] == "comment":
|
||||
entry['text'] = http.unescape(entry['text'].replace('<p>', ' // '))
|
||||
return u'"{text}" -- {by}'.format(**entry)
|
||||
|
||||
class Test(unittest.TestCase):
|
||||
def news(self, inp):
|
||||
re = hackernews._hook[0][1][1]['re']
|
||||
return hackernews(re.search(inp))
|
||||
|
||||
def test_story(self):
|
||||
assert 'Desalination' in self.news('https://news.ycombinator.com/item?id=9943431')
|
||||
|
||||
def test_comment(self):
|
||||
res = self.news('https://news.ycombinator.com/item?id=9943987')
|
||||
assert 'kilowatt hours' in res
|
||||
assert 'oaktowner' in res
|
||||
|
||||
def test_comment_encoding(self):
|
||||
res = self.news('https://news.ycombinator.com/item?id=9943897')
|
||||
assert 'abominations' in res
|
||||
assert '> ' in res # encoding
|
183
plugins/mtg.py
183
plugins/mtg.py
|
@ -1,183 +0,0 @@
|
|||
import re
|
||||
|
||||
from util import hook, http
|
||||
|
||||
|
||||
@hook.command
|
||||
def mtg(inp):
|
||||
".mtg <name> -- gets information about Magic the Gathering card <name>"
|
||||
|
||||
url = 'http://magiccards.info/query?v=card&s=cname'
|
||||
h = http.get_html(url, q=inp)
|
||||
|
||||
name = h.find('body/table/tr/td/span/a')
|
||||
if name is None:
|
||||
return "no cards found"
|
||||
card = name.getparent().getparent().getparent()
|
||||
|
||||
type = card.find('td/p').text.replace('\n', '')
|
||||
|
||||
# this is ugly
|
||||
text = http.html.tostring(card.xpath("//p[@class='ctext']/b")[0])
|
||||
text = text.replace('<br>', '$')
|
||||
text = http.html.fromstring(text).text_content()
|
||||
text = re.sub(r'(\w+\s*)\$+(\s*\w+)', r'\1. \2', text)
|
||||
text = text.replace('$', ' ')
|
||||
text = re.sub(r'\(.*?\)', '', text) # strip parenthetical explanations
|
||||
text = re.sub(r'\.(\S)', r'. \1', text) # fix spacing
|
||||
|
||||
printings = card.find('td/small').text_content()
|
||||
printings = re.search(r'Editions:(.*)Languages:', printings).group(1)
|
||||
printings = re.findall(r'\s*(.+?(?: \([^)]+\))*) \((.*?)\)',
|
||||
' '.join(printings.split()))
|
||||
|
||||
printing_out = ', '.join('%s (%s)' % (set_abbrevs.get(x[0], x[0]),
|
||||
rarity_abbrevs.get(x[1], x[1]))
|
||||
for x in printings)
|
||||
|
||||
name.make_links_absolute(base_url=url)
|
||||
link = name.attrib['href']
|
||||
name = name.text_content().strip()
|
||||
type = type.strip()
|
||||
text = ' '.join(text.split())
|
||||
|
||||
return ' | '.join((name, type, text, printing_out, link))
|
||||
|
||||
|
||||
set_abbrevs = {
|
||||
'15th Anniversary': '15ANN',
|
||||
'APAC Junior Series': 'AJS',
|
||||
'Alara Reborn': 'ARB',
|
||||
'Alliances': 'AI',
|
||||
'Anthologies': 'AT',
|
||||
'Antiquities': 'AQ',
|
||||
'Apocalypse': 'AP',
|
||||
'Arabian Nights': 'AN',
|
||||
'Arena League': 'ARENA',
|
||||
'Asia Pacific Land Program': 'APAC',
|
||||
'Battle Royale': 'BR',
|
||||
'Battle Royale Box Set': 'BRB',
|
||||
'Beatdown': 'BTD',
|
||||
'Beatdown Box Set': 'BTD',
|
||||
'Betrayers of Kamigawa': 'BOK',
|
||||
'Celebration Cards': 'UQC',
|
||||
'Champions of Kamigawa': 'CHK',
|
||||
'Champs': 'CP',
|
||||
'Chronicles': 'CH',
|
||||
'Classic Sixth Edition': '6E',
|
||||
'Coldsnap': 'CS',
|
||||
'Coldsnap Theme Decks': 'CSTD',
|
||||
'Conflux': 'CFX',
|
||||
'Core Set - Eighth Edition': '8E',
|
||||
'Core Set - Ninth Edition': '9E',
|
||||
'Darksteel': 'DS',
|
||||
'Deckmasters': 'DM',
|
||||
'Dissension': 'DI',
|
||||
'Dragon Con': 'DRC',
|
||||
'Duel Decks: Divine vs. Demonic': 'DVD',
|
||||
'Duel Decks: Elves vs. Goblins': 'EVG',
|
||||
'Duel Decks: Garruk vs. Liliana': 'GVL',
|
||||
'Duel Decks: Jace vs. Chandra': 'JVC',
|
||||
'Eighth Edition': '8ED',
|
||||
'Eighth Edition Box Set': '8EB',
|
||||
'European Land Program': 'EURO',
|
||||
'Eventide': 'EVE',
|
||||
'Exodus': 'EX',
|
||||
'Fallen Empires': 'FE',
|
||||
'Fifth Dawn': '5DN',
|
||||
'Fifth Edition': '5E',
|
||||
'Fourth Edition': '4E',
|
||||
'Friday Night Magic': 'FNMP',
|
||||
'From the Vault: Dragons': 'FVD',
|
||||
'From the Vault: Exiled': 'FVE',
|
||||
'Future Sight': 'FUT',
|
||||
'Gateway': 'GRC',
|
||||
'Grand Prix': 'GPX',
|
||||
'Guildpact': 'GP',
|
||||
'Guru': 'GURU',
|
||||
'Happy Holidays': 'HHO',
|
||||
'Homelands': 'HL',
|
||||
'Ice Age': 'IA',
|
||||
'Introductory Two-Player Set': 'ITP',
|
||||
'Invasion': 'IN',
|
||||
'Judge Gift Program': 'JR',
|
||||
'Judgment': 'JU',
|
||||
'Junior Series': 'JSR',
|
||||
'Legend Membership': 'DCILM',
|
||||
'Legends': 'LG',
|
||||
'Legions': 'LE',
|
||||
'Limited Edition (Alpha)': 'LEA',
|
||||
'Limited Edition (Beta)': 'LEB',
|
||||
'Limited Edition Alpha': 'LEA',
|
||||
'Limited Edition Beta': 'LEB',
|
||||
'Lorwyn': 'LW',
|
||||
'MTGO Masters Edition': 'MED',
|
||||
'MTGO Masters Edition II': 'ME2',
|
||||
'MTGO Masters Edition III': 'ME3',
|
||||
'Magic 2010': 'M10',
|
||||
'Magic Game Day Cards': 'MGDC',
|
||||
'Magic Player Rewards': 'MPRP',
|
||||
'Magic Scholarship Series': 'MSS',
|
||||
'Magic: The Gathering Launch Parties': 'MLP',
|
||||
'Media Inserts': 'MBP',
|
||||
'Mercadian Masques': 'MM',
|
||||
'Mirage': 'MR',
|
||||
'Mirrodin': 'MI',
|
||||
'Morningtide': 'MT',
|
||||
'Multiverse Gift Box Cards': 'MGBC',
|
||||
'Nemesis': 'NE',
|
||||
'Ninth Edition Box Set': '9EB',
|
||||
'Odyssey': 'OD',
|
||||
'Onslaught': 'ON',
|
||||
'Planar Chaos': 'PC',
|
||||
'Planechase': 'PCH',
|
||||
'Planeshift': 'PS',
|
||||
'Portal': 'PO',
|
||||
'Portal Demogame': 'POT',
|
||||
'Portal Second Age': 'PO2',
|
||||
'Portal Three Kingdoms': 'P3K',
|
||||
'Premium Deck Series: Slivers': 'PDS',
|
||||
'Prerelease Events': 'PTC',
|
||||
'Pro Tour': 'PRO',
|
||||
'Prophecy': 'PR',
|
||||
'Ravnica: City of Guilds': 'RAV',
|
||||
'Release Events': 'REP',
|
||||
'Revised Edition': 'RV',
|
||||
'Saviors of Kamigawa': 'SOK',
|
||||
'Scourge': 'SC',
|
||||
'Seventh Edition': '7E',
|
||||
'Shadowmoor': 'SHM',
|
||||
'Shards of Alara': 'ALA',
|
||||
'Starter': 'ST',
|
||||
'Starter 1999': 'S99',
|
||||
'Starter 2000 Box Set': 'ST2K',
|
||||
'Stronghold': 'SH',
|
||||
'Summer of Magic': 'SOM',
|
||||
'Super Series': 'SUS',
|
||||
'Tempest': 'TP',
|
||||
'Tenth Edition': '10E',
|
||||
'The Dark': 'DK',
|
||||
'Time Spiral': 'TS',
|
||||
'Time Spiral Timeshifted': 'TSTS',
|
||||
'Torment': 'TR',
|
||||
'Two-Headed Giant Tournament': 'THGT',
|
||||
'Unglued': 'UG',
|
||||
'Unhinged': 'UH',
|
||||
'Unhinged Alternate Foils': 'UHAA',
|
||||
'Unlimited Edition': 'UN',
|
||||
"Urza's Destiny": 'UD',
|
||||
"Urza's Legacy": 'UL',
|
||||
"Urza's Saga": 'US',
|
||||
'Visions': 'VI',
|
||||
'Weatherlight': 'WL',
|
||||
'Worlds': 'WRL',
|
||||
'WotC Online Store': 'WOTC',
|
||||
'Zendikar': 'ZEN'}
|
||||
|
||||
rarity_abbrevs = {
|
||||
'Land': 'L',
|
||||
'Common': 'C',
|
||||
'Uncommon': 'UC',
|
||||
'Rare': 'R',
|
||||
'Special': 'S',
|
||||
'Mythic Rare': 'MR'}
|
|
@ -1,14 +0,0 @@
|
|||
from util import hook, http
|
||||
|
||||
|
||||
@hook.regex(r'vimeo.com/([0-9]+)')
|
||||
def vimeo_url(match):
|
||||
info = http.get_json('http://vimeo.com/api/v2/video/%s.json'
|
||||
% match.group(1))
|
||||
|
||||
if info:
|
||||
return ("\x02%(title)s\x02 - length \x02%(duration)ss\x02 - "
|
||||
"\x02%(stats_number_of_likes)s\x02 likes - "
|
||||
"\x02%(stats_number_of_plays)s\x02 plays - "
|
||||
"\x02%(user_name)s\x02 on \x02%(upload_date)s\x02"
|
||||
% info[0])
|
Loading…
Reference in New Issue