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