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)
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)
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