示例#1
0
def cmd_core_stat(message):
    try:
        if is_private(message) or not sender_is_admin(message.chat.id,
                                                      message.from_user.id):
            return None
        typing(message)

        karma_objects = Karma.objects(chat=message.chat.id)
        transactions = 0
        users = []
        canceled = 0
        canceled_amount = 0
        amount = 0

        for karma in karma_objects:
            transactions += 1
            amount += karma.amount
            if karma.to_user not in users:
                users.append(karma.to_user)
            if karma.from_user not in users:
                users.append(karma.from_user)
            if karma.rollback:
                canceled += 1
                canceled_amount += karma.amount

        bot.reply_to(
            message, 'Транзакций: {} (отменено: {}, активно: {})\n'
            'Пользователей: {}\n'
            'Карма в чате: {} (отменено {}, активно {})\n'.format(
                transactions, canceled, transactions - canceled, len(users),
                amount, canceled_amount, amount - canceled_amount))
    except:
        crash_message(message)
示例#2
0
def cmd_top(message):
    try:
        typing(message)
        karma_records = Karma.objects(chat=message.chat.id)
        users = {}
        for karma in karma_records:
            if karma.rollback:
                continue
            if karma.from_user and karma.transfer:
                users[karma.from_user] = users.get(karma.from_user,
                                                   0) - karma.amount
            if karma.to_user:
                users[karma.to_user] = users.get(karma.to_user,
                                                 0) + karma.amount

        text = ['Статистика:']

        if bot_id in users:
            users.pop(bot_id)

        for index, (user, karma) in enumerate(sorted(users.items(),
                                                     key=lambda x: x[1],
                                                     reverse=True),
                                              start=1):
            if index > 10:
                break
            text.append('{}) {}: {}'.format(
                index, get_username_or_name(bot.get_chat(user)), karma))
        bot.send_message(message.chat.id,
                         '\n'.join(text),
                         disable_notification=True)
    except:
        crash_message(message)
示例#3
0
def reset_chat_karma(chat):
    chat_karma = Karma.objects(chat=chat.id)

    counter = 0
    for karma in chat_karma:
        if not karma.rollback:
            karma.revoke()
            counter += 1

    # reset_cache()
    reset_cached_chat_karma(chat)
    generate_karma_cache()

    log.warning('Reset karma for chat: {} (<code>{}</code>)\n'
                '<code>{}</code> transactions'.format(
                    chat.title or get_username_or_name(chat), chat.id,
                    counter))
    return counter