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)