Exemple #1
0
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)))
Exemple #2
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)
Exemple #3
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)
Exemple #4
0
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)
Exemple #5
0
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)
Exemple #6
0
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)
Exemple #7
0
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)
Exemple #8
0
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)