2010-08-25 20:26:12 +00:00
|
|
|
from util import hook, http
|
|
|
|
|
|
|
|
|
|
|
|
thread_re = r"(?i)forums\.somethingawful\.com/\S+threadid=(\d+)"
|
|
|
|
showthread = "http://forums.somethingawful.com/showthread.php?noseen=1"
|
|
|
|
|
2010-08-30 03:35:27 +00:00
|
|
|
|
2010-08-25 20:26:12 +00:00
|
|
|
def login(user, password):
|
|
|
|
http.jar.clear_expired_cookies()
|
|
|
|
if any(cookie.domain == 'forums.somethingawful.com' and
|
|
|
|
cookie.name == 'bbuserid' for cookie in http.jar):
|
|
|
|
if any(cookie.domain == 'forums.somethingawful.com' and
|
|
|
|
cookie.name == 'bbpassword' for cookie in http.jar):
|
|
|
|
return
|
|
|
|
assert("malformed cookie jar")
|
2010-12-04 06:38:21 +00:00
|
|
|
user = http.quote(user)
|
|
|
|
password = http.quote(password)
|
2010-08-25 20:26:12 +00:00
|
|
|
http.get("http://forums.somethingawful.com/account.php", cookies=True,
|
2010-08-30 03:35:27 +00:00
|
|
|
post_data="action=login&username=%s&password=%s" % (user, password))
|
2010-08-25 20:26:12 +00:00
|
|
|
|
|
|
|
|
|
|
|
@hook.regex(thread_re)
|
|
|
|
def forum_link(inp, bot=None):
|
|
|
|
if 'sa_user' not in bot.config or \
|
|
|
|
'sa_password' not in bot.config:
|
|
|
|
return
|
|
|
|
|
|
|
|
login(bot.config['sa_user'], bot.config['sa_password'])
|
|
|
|
|
2010-08-30 03:35:27 +00:00
|
|
|
thread = http.get_html(showthread, threadid=inp.group(1), perpage='1',
|
2010-08-25 20:26:12 +00:00
|
|
|
cookies=True)
|
|
|
|
|
|
|
|
breadcrumbs = thread.xpath('//div[@class="breadcrumbs"]//a/text()')
|
|
|
|
|
|
|
|
if not breadcrumbs:
|
|
|
|
return
|
|
|
|
|
|
|
|
thread_title = breadcrumbs[-1]
|
|
|
|
forum_title = forum_abbrevs.get(breadcrumbs[-2], breadcrumbs[-2])
|
|
|
|
|
2010-11-25 21:00:55 +00:00
|
|
|
poster = thread.xpath('//dt[contains(@class, author)]//text()')[0]
|
2010-08-25 20:26:12 +00:00
|
|
|
|
|
|
|
# 1 post per page => n_pages = n_posts
|
|
|
|
num_posts = thread.xpath('//a[@title="last page"]/@href')
|
|
|
|
|
|
|
|
if not num_posts:
|
|
|
|
num_posts = 1
|
|
|
|
else:
|
|
|
|
num_posts = int(num_posts[0].rsplit('=', 1)[1])
|
|
|
|
|
|
|
|
return '\x02%s\x02 > \x02%s\x02 by \x02%s\x02, %s post%s' % (
|
2010-08-30 03:35:27 +00:00
|
|
|
forum_title, thread_title, poster, num_posts,
|
|
|
|
's' if num_posts > 1 else '')
|
2010-08-25 20:26:12 +00:00
|
|
|
|
|
|
|
|
|
|
|
forum_abbrevs = {
|
|
|
|
'Serious Hardware / Software Crap': 'SHSC',
|
|
|
|
'The Cavern of COBOL': 'CoC',
|
|
|
|
'General Bullshit': 'GBS',
|
|
|
|
'Haus of Tech Support': 'HoTS'
|
|
|
|
}
|