|
|
@ -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'<img src="{ media_path }">' |
|
|
|
elif message.url.lower().endswith('.pdf'): |
|
|
|
media_post = f'<iframe src="{ media_path }" width="800" height="1000"></iframe>' |
|
|
|
elif message.url.lower().endswith(('.mp3','.ogg','.oga','.mogg','.wav','.m4a','.webm')): |
|
|
|
media_post = f'<audio controls src="{ media_path }"></audio>' |
|
|
|
elif message.url.lower().endswith(('.mp4','.webm','.flv','.vob','.avi','.mov','.qt','.mpg','.mpeg','.mp4','.m2v','.mpe','.3gp')): |
|
|
|
media_post = f'<video controls src="{ media_path }"></video>' |
|
|
|
else: |
|
|
|
media_post = None |
|
|
|
|
|
|
|
return media_post, media_type |
|
|
|
|
|
|
|
class logbot(Bot): |
|
|
|
|
|
|
@ -45,7 +88,7 @@ logbot @add <message>: Add a message to the log. |
|
|
|
|
|
|
|
logbot @delete <num>: Delete posts from the log. For example: @logbot @delete 5 |
|
|
|
|
|
|
|
logbot @title <string>: Set the title of your log. [future-feature] |
|
|
|
logbot @title <string>: Set the title of your log. |
|
|
|
|
|
|
|
logbot @style <element> <css-rule>: 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'<img src="{ message.url }">') |
|
|
|
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 ...' |
|
|
|