def import_events(room_id, limit=None): events = get_room_events(room_id) # restrict to messages messages = (event for event in events if event['type'] in MESSAGE_EVENT_TYPES) # exclude redacted messages messages = (event for event in messages if 'redacted_because' not in event) # exclude messages that have already been saved messages = (event for event in messages if not Message.objects(event_id=event['event_id'], room_id=event['room_id'])) if limit: messages = islice(messages, limit) for event in messages: fields = event.copy() fields['messageType'] = fields.pop('type') fields['room_id'] = room_id fields['timestamp'] = datetime.fromtimestamp( fields.pop('origin_server_ts') / 1000) fields.pop('age', None) fields.pop('unsigned', None) try: message = Message(**replace_dots(fields)) message.save() except (FieldDoesNotExist, ValidationError): print(fields) raise yield message
def tell_cb(client): if Message.count(): for player in client.online_players: for msg in Message.filter(recipient=player): client.whisper(player, msg.text) msg.remove() get_connection().commit() close_connection()
def read_messages_from_url(s,url): r = s.get(url) soup = bs(r.text) message_table = soup.find(id="messageList") ret = [] messages = message_table.find_all(class_="text") for me in messages: id = int(me.a.attrs["name"]) print "message id", id if dbsession.query(Message).filter(Message.id==id).count() == 0: try: m = Message.populate_message_from_id(s,id) ret.append(m) dbsession.add(m) dbsession.commit() except AttributeError: pass else: m = dbsession.query(Message).filter(Message.id==id).first() ret.append(m) print "already in database" return ret
def message_index(request, year=None, month=None, day=None): db = default_storage() messages = Message.objects(db).order_by('date_time', reverse=True) if year: messages = messages.where(date_time__year=year) if month: messages = messages.where(date_time__month=month) if day: messages = messages.where(date_time__day=day) for name in 'sent_by', 'sent_to': if name in request.values: print repr(request.values[name]) messages = messages.where(**{name: request.values[name]}) # if 'state' in request.values: # messages = messages.where(state=request.values['state']) if 'q' in request.values: messages = messages.where(summary__contains=request.values['q']) print messages._conditions return {'object_list': messages}
def sendMessage(receiver, content, sender='system', title=''): # create system account if not exists if sender == 'system' and account.searchUser('system') is None: account.registerUser('system', '*****@*****.**', 'system-pwd', 10000) time = datetime.datetime.now(pytz.timezone('US/Eastern')) message = Message(senderUsername=sender, receiverUsername=receiver, title=title, content=content, time=time) try: db.session.add(message) db.session.commit() return message.messageId except Exception as e: print e db.session.rollback() return None
def export_archive(room_id, local_images, filename): if room_id and not re.match(r'!.+:matrix.org', room_id): from matrix_connection import matrix_client rooms = matrix_client().get_rooms() room_id = next(id for id, room in rooms.items() if room_id in room.display_name) if not room_id: room_id, *_ = MATRIX_ROOM_IDS fmt = Path(filename).suffix.lstrip('.') if fmt not in ARCHIVE_FORMATS: raise click.BadParameter(f"{fmt} is not in {ARCHIVE_FORMATS}") messages = Message.objects(room_id=room_id).order_by('timestamp') data = map(encode_message, messages) print(f"Writing {len(messages)} messages to {filename!r}") with open(filename, 'w') as fp: if fmt in ('text', 'txt', 'html'): if local_images: data = map(replace_by_local_image, data) template_path = f'templates/default.{fmt}.tpl' dump_html_archive(data, fp, template_path=template_path) elif fmt == 'json': json.dump(list(data), fp, indent=2) elif fmt == 'yaml': yaml.dump(list(data), fp, default_flow_style=None)