コード例 #1
0
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
コード例 #2
0
ファイル: mod_tell.py プロジェクト: pydsigner/lofbot
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()
コード例 #3
0
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
コード例 #4
0
ファイル: views.py プロジェクト: neithere/orgtool
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}
コード例 #5
0
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
コード例 #6
0
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)