def cmd_start(message, user, chat): typing(message) if message.chat.type == 'private': bot.send_message( message.chat.id, _('hello {user_name}', locale=user.locale).format( user_name=get_username_or_name(message.from_user)))
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 cmd_statistic(message): try: typing(message) if bool(message.reply_to_message): user = message.reply_to_message.from_user else: user = message.from_user karma = get_cached_user_karma(user.id, message.chat.id) # TODO: translate bot.reply_to( message, 'Статистика пользователя {user}:\nКарма: {karma}'.format( user=get_username_or_name(user), karma=karma)) except: crash_message(message)
def cmd_reset_chat(message): try: typing(message) if is_private(message) or not sender_is_admin(message.chat.id, message.from_user.id): return None reset = reset_chat_karma(message.chat) if reset: bot.reply_to( message, get_num_ending( reset, ('Отменена {} транзакция.', 'Отменено {} транзакции.', 'Отменено {} транзакций.')).format(reset)) else: bot.reply_to(message, 'Нечего отменять.') except: crash_message(message)
def cmd_pay(message): try: typing(message) if message.chat.type == 'private': return bot.reply_to(message, 'Доступно только в груповых диалогах') if not bool( message.reply_to_message ) or message.reply_to_message.from_user.id == message.from_user.id: return bot.reply_to(message, 'Нельзя переводить карму себе же.') amount_pos = 0 for messageEntity in message.entities: if messageEntity.type == 'bot_command': amount_pos = messageEntity.offset + messageEntity.length break amount = message.text[amount_pos:].strip() if not amount.isdigit(): return bot.reply_to(message, 'Не верная сумма перевода') amount = abs(int(amount)) if amount == 0: return bot.reply_to(message, 'Сумма перевода должна біть больше нуля') from_user_karma = get_cached_user_karma(message.from_user.id, message.chat.id) if amount > from_user_karma: return bot.reply_to( message, 'Нельзя переводить больше, чем карма отправителя.') karma_transaction(message.chat, message.from_user, message.reply_to_message.from_user, amount, 'transfer') except: crash_message(message)
def cmd_admin_pay(message): try: if is_private(message) or not sender_is_admin(message.chat.id, message.from_user.id): return None if not bool(message.reply_to_message): return None typing(message) amount_pos = 0 for messageEntity in message.entities: if messageEntity.type == 'bot_command': amount_pos = messageEntity.offset + messageEntity.length break amount = message.text[amount_pos:].strip() if amount.startswith('-'): minus = True amount = amount.replace('-', '') else: minus = False if not amount.isdigit(): return bot.reply_to(message, 'Не верная сумма перевода') amount = -int(amount) if minus else int(amount) karma_transaction(message.chat, message.from_user, message.reply_to_message.from_user, amount, 'admin transfer', transfer=False) except: crash_message(message)
def cmd_messages_count(message): try: typing(message) date = datetime.now(TIMEZONE) - timedelta(days=1) users = Messages.calculate(message.chat.id, date) text = ['Топ флудеров за последние 24 часа:'] 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)