def channel_message(self, event): """ :command: title :pattern-url: 1 """ if event["target"].get_setting("auto-title", False): event.eat() url = event["match"].group(0) title = self._get_title(event["target"], event["match"].group(0)) if title: message = title if event["target"].get_setting("auto-title-first", False): setting = "url-last-%s" % self._url_hash(url) first_details = event["target"].get_setting(setting, None) if first_details: first_nickname, first_timestamp, _ = first_details timestamp_parsed = utils.iso8601_parse(first_timestamp) timestamp_human = utils.datetime_human( timestamp_parsed) message = "%s (first posted by %s at %s)" % ( title, first_nickname, timestamp_human) else: event["target"].set_setting(setting, [ event["user"].nickname, utils.iso8601_format_now(), url ]) event["stdout"].write(message)
def channel_message(self, event): if event["target"].get_setting("auto-title", False): event.eat() url = utils.http.url_sanitise(event["match"].group(0)) code, title = self._get_title(event["server"], event["target"], url) if code == 200 and title: message = title if event["target"].get_setting("auto-title-first", False): setting = "url-last-%s" % self._url_hash(url) first_details = event["target"].get_setting(setting, None) if first_details: first_nickname, first_timestamp, _ = first_details timestamp_parsed = utils.iso8601_parse(first_timestamp) timestamp_human = utils.datetime_human(timestamp_parsed) message = "%s (first posted by %s at %s)" % (title, first_nickname, timestamp_human) else: event["target"].set_setting(setting, [event["user"].nickname, utils.iso8601_format_now(), url]) event["stdout"].write(message) if code == -2: self.log.debug("Not showing title for %s, too similar", [url])
def time(self, event): """ :help: Get the time for you or someone else :usage: [nickname] """ target_user = event["user"] if event["args"]: target_user = event["server"].get_user(event["args_split"][0]) location = target_user.get_setting("location", None) if not location == None: page = utils.http.request(API % location["timezone"], json=True) if page and page.data and not page.data.get("error", None): dt = utils.iso8601_parse(page.data["datetime"], microseconds=True) human = utils.datetime_human(dt) event["stdout"].write("Time for %s: %s" % (target_user.nickname, human)) else: raise utils.EventsResultsError() else: event["stderr"].write("%s doesn't have a location set" % target_user.nickname)
def channel_message(self, event): match = re.search(utils.http.REGEX_URL, event["message"]) if match and event["channel"].get_setting("auto-title", False): is_ignored_f = short_url = self.exports.get_one("is-ignored", lambda _1, _2: False) if is_ignored_f(event["user"], "title"): return url = match.group(0) title = self._get_title(event["channel"], match.group(0)) if title: message = title if event["channel"].get_setting("auto-title-first", False): setting = "url-last-%s" % self._url_hash(url) first_details = event["channel"].get_setting(setting, None) if first_details: first_nickname, first_timestamp, _ = first_details timestamp_parsed = utils.iso8601_parse(first_timestamp) timestamp_human = utils.datetime_human(timestamp_parsed) message = "%s (first posted by %s at %s)" % (title, first_nickname, timestamp_human) else: event["channel"].set_setting(setting, [event["user"].nickname, utils.iso8601_format_now(), url]) self.events.on("send.stdout").call(target=event["channel"], message=message, module_name="Title", server=event["server"])
def channel_message(self, event): match = re.search(utils.http.REGEX_URL, event["message"]) if match and event["channel"].get_setting("auto-title", False): is_ignored_f = short_url = self.exports.get_one( "is-ignored", lambda _1, _2: False) if is_ignored_f(event["user"], "title"): return url = match.group(0) title = self._get_title(event["channel"], match.group(0)) if title: message = title if event["channel"].get_setting("auto-title-first", False): setting = "url-last-%s" % self._url_hash(url) first_details = event["channel"].get_setting(setting, None) if first_details: first_nickname, first_timestamp, _ = first_details timestamp_parsed = utils.iso8601_parse(first_timestamp) timestamp_human = utils.datetime_human( timestamp_parsed) message = "%s (first posted by %s at %s)" % ( title, first_nickname, timestamp_human) else: event["channel"].set_setting(setting, [ event["user"].nickname, utils.iso8601_format_now(), url ]) self.events.on("send.stdout").call(target=event["channel"], message=message, module_name="Title", server=event["server"])
def channel_message(self, event): messages = event["channel"].get_user_setting(event["user"].get_id(), "to", []) for nickname, message, timestamp in messages: timestamp_parsed = utils.iso8601_parse(timestamp) timestamp_human = utils.datetime_human(timestamp_parsed) event["channel"].send_message("%s: <%s> %s (at %s UTC)" % ( event["user"].nickname, nickname, message, timestamp_human)) if messages: event["channel"].del_user_setting(event["user"].get_id(), "to")
def available(self): now = utils.datetime_utcnow() if os.path.exists(self._filename): with open(self._filename, "r") as lock_file: timestamp_str = lock_file.read().strip().split(" ", 1)[0] timestamp = utils.iso8601_parse(timestamp_str) if (now - timestamp).total_seconds() < EXPIRATION: return False return True
def time(self, event): target_user, location = self._find_setting(event) if not location == None: page = utils.http.request(API % location["timezone"], json=True) if page and page.data and not page.data.get("error", None): dt = utils.iso8601_parse(page.data["datetime"], microseconds=True) human = utils.datetime_human(dt) event["stdout"].write("Time for %s: %s" % (target_user.nickname, human)) else: raise utils.EventsResultsError() else: event["stderr"].write(NOLOCATION % target_user.nickname)
def badges(self, event): """ :help: Show all badges for you or a given user """ user = event["user"] if event["args"]: user = event["server"].get_user(event["args_split"][0]) now = self._round_up_day(self._now()) badges = [] for badge, date in self._get_badges(user).items(): days_since = self._days_since(now, utils.iso8601_parse(date)) badges.append("%s on day %s" % (badge, days_since)) event["stdout"].write("Badges for %s: %s" % (user.nickname, ", ".join(badges)))
def badges(self, event): """ :help: Show all badges for you or a given user """ user = event["user"] if event["args"]: user = event["server"].get_user(event["args_split"][0]) now = self._round_up_day(self._now()) badges = [] for badge, date in self._get_badges(user).items(): days_since = self._days_since(now, utils.iso8601_parse(date)) badges.append("%s on day %s" % ( badge, days_since)) event["stdout"].write("Badges for %s: %s" % ( user.nickname, ", ".join(badges)))
def badge(self, event): """ :help: Show a badge :usage: <badge> """ badge = event["args"] badge_lower = badge.lower() badges = self._get_badges(event["user"]) now = self._round_up_day(self._now()) found_badge = self._find_badge(badges, badge) if found_badge: dt = utils.iso8601_parse(badges[found_badge]) days_since = self._days_since(now, dt) event["stdout"].write("(%s) %s on day %s (%s)" % (event["user"].nickname, found_badge, days_since, self._date_str(dt))) else: event["stderr"].write("You have no '%s' badge" % badge)
def badge(self, event): """ :help: Show a badge :usage: <badge> """ badge = event["args"] badge_lower = badge.lower() badges = self._get_badges(event["user"]) now = self._round_up_day(self._now()) found_badge = self._find_badge(badges, badge) if found_badge: dt = utils.iso8601_parse(badges[found_badge]) days_since = self._days_since(now, dt) event["stdout"].write("(%s) %s on day %s (%s)" % ( event["user"].nickname, found_badge, days_since, self._date_str(dt))) else: event["stderr"].write("You have no '%s' badge" % badge)
def video_details(self, video_id): snippet = self.get_video_page(video_id, "snippet") if snippet.data["items"]: snippet = snippet.data["items"][0]["snippet"] statistics = self.get_video_page( video_id, "statistics").data["items"][0]["statistics"] content = self.get_video_page( video_id, "contentDetails").data["items"][0]["contentDetails"] video_uploaded_at = utils.iso8601_parse(snippet["publishedAt"], microseconds=True) video_uploaded_at = utils.date_human(video_uploaded_at) video_uploader = snippet["channelTitle"] video_title = utils.irc.bold(snippet["title"]) video_views = self._number(statistics["viewCount"]) video_likes = self._number(statistics.get("likeCount")) video_dislikes = self._number(statistics.get("dislikeCount")) video_duration = content["duration"] video_opinions = "" if video_likes and video_dislikes: likes = utils.irc.color("%s%s" % (video_likes, ARROW_UP), utils.consts.GREEN) dislikes = utils.irc.color( "%s%s" % (ARROW_DOWN, video_dislikes), utils.consts.RED) video_opinions = " (%s%s)" % (likes, dislikes) match = re.match(REGEX_ISO8601, video_duration) video_duration = "" video_duration += "%s:" % match.group(1)[:-1].zfill( 2) if match.group(1) else "" video_duration += "%s:" % match.group(2)[:-1].zfill( 2) if match.group(2) else "00:" video_duration += "%s" % match.group(3)[:-1].zfill( 2) if match.group(3) else "00" url = URL_YOUTUBESHORT % video_id return "%s (%s) uploaded by %s on %s, %s views%s" % ( video_title, video_duration, video_uploader, video_uploaded_at, video_views, video_opinions), url return None