from xbotlib import Bot import jinja2 import os, re, json, shutil import urllib.request from urllib.parse import urlparse local = './' server = '/var/www/logs/' # 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" 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): 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()) with open(f'{ output }/{ message.room }/index.html','w') as out: 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): 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 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] logbot @uptime: To check how long @logbot has been around @bots: To see who is 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('------------------') print('message: ', message.text) print('room: ', message.room) print('sender: ', message.sender) # image / PDF / audio / video if message.url: 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) reply = 'Added, thanks!' elif '@delete' in message.text: match = re.findall("@delete \d*", message.content)[0] key = str(match.replace('@delete ','')) 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!' elif '@help' in message.text: print('HELP') elif '@title' in message.text: 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 ...' else: reply = 'Hmm ... not sure what you want to do?' write_log(self, message) return self.reply(reply, room=message.room) logbot()