-
Notifications
You must be signed in to change notification settings - Fork 15
/
obichero.py
142 lines (112 loc) · 4.04 KB
/
obichero.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
#!/usr/bin/env python
# encoding: utf-8
#
# Description: Plugin for processing O Bichero's strip requests
# Author: Pablo Iranzo Gomez (Pablo.Iranzo@gmail.com)
import datetime
import logging
import dateutil.parser
import feedparser
from apscheduler.schedulers.background import BackgroundScheduler
from lxml import html
import stampy.stampy
import stampy.plugin.stats
import stampy.plugin.config
from stampy.i18n import translate
_ = translate.ugettext
sched = BackgroundScheduler()
sched.start()
def init():
"""
Initializes module
:return: List of triggers for plugin
"""
botname = stampy.stampy.getme()['username']
if botname == 'redken_bot':
sched.add_job(obichero, 'cron', id='obichero', hour='15', replace_existing=True, misfire_grace_time=120)
triggers = ["^/obichero"]
return triggers
def run(message): # do not edit this line
"""
Executes plugin
:param message: message to run against
:return:
"""
text = stampy.stampy.getmsgdetail(message)["text"]
if text:
if text.split()[0].lower() == "/obichero":
obicherocommands(message=message)
return
def help(message): # do not edit this line
"""
Returns help for plugin
:param message: message to process
:return: help text
"""
commandtext = _("Use `/obichero <date>` to get O bichero's comic strip for date or today (must be on RSS feed)\n\n")
if stampy.stampy.is_owner(message):
commandtext = _("Use `/obichero trigger` to force sending actual strip to channel\n\n")
return commandtext
def obicherocommands(message):
"""
Searches for commands related to dilbert
:param message: message to process
:return:
"""
logger = logging.getLogger(__name__)
msgdetail = stampy.stampy.getmsgdetail(message)
texto = msgdetail["text"]
chat_id = msgdetail["chat_id"]
message_id = msgdetail["message_id"]
who_un = msgdetail["who_un"]
logger.debug(msg=_("Command: %s by %s") % (texto, who_un))
# We might be have been given no command, just /dilbert
try:
date = texto.split(' ')[1]
except:
date = ""
if stampy.stampy.is_owner(message) and date == "trigger":
# We've been called to update the strip channel
return obichero()
try:
# Parse date or if in error, use today
date = dateutil.parser.parse(date)
# Force checking if valid date
day = date.day
month = date.month
year = date.year
date = datetime.datetime(year=year, month=month, day=day)
except:
date = datetime.datetime.now()
return obichero(chat_id=chat_id, date=date, reply_to_message_id=message_id)
def obichero(chat_id=-1001069507044, date=None, reply_to_message_id=""):
"""
Sends Mel's strip for the date provided
:param chat_id: chat to send image to
:param date: date to get the strip from that day
:param reply_to_message_id: Id of the message to send reply to
:return:
"""
url = "http://obichero.blogspot.com/feeds/posts/default"
logger = logging.getLogger(__name__)
# Website seems to be pushed in some strange way that makes
# old posts to be announced as new, causing old strips to be retrieved
# Ping chat ID to not have chat removed
stampy.plugin.stats.pingchat(chat_id)
if not date:
date = datetime.datetime.now()
feed = feedparser.parse(url)
tira = []
for item in reversed(feed["items"]):
dateitem = dateutil.parser.parse(item["published"][:16])
if date.year == dateitem.year and date.month == dateitem.month and date.day == dateitem.day:
tira.append(item)
logger.debug(msg=_("# of Comics for today: %s") % len(tira))
if tira:
item = tira[-1]
url = item['link']
tree = html.fromstring(item['summary'])
imgsrc = tree.xpath('//img/@src')[0]
imgtxt = item['title_detail']['value'] + "\n" + url + " - @obicherounofficial"
stampy.stampy.sendimage(chat_id=chat_id, image=imgsrc, text=imgtxt, reply_to_message_id=reply_to_message_id)
return