From 623f2c8bb5f92fbdfb58edba751ca93d61c71db1 Mon Sep 17 00:00:00 2001 From: Luke Murphy Date: Sat, 27 Feb 2021 11:38:28 +0100 Subject: [PATCH] Move functions under the class to unify `self` usage --- LogBot/logbot.py | 224 +++++++++++++++++++++++------------------------ 1 file changed, 111 insertions(+), 113 deletions(-) diff --git a/LogBot/logbot.py b/LogBot/logbot.py index b143e88..cef4c01 100644 --- a/LogBot/logbot.py +++ b/LogBot/logbot.py @@ -7,127 +7,125 @@ from urllib.parse import urlparse import jinja2 from xbotlib import Bot -IMAGE_TYPES = (".jpg", "jpeg", "png", ".gif", ".bmp", ".svg", "eps") - -AUDIO_TYPES = (".mp3", ".ogg", ".oga", ".mogg", ".wav", ".m4a", ".webm") - -FILE_TYPES = ".pdf" - -VIDEO_TYPES = ( - ".mp4", - ".webm", - ".flv", - ".vob", - ".avi", - ".mov", - ".qt", - ".mpg", - ".mpeg", - ".mp4", - ".m2v", - ".mpe", - ".3gp", -) - - -def add_to_db(self, message, media_post=None): - keys = [x for x in self.db[message.room]["messages"].keys()] - keys.sort(key=int) - if not keys: - new_key = "0" - else: - new_key = str(int(keys[-1]) + 1) - if media_post: - self.db[message.room]["messages"][new_key] = media_post - else: - self.db[message.room]["messages"][new_key] = message.content.replace("@add", "") - - -def del_from_db(self, message, key): - del self.db[message.room]["messages"][key] - - -def write_log(self, message, logger): - template = jinja2.Template(open("template.html").read()) - roomname = re.sub(r"@.*", "", message.room) - log_path = os.path.join(self.output, roomname, "index.html") - with open(log_path, "w") as out: - html = template.render( - title=self.db[message.room]["title"], db=self.db[message.room]["messages"] - ) - out.write(html) - logger.info("writing to: ", log_path) - - -def download(self, message, logger): - # define media_type - if message.url.lower().endswith(IMAGE_TYPES): - media_type = "images" - elif message.url.lower().endswith(FILE_TYPES): - media_type = "pdf" - elif message.url.lower().endswith(AUDIO_TYPES): - media_type = "audio" - elif message.url.lower().endswith(VIDEO_TYPES): - media_type = "video" - else: - media_type = None - logger.info(f"Unable to determine media type of {message.url.lower()}") - - # download file - data = urllib.request.urlopen(message.url).read() - if data: - logger.info("downloading: ", message.url) - parsed_url = urlparse(message.url) - filename = ( - os.path.basename(parsed_url.path).replace(" ", "_").replace("%20", "_") - ) # safe url's - self.log.info("as the file: ", filename) - roomname = re.sub(r"@.*", "", message.room) - path = os.path.join(self.output, roomname, media_type) - if not os.path.isdir(path): - os.mkdir(path) - file_path = os.path.join(path, filename) - with open(file_path, "wb") as media_file: - media_file.write(data) - - # define media_post - media_path = os.path.join(media_type, filename) - if message.url.lower().endswith(IMAGE_TYPES): - media_post = f'' - elif message.url.lower().endswith(FILE_TYPES): - media_post = f'' - elif message.url.lower().endswith(AUDIO_TYPES): - media_post = f'' - elif message.url.lower().endswith(VIDEO_TYPES): - media_post = f'' - else: - media_post = None - - return media_post, media_type - class Logbot(Bot): help = """Oh dear, logbot is here! + (You can speak to the bot using @logbot or logbot:) + + : Your image is added to the log. + + logbot @help: Print this message + + logbot @add : Add a message to the log. + + logbot @delete : Delete posts from the log. For example: @logbot @delete 5 -(You can speak to the bot using @logbot or logbot:) + logbot @title : Set the title of your log. -: Your image is added to the log. + logbot @style : Edit the css of your log. For example: logbot @style body background-color: pink; [future-feature] -logbot @help: Print this message + logbot @uptime: To check how long @logbot has been around -logbot @add : Add a message to the log. + @bots: To see who is around :) + """ # noqa -logbot @delete : Delete posts from the log. For example: @logbot @delete 5 + IMAGE_TYPES = (".jpg", "jpeg", "png", ".gif", ".bmp", ".svg", "eps") -logbot @title : Set the title of your log. + AUDIO_TYPES = (".mp3", ".ogg", ".oga", ".mogg", ".wav", ".m4a", ".webm") -logbot @style : Edit the css of your log. For example: logbot @style body background-color: pink; [future-feature] + FILE_TYPES = ".pdf" -logbot @uptime: To check how long @logbot has been around + VIDEO_TYPES = ( + ".mp4", + ".webm", + ".flv", + ".vob", + ".avi", + ".mov", + ".qt", + ".mpg", + ".mpeg", + ".mp4", + ".m2v", + ".mpe", + ".3gp", + ) -@bots: To see who is around :) -""" + def _download(self, message): + # define media_type + if message.url.lower().endswith(self.IMAGE_TYPES): + media_type = "images" + elif message.url.lower().endswith(self.FILE_TYPES): + media_type = "pdf" + elif message.url.lower().endswith(self.AUDIO_TYPES): + media_type = "audio" + elif message.url.lower().endswith(self.VIDEO_TYPES): + media_type = "video" + else: + media_type = None + self.log.info(f"Unable to determine media type of {message.url.lower()}") + + # download file + data = urllib.request.urlopen(message.url).read() + if data: + self.log.info("downloading: ", message.url) + parsed_url = urlparse(message.url) + filename = ( + os.path.basename(parsed_url.path).replace(" ", "_").replace("%20", "_") + ) # safe url's + self.log.info("as the file: ", filename) + roomname = re.sub(r"@.*", "", message.room) + path = os.path.join(self.output, roomname, media_type) + if not os.path.isdir(path): + os.mkdir(path) + file_path = os.path.join(path, filename) + with open(file_path, "wb") as media_file: + media_file.write(data) + + # define media_post + media_path = os.path.join(media_type, filename) + if message.url.lower().endswith(self.IMAGE_TYPES): + media_post = f'' + elif message.url.lower().endswith(self.FILE_TYPES): + media_post = ( + f'' + ) + elif message.url.lower().endswith(self.AUDIO_TYPES): + media_post = f'' + elif message.url.lower().endswith(self.VIDEO_TYPES): + media_post = f'' + else: + media_post = None + + return media_post, media_type + + def _write_log(self, message): + """Write new log to the file system.""" + template = jinja2.Template(open("template.html").read()) + room_name = self._parse_room_name(message.room) + log_path = os.path.join(self.output, room_name, "index.html") + with open(log_path, "w") as out: + html = template.render( + title=self.db[message.room]["title"], + db=self.db[message.room]["messages"], + ) + out.write(html) + self.log.info("writing to: ", log_path) + + def _add_to_db(self, message, media_post=None): + """Save new entry to database.""" + keys = [x for x in self.db[message.room]["messages"].keys()] + keys.sort(key=int) + if not keys: + new_key = "0" + else: + new_key = str(int(keys[-1]) + 1) + if media_post: + self.db[message.room]["messages"][new_key] = media_post + else: + replaced = message.content.replace("@add", "") + self.db[message.room]["messages"][new_key] = replaced def _parse_room_name(self, room): """Parse room name from entire address string.""" @@ -171,16 +169,16 @@ logbot @uptime: To check how long @logbot has been around # image / PDF / audio / video if message.url: - media_post, media_type = download(self, message, self.log) + media_post, media_type = self._download(message, self.log) if media_post: - add_to_db(self, message, media_post=media_post) + self._add_to_db(message, media_post=media_post) media_type = media_type.replace("images", "image") # linguistic hack! reply = f"Thanks for that { media_type }!" else: reply = "Sorry, can't process that :( (unknown media type?)" elif "@add" in message.text: - add_to_db(self, message) + self._add_to_db(message) reply = "Added, thanks!" elif "@delete" in message.text: @@ -190,7 +188,7 @@ logbot @uptime: To check how long @logbot has been around if key in self.db[message.room]["messages"]: self.log.info("To be deleted:", self.db[message.room]["messages"][key]) reply = f"This message is deleted: { self.db[message.room]['messages'][key] }" - del_from_db(self, message, key) + del self.db[message.room]["messages"][key] else: reply = "This message is already gone!" @@ -206,7 +204,7 @@ logbot @uptime: To check how long @logbot has been around else: reply = "Hmm ... not sure what you want to do?" - write_log(self, message, self.log) + self._write_log(message, self.log) self.reply(reply, room=message.room)