• Ну и что вы думаете? Мы взяли и создали свой собственный чат, с блекджеком и шлюхами, теперь все легенды в одном месте: даже те 1000 человек, которых мы забанили в старом чате 🫡 Будем публиковать там очень интересные подробности нового дизайна форума, oh yeah

    Вступай и становись легендой, пока это не стало поздно: жмякай на меня, ток не сильно(

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

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

Python:
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:
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:
@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:
 
Последнее редактирование:
Пользователь
Статус
Оффлайн
Регистрация
19 Май 2017
Сообщения
183
Реакции[?]
47
Поинты[?]
0
Разработчик
Статус
Оффлайн
Регистрация
1 Сен 2018
Сообщения
1,644
Реакции[?]
885
Поинты[?]
120K
АХхаха пиздец мем блять... Как бы все функции описаны в документации.
p.s тема ебаная паста с стаковерфлоу
Пожалуйста, авторизуйтесь для просмотра ссылки.

Даже комментарии одинаковые...
Согласен,пойду дальше пастить с оверфлова,ботов с ошибками.Пздц,у тебя логика
 
Разработчик
Статус
Оффлайн
Регистрация
1 Сен 2018
Сообщения
1,644
Реакции[?]
885
Поинты[?]
120K
А так брать пример из документации,это стыдное дело :0
 
substandard rank
Забаненный
Статус
Оффлайн
Регистрация
21 Янв 2019
Сообщения
429
Реакции[?]
113
Поинты[?]
0
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Пользователь
Статус
Оффлайн
Регистрация
19 Май 2017
Сообщения
183
Реакции[?]
47
Поинты[?]
0
Если тебе так трудно написать два слова в поиск - telegram api, мои сожаления к тебе.
Пожалуйста, авторизуйтесь для просмотра ссылки.
Он пишет ГАЙД где он должен всё ОБЪЯСНИТЬ но даже не оставляя ссылку на документацию, так это тупая паста кода получется.
 
Разработчик
Статус
Оффлайн
Регистрация
1 Сен 2018
Сообщения
1,644
Реакции[?]
885
Поинты[?]
120K
Он пишет ГАЙД где он должен всё ОБЪЯСНИТЬ но даже не оставляя ссылку на документацию, так это тупая паста кода получется.
Какой смысл документации? Цитирую Lunatrius_ , если захочешь найдешь ее в гугле за 2 секунды
 
Разработчик
Статус
Оффлайн
Регистрация
1 Сен 2018
Сообщения
1,644
Реакции[?]
885
Поинты[?]
120K
Сверху Снизу