コード例 #1
0
ファイル: command_post.py プロジェクト: Kagami/bnw
def cmd_recommend(request, message="", comment="", unrecommend=""):
        """Recommend or unrecommend message."""
        message_id = canonic_message(message).upper()
        message_obj = yield objs.Message.find_one({'id': message_id})
        if not message_obj:
            defer.returnValue(dict(
                ok=False,
                desc='No such message.'))
        if unrecommend:
            if request.user['name'] in message_obj['recommendations']:
                yield objs.Message.mupdate(
                    {'id': message_id},
                    {'$pull': {'recommendations': request.user['name']}})
                rcount = len(message_obj['recommendations']) - 1
                all_recos = list(message_obj['recommendations'])
                all_recos.remove(request.user['name'])
                publish('upd_recommendations_count',
                        message_id, rcount, all_recos)
                publish('upd_recommendations_count_in_' + message_id,
                        message_id, rcount, all_recos)
                defer.returnValue(dict(
                    ok=True,
                    desc='Message deleted from your recommendations list.'))
            else:
                defer.returnValue(dict(
                    ok=False,
                    desc='You haven\'t recommended this message.'))

        post_throttle = yield throttle_check(request.user['name'])
        ok, rest = yield bnw_core.post.recommendMessage(
            request.user, message_obj, comment)
        yield throttle_update(request.user['name'], post_throttle)
        if ok:
            qn, recepients, replies = rest
            defer.returnValue(dict(
                ok=True,
                desc='Recommended and delivered to %d users (%d replies).' % (
                    recepients, replies)))
        else:
            defer.returnValue(dict(
                ok=False,
                desc=rest))
コード例 #2
0
ファイル: command_delete.py プロジェクト: Kagami/bnw
def cmd_delete(request, message="", last=False):
    """ Удаление

    Удаление поста или коммента.

    redeye: delete --message=123456, d -m ABCDEF/123, d --last, d -l
    simple: D #123456, D #ABDEF/123, D L"""
    message = canonic_message_comment(message).upper()
    if last:
        lastcomment = list((yield objs.Comment.find_sort({'user': request.user['name']}, [('date', -1)], limit=1)))
        lastmessage = list((yield objs.Message.find_sort({'user': request.user['name']}, [('date', -1)], limit=1)))
        if lastcomment:
            if lastmessage:
                message = lastmessage[0]['id'] if lastmessage[0][
                    'date'] > lastcomment[0]['date'] else lastcomment[0]['id']
            else:
                message = lastcomment[0]['id']
        else:
            if lastmessage:
                message = lastmessage[0]['id']
            else:
                defer.returnValue(
                    dict(ok=False, desc='Nothing to delete.')
                )
    if not message:
        defer.returnValue(
            dict(ok=False, desc='Usage: delete -m POST[/COMMENT]')
        )
    splitpost = message.split('/')
    message_id = splitpost[0].upper()
    comment_id = message if len(splitpost) > 1 else None
    if comment_id:
        comment = yield objs.Comment.find_one({'id': comment_id, 'message': message_id})
    post = yield objs.Message.find_one({'id': message_id})
    if comment_id:
        if not comment:
            defer.returnValue(
                dict(ok=False, desc='No such comment')
            )
        if request.user['name'] not in (comment['user'], post['user'], comment.get('real_user'), post.get('real_user')):
            defer.returnValue(
                dict(ok=False, desc='Not your comment and not your message.')
            )
        _ = (yield objs.Message.mupdate({'id': message_id}, {'$inc': {'replycount': -1}}))
        _ = yield objs.Comment.remove({'id': comment['id'], 'message': comment['message'], 'user': comment['user']})
        publish('del_comment_in_' + message_id, comment_id)
        publish('upd_comments_count', message_id, post['replycount'] - 1)
        publish('upd_comments_count_in_' + message_id,
                message_id, post['replycount'] - 1)
        defer.returnValue(
            dict(ok=True, desc='Comment %s removed.' % (comment_id,))
        )
    else:
        if not post:
            defer.returnValue(
                dict(ok=False, desc='No such message.')
            )
        if request.user['name'] not in (post['user'], post.get('real_user')):
            defer.returnValue(
                dict(ok=False, desc='Not your message.')
            )
        _ = yield objs.Message.remove({'id': post['id'], 'user': post['user']})
        _ = yield objs.Comment.remove({'message': post['id']})
        publish('del_message', message_id)
        publish('del_message_on_user_' + post['user'], message_id)
        defer.returnValue(
            dict(ok=True, desc='Message %s removed.' % (message,))
        )