diff --git a/LogBot/avatar.png b/LogBot/avatar.png index 5c74215..1483f5a 100644 Binary files a/LogBot/avatar.png and b/LogBot/avatar.png differ diff --git a/LogBot/index.html.j2 b/LogBot/index.html.j2 index 22d2812..c77e945 100644 --- a/LogBot/index.html.j2 +++ b/LogBot/index.html.j2 @@ -2,20 +2,19 @@ - *logbot* + {{ title }} - (Generator: LogBot) -

{{ room }}

+

{{ title }}

-{% for num, msg in db.items() %} + {% for num, msg in db.items() %} -
-

({{ num }})

-

{{ msg }}

-
- -{% endfor %} +
+

[{{ num }}]

+

{{ msg }}

+
+ {% endfor %} \ No newline at end of file diff --git a/LogBot/logbot.py b/LogBot/logbot.py index a13ff4c..4e6082e 100644 --- a/LogBot/logbot.py +++ b/LogBot/logbot.py @@ -1,35 +1,78 @@ from xbotlib import Bot -import json import jinja2 -import re -import os -import shutil +import os, re, json, shutil +import urllib.request +from urllib.parse import urlparse -output = './' +local = './' +server = '/var/www/logs/' -def add_to_db(self, message): - keys = [int(x) for x in self.db[message.room].keys()] +# output = local +output = server + +def add_to_db(self, message, media_post=None): + keys = [x for x in self.db[message.room]['messages'].keys()] if not keys: - new_key = '0' + new_key = "0" + else: + new_key = str(int(keys[-1]) + 1) + if media_post: + self.db[message.room]['messages'][new_key] = media_post else: - new_key = str(keys[-1] + 1) - self.db[message.room][new_key] = message.content + self.db[message.room]['messages'][new_key] = message.content.replace('@add','') def del_from_db(self, message, key): - del self.db[message.room][key] + del self.db[message.room]['messages'][key] def write_log(self, message): template_file = 'index.html.j2' # Hmm... how to read the self.template ? print('using the template: ', template_file) template = jinja2.Template(open(template_file).read()) - if not os.path.isdir(message.room): - os.mkdir(message.room) - shutil.copy('stylesheet.css', message.room) with open(f'{ output }/{ message.room }/index.html','w') as out: - html = template.render(room=message.room, db=self.db[message.room]) + html = template.render(title=self.db[message.room]['title'], db=self.db[message.room]['messages']) out.write(html) print('writing to: ', f'{ message.room }/index.html') +def download(message): + # define media_type + if message.url.lower().endswith(('.jpg','jpeg','png','.gif','.bmp','.svg','eps')): + media_type = 'images' + elif message.url.lower().endswith('.pdf'): + media_type = 'pdf' + elif message.url.lower().endswith(('.mp3','.ogg','.oga','.mogg','.wav','.m4a','.webm')): + media_type = 'audio' + elif message.url.lower().endswith(('.mp4','.webm','.flv','.vob','.avi','.mov','.qt','.mpg','.mpeg','.mp4','.m2v','.mpe','.3gp')): + media_type = 'video' + else: + media_type = None + + # download file + data = urllib.request.urlopen(message.url).read() + if data: + print('downloading: ', message.url) + parsed_url = urlparse(message.url) + filename = os.path.basename(parsed_url.path).replace(' ','_').replace('%20','_') # safe url's + print('as the file: ', filename) + if not os.path.isdir(f'{ message.room }/{ media_type }'): + os.mkdir(f'{ message.room }/{ media_type }') + with open(f'{ message.room }/{ media_type }/{ filename }', 'wb') as media_file: + media_file.write(data) + media_file.close() + + # define media_post + media_path = f'{ media_type }/{ filename }' + if message.url.lower().endswith(('.jpg','jpeg','png','.gif','.bmp','.svg','eps')): + media_post = f'' + elif message.url.lower().endswith('.pdf'): + media_post = f'' + elif message.url.lower().endswith(('.mp3','.ogg','.oga','.mogg','.wav','.m4a','.webm')): + media_post = f'' + elif message.url.lower().endswith(('.mp4','.webm','.flv','.vob','.avi','.mov','.qt','.mpg','.mpeg','.mp4','.m2v','.mpe','.3gp')): + media_post = f'' + else: + media_post = None + + return media_post, media_type class logbot(Bot): @@ -45,7 +88,7 @@ logbot @add : Add a message to the log. logbot @delete : Delete posts from the log. For example: @logbot @delete 5 -logbot @title : Set the title of your log. [future-feature] +logbot @title : Set the title of your log. logbot @style : Edit the css of your log. For example: logbot @style body background-color: pink; [future-feature] @@ -56,8 +99,18 @@ logbot @uptime: To check how long @logbot has been around def group(self, message): + # create a folder + database item + # for each of the rooms in which + # logbot is hanging around :) if not message.room in self.db.keys(): self.db[message.room] = {} + self.db[message.room]['messages'] = {} + self.db[message.room]['title'] = message.room + if not os.path.isdir(message.room): + os.mkdir(message.room) + shutil.copy('stylesheet.css', message.room) + else: + print('WARNING! This folder already exists:', message.room) # to debug in the terminal print('------------------') @@ -65,9 +118,15 @@ logbot @uptime: To check how long @logbot has been around print('room: ', message.room) print('sender: ', message.sender) + # image / PDF / audio / video if message.url: - # messages = writedb(f'') - reply = 'Thanks for that image!' + media_post, media_type = download(message) + if media_post: + add_to_db(self, 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 touch that :(' elif '@add' in message.text: add_to_db(self, message) @@ -77,9 +136,9 @@ logbot @uptime: To check how long @logbot has been around match = re.findall("@delete \d*", message.content)[0] key = str(match.replace('@delete ','')) - if key in self.db[message.room]: - print('To be deleted:', self.db[message.room][key]) - reply = f'This message is deleted: { self.db[message.room][key] }' + if key in self.db[message.room]['messages']: + print('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) else: reply = 'This message is already gone!' @@ -88,7 +147,10 @@ logbot @uptime: To check how long @logbot has been around print('HELP') elif '@title' in message.text: - reply = 'This is a future-feature ...' + match = re.findall("@title .*", message.content)[0] + title = match.replace('@title','') + self.db[message.room]['title'] = title + reply = f'The title of the log is changed to: { title }' elif '@style' in message.text: reply = 'This is a future-feature ...' diff --git a/LogBot/stylesheet.css b/LogBot/stylesheet.css index bfcadc4..78c9d7e 100644 --- a/LogBot/stylesheet.css +++ b/LogBot/stylesheet.css @@ -1,5 +1,6 @@ body{ margin: 1em; + max-width: 800px; } .post{ margin: 1em 0; @@ -10,4 +11,11 @@ body{ margin: 0 1em 1em; } .post p.message{ +} +img, +iframe, +audio, +video{ + max-width: calc(100% - 100px); + height: auto; } \ No newline at end of file