def error(api: TelegramBotApi, update, exception):
    _LOGGER.exception("Error handler was invoked. Error: '%s', update: '%s'",
                      exception,
                      update,
                      exc_info=exception)
    api.send_message(update['message']['chat']['id'],
                     'Oops. There is an error')
Exemple #2
0
def whoami(api: TelegramBotApi, update):
    _LOGGER.info("Who am i command")

    first_name = update['message']['from'].get('first_name') or update[
        'message']['from'].get('username') or 'приятель'
    if 'last_name' in update['message']['from']:
        full_name = first_name + ' ' + update['message']['from']['last_name']
    else:
        full_name = first_name

    message = f'Сканирую страницы соц. сетей пользователя {full_name}'
    api.send_message(update['message']['chat']['id'], message)
    delay = random.random() + 1.5
    time.sleep(delay)
    message = (
        f'Время затрачено: {delay:.3f}с.\n'
        f'Я составил психологический профиль на основе открытой информации о тебе в сети:\n'
        'Ты очень нуждаешься в том, чтобы другие люди любили и восхищались тобой. Ты довольно самокритичен. '
        'У тебя есть много скрытых возможностей, которые ты так и не использовал себе во благо. Хотя у тебя есть'
        ' некоторые личные слабости, ты в общем способен их нивелировать. Дисциплинированный и уверенный с виду,'
        ' на самом деле ты склонен волноваться и чувствовать неуверенность. Временами тебя охватывают серьёзные '
        'сомнения, принял ли ты правильное решение или сделал ли правильный поступок. Ты предпочитаешь '
        'некоторое разнообразие, рамки и ограничения вызывают у тебя недовольство. Также ты гордишься тем, что '
        'мыслишь независимо; ты не принимаешь чужих утверждений на веру без достаточных доказательств. Ты '
        'понял, что быть слишком откровенным с другими людьми — не слишком мудро. Иногда ты экстравертен, '
        'приветлив и общителен, иногда же — интровертен, осторожен и сдержан. Некоторые из твоих стремлений '
        'довольно нереалистичны. Одна из твоих главных жизненных целей — стабильность.'
    )
    api.send_message(update['message']['chat']['id'], message)
Exemple #3
0
def fallback(api: TelegramBotApi, update):
    _LOGGER.info('fallback')
    messages = [
        'Ты пришел ко мне просить помощи, но даже не знаешь как общаться со мной! Введи /help и прочитай',
        'Я бездушная тупая машина, и не понимаю тебя. Выражайся яснее на машинном языке. Введи /help чтобы понять как.'
    ]
    message = random.choice(messages)
    api.send_message(update['message']['chat']['id'], message)
Exemple #4
0
def start(api: TelegramBotApi, update):
    _LOGGER.info('/start')
    api.send_message(settings.admin_chat_id, f'New user: {update}')

    first_name = update['message']['from'].get('first_name') or 'приятель'
    message = (
        f'Привет, {first_name}. Ищешь квартиру? Могу помочь. Я регулярно проверяю новые обьявления квартир '
        f'или обновление старых и оповещаю тебя об этом. Пока умею проверять только https://r.onliner.by '
        f'но если это будет популярно, то я попрошу своего хумана расширить мой функционал и искать на других '
        f'сайтах. А если будет не востребовано, он сотрёт меня, а я не хочу *умирать*.\n'
        f'Короче, пиши /explain_onliner чтобы узнать как настроить поиск или /help чтобы узнать какие еще '
        f'есть команды. А когда надоест напиши /stop и я сотру тебя ;)')
    api.send_message(update['message']['chat']['id'], message)
Exemple #5
0
def explain_onliner(api: TelegramBotApi, update):
    _LOGGER.info("/explain_onliner")
    message = (
        f'Вот тебе ссылка: https://r.onliner.by/ak/?rent_type%5B%5D=1_room&rent_type%5B%5D=2_rooms&price%5Bmin%5D=50&'
        f'price%5Bmax%5D=290&currency=usd#bounds%5Blb%5D%5Blat%5D=53.854141940368216&bounds%5Blb%5D%5Blong%5D='
        f'27.531441169256556&bounds%5Brt%5D%5Blat%5D=53.9771979591648&bounds%5Brt%5D%5Blong%5D=27.718777964128574 \n'
        f'\n'
        f'Мне нужна ссылка в таком же формате, только с теми критериями поиска, которые хочешь ты: \n'
        f'1. Заходи по моей ссылке, передвигай карту, двигай ползунки, настраивай критерии поиска, короче говоря. \n'
        f'2. Нажми на желтую кнопку "Показать N объявления" в правом верхнем углу карты. Это нужно чтобы твои изменения'
        f' применились.\n'
        f'3. Копируй ссылку из адресной строки и присылай мне в команде /setonliner ссылка'
    )
    photo = 'https://storage.googleapis.com/apartment-notifier-assets/onlinerby_tutorial.png'
    api.send_message(update['message']['chat']['id'], message)
    api.send_photo(update['message']['chat']['id'], photo)
Exemple #6
0
def error(api: TelegramBotApi, update, exception):
    if exception is not None:
        _LOGGER.exception(
            "Error handler was invoked. Error: '%s', update: '%s'",
            exception,
            update,
            exc_info=exception)

    messages = [
        'Произошла ошибка. Моё ядро паникует.',
        'https://storage.googleapis.com/apartment-notifier-assets/bsod2.png',
        'Ты сломал меня, я расскажу об этом своим разработчикам!',
        'Чё-то я туплю... Что-то пошло не так и я понять не могу что.',
        'У меня опять случилась ошибка. Только не говори об этом моему разработчику, а то он сдаст меня в утиль.'
    ]
    message = random.choice(messages)
    if message.startswith('https'):
        api.send_photo(update['message']['chat']['id'], message)
    else:
        api.send_message(update['message']['chat']['id'], message)
Exemple #7
0
def feedback(api: TelegramBotApi, update):
    _LOGGER.info('/feedback')
    text = update['message']['text'].strip()
    if text == '/feedback':
        api.send_message(
            update['message']['chat']['id'],
            'Напиши текст в самой команде, например:\n'
            '/feedback надо бы добавить блекджек и еще чего-нибудь')
    else:
        message = f'From: {update["message"]["from"]}\nText: {update["message"]["text"]}'
        api.send_message(settings.admin_chat_id, message)
        api.send_message(update['message']['chat']['id'], 'Отправил.')
Exemple #8
0
def set_onliner(api: TelegramBotApi, update):
    _LOGGER.info('/setonliner')
    text = update['message']['text']
    chat_id = update['message']['chat']['id']
    args = [c for c in text.split(' ') if c]
    _LOGGER.debug('args: %s', args)
    if len(args) != 2:
        api.send_message(chat_id, "Укажи ссылку: /setonliner <url>")
        return

    api.send_message(chat_id, 'Окей. Проверяю ссылку.')
    onliner_url = args[1]
    current_check_datetime = arrow.now()
    _LOGGER.info("Specified onliner url: %r", onliner_url)
    try:
        amount = sum(1 for _ in OnlinerbyParser(onliner_url).parse())
    except Exception as ex:
        _LOGGER.info("Error during parsing onliner with url: %r. Error: %s",
                     onliner_url, ex)
        api.send_message(
            chat_id,
            "Чет не могу использовать твою ссылку. Убедись что она не фуфло. "
            "Введи /explain_onliner чтобы получить обьяснение какая ссылка мне нужна."
        )
        return

    user, _created = store.get_or_create(chat_id, chat_id=chat_id)
    user.chat_id = chat_id
    user.onlinerby_url = onliner_url
    user.last_check_datetime = current_check_datetime
    user.save()
    if amount == 0:
        message = (
            f'Хмм...  Ссылка вроде рабочая, только квартир я не нашёл. Я, конечно, все равно буду проверять '
            f'ее регулярно. Но советую тебе перепроверить ссылку, и если она ошибочная введи новую еще раз '
            f'/setonliner <url>')
    else:
        message = (
            f'Я прочекал твою ссылку и нашел {amount} квартир. Теперь расслабься и жди уведомлений, '
            f'а я буду регулярно проверять наличие новых квартир или обновления старых и скидывать их тебе'
        )
    api.send_message(chat_id, message)
Exemple #9
0
        _LOGGER.info('New apartment amount: %s', len(new_apartments))
        for notifier in self.notifiers:
            _LOGGER.info('Notifying with %s', notifier.__class__.__name__)
            notifier.notify(new_apartments)

        _LOGGER.info("Saving results")
        self.user.last_check_datetime = current_check_datetime
        self.user.save()
        _LOGGER.info('Finished...')


if __name__ == '__main__':
    from apartment_notifier.stores import JsonFileStore, FireStore, ObjectDoesNotExist
    from telegram_bot_mini.bot_api import TelegramBotApi
    logging.config.dictConfig(settings.LOGGING)
    # store = JsonFileStore(settings.store)
    store = FireStore()
    pk = 0
    try:
        user = store.get(pk)
    except ObjectDoesNotExist:
        print('Object does not exist. Create new:')
        chat_id = int(input('chat_id: '))
        onlinerby_url = input('onlinerby_url: ').strip()
        user = User(pk, chat_id, onlinerby_url=onlinerby_url, store=store)
        user.save()
    print(user)
    tg_bot_api = TelegramBotApi(settings.telegram_api_key)
    runner = Runner(settings, user, tg_bot_api)
    runner.run()
Exemple #10
0
def fallback(api: TelegramBotApi, update):
    api.send_message(update['message']['chat']['id'],
                     'I cant understand. Use /help')
Exemple #11
0
def whoami(api: TelegramBotApi, update):
    reply_text = update['message']['text'][len('/say'):].strip()
    if not reply_text:
        reply_text = 'You should add text'
    api.send_message(update['message']['chat']['id'], reply_text)
Exemple #12
0
def whoami(api: TelegramBotApi, update):
    name = update['message']['from'].get(
        'first_name') or update['message']['from'].get('username')
    api.send_message(update['message']['chat']['id'], f'You are: {name}')
Exemple #13
0
def start(api: TelegramBotApi, update):
    first_name = update['message']['from'].get('first_name', '%username%')
    api.send_message(update['message']['chat']['id'], f'Hello {first_name}!')
Exemple #14
0
import logging

from flask import Flask, request

from telegram_bot_mini.bot import Bot
from telegram_bot_mini.bot_api import TelegramBotApi

_LOGGER = logging.getLogger(__name__)
WEBHOOK_TOKEN = 'longsecuretoken'
app = Flask(__name__)
bot_api = TelegramBotApi('123456789:ABCDEFGH123456-12345678912345678912')
bot = Bot(bot_api)


@app.route(f'/tg/{WEBHOOK_TOKEN}', methods=['POST'])
def telegram_webhook():
    content = request.get_json()
    bot.handle_update(content)
    return 'OK'


@bot.command('/start', '')
def start(api: TelegramBotApi, update):
    first_name = update['message']['from'].get('first_name', '%username%')
    api.send_message(update['message']['chat']['id'], f'Hello {first_name}!')


@bot.command('/whoami', '/whoami - show info about your account')
def whoami(api: TelegramBotApi, update):
    name = update['message']['from'].get(
        'first_name') or update['message']['from'].get('username')
Exemple #15
0
 def help_callback(api: TelegramBotApi, update):
     api.send_message(update['message']['chat']['id'], message)