Подведи собственные итоги года совместно с YOUGAME и забери ценные призы! Перейти

Делаем своего простенького бота для Telegram (Python) | 2 часть

Разработчик
Разработчик
Статус
Оффлайн
Регистрация
1 Сен 2018
Сообщения
1,670
Реакции
923
Всем привет,это уже наш второй урок,в которым мы будем разбирать ветки сообщений и кнопки!
Давай припустим что-бы бот вел диалог с пользователем,как же это сделать? Для этого нам нужен будет метод egister_next_step_handler
Сам примерный код:

Python:
Expand Collapse Copy
NickName = '';
status = '';
age = 0;
@bot.message_handler(content_types=['text'])
def start(message):
    if message.text == '/reg':
        bot.send_message(message.from_user.id, "Какой у тебя ник на yougame.biz?");
        bot.register_next_step_handler(message, get_NickName); #следующий шаг – функция get_NickName
    else:
        bot.send_message(message.from_user.id, 'Напиши /reg');

def get_stus(message): #получаем статус
    global NickName;
    NickName = message.text;
    bot.send_message(message.from_user.id, 'Какой у тебя статус?');
    bot.register_next_step_handler(message, get_status);

def get_surname(message):
    global status;
    status = message.text;
    bot.send_message('Сколько тебе лет?');
    bot.register_next_step_handler(message, get_age);

def get_age(message):
    global age;
    while age == 0: #проверяем что возраст изменился
        try:
             age = int(message.text) #проверяем, что возраст введен корректно
        except Exception:
             bot.send_message(message.from_user.id, 'Цифрами, пожалуйста');
      bot.send_message(message.from_user.id, 'Тебе '+str(age)+' лет, твой ник '+name+' '+status+'?')
И так на данные о самом пользователе,у нас составляются. Лучше конечно все делать через БД,но сейчас у нас всего 2 урок :3
Теперь можно сделать "confirm" кнопками,как это все мы любим :0 Для этого мы почти полностью переписываем get_age
Python:
Expand Collapse Copy
def get_age(message):
    global age;
    while age == 0: #проверяем что возраст изменился
        try:
             age = int(message.text) #проверяем, что возраст введен корректно
        except Exception:
             bot.send_message(message.from_user.id, 'Цифрами, пожалуйста');
      keyboard = types.InlineKeyboardMarkup(); #наша клавиатура
      key_yes = types.InlineKeyboardButton(text='Yes', callback_data='yes'); #кнопка «Да»
      keyboard.add(key_yes); #добавляем кнопку в клавиатуру
      key_no= types.InlineKeyboardButton(text='No', callback_data='no');
      keyboard.add(key_no);
      question = 'Тебе '+str(age)+' лет, тебя зовут '+NickName+' '+status+'?';
      bot.send_message(message.from_user.id, text=question, reply_markup=keyboard)
Ну что? Клавиатура работает,но если на ее нажать ничего не будет. Предлагаю написать "свой" метод обработчик

Python:
Expand Collapse Copy
@bot.callback_query_handler(func=lambda call: True)
def callback_worker(call):
    if call.data == "yes": #call.data это callback_data, которую мы указали при объявлении кнопки
        .... #код сохранения данных, или их обработки
        bot.send_message(call.message.chat.id, 'Запомню : )');
    elif call.data == "no":
         ... #переспрашиваем
Все отлично работает. До новых встреч :)



P.S: Мало обьяснений,ну бывает. В следующем уроке исправлюсь
Все таки мы тут не маленький калькулятор пишем,а серьезного бота:CoolCat:
 
Последнее редактирование:
АХхаха пиздец мем блять... Как бы все функции описаны в документации.
p.s тема ебаная паста с стаковерфлоу
Пожалуйста, авторизуйтесь для просмотра ссылки.

Даже комментарии одинаковые...
Согласен,пойду дальше пастить с оверфлова,ботов с ошибками.Пздц,у тебя логика
 
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Если тебе так трудно написать два слова в поиск - telegram api, мои сожаления к тебе.
Пожалуйста, авторизуйтесь для просмотра ссылки.
Он пишет ГАЙД где он должен всё ОБЪЯСНИТЬ но даже не оставляя ссылку на документацию, так это тупая паста кода получется.
 
Он пишет ГАЙД где он должен всё ОБЪЯСНИТЬ но даже не оставляя ссылку на документацию, так это тупая паста кода получется.
Какой смысл документации? Цитирую @Lunatrius_ , если захочешь найдешь ее в гугле за 2 секунды
 
Назад
Сверху Снизу