#!/usr/bin/env python3 """ Individual functions for handling WebSocket events. Gets called by the QuestConsumer object in consumers.py. """ import re import time import types import bleach from quest.models import Message, Quest def message(socket, data): """ Gets called when the server receives a 'message' event. """ # TODO: validation message = data.get('message') quest_id = data.get('quest_id') message = message.strip() if not message: return tags = ["b", "code", "i", "s"] message = bleach.clean(message, tags=tags) lines = [] for line in message.splitlines(): if line.startswith(">") and not line.startswith(">>"): line = '' + line + '' lines.append(line) message = "
".join(lines) quotes = re.findall(r">>\d+", message) for quote in quotes: msg_id = quote.replace(">>", "") msg = '' message = message.replace(quote, msg) user = socket.scope['user'] m = Message( quest=Quest.objects.get(id=quest_id), message=message) if user.username: m.user = user m.save() data = {} data['message_id'] = m.id data['message'] = message data['date'] = int(time.time()) data['name'] = user.username socket.send('message', data) events = {} for obj in dir(): if type(locals()[obj]) == types.FunctionType: events[locals()[obj].__name__] = locals()[obj]