Форум программистов, компьютерный форум, киберфорум
Python: API, боты
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.95/140: Рейтинг темы: голосов - 140, средняя оценка - 4.95
1 / 1 / 1
Регистрация: 05.06.2013
Сообщений: 27

Календарь для телеграм бота

11.05.2018, 18:58. Показов 26544. Ответов 2

Author24 — интернет-сервис помощи студентам
Есть 2 функции: реализации календаря и выбора даты.
Python Скопировано
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
@bot.message_handler(commands=['calendar'])
def get_calendar(message):
    now = datetime.datetime.now() #Current date
    chat_id = message.chat.id
    date = (now.year, now.month)
    current_shown_dates[chat_id] = date #Saving the current date in a dict
    markup = create_calendar(now.year, now.month)
    bot.send_message(message.chat.id, "Пожалуйста, выберите дату", reply_markup=markup)
 
 
@bot.callback_query_handler(func=lambda call: call.data[0:13] == 'calendar-day-')
def get_day(call):
    chat_id = call.message.chat.id
 
    bot.register_next_step_handler(call, chat_id)
 
 
def date_for(chat_id):
    saved_date = current_shown_dates.get(chat_id)
    if(saved_date is not None):
        day = call.data[13:]
        date = datetime.date(int(saved_date[0]), int(saved_date[1]), int(day))
        bot.send_message(chat_id, str(date))
        bot.answer_callback_query(call.id, text="Выбрана дата")
        global str_date
        str_date = str(date)
        return date
 
    else:
        bot.send_message(chat_id, 'Ошибка')
        pass
Есть обработчик кнопки, по которому должен вызываться календарь и обрабатываться нажатие на дату.

Python Скопировано
1
2
3
4
5
6
@bot.message_handler(commands=['inspections'])
def inspections(message):
    get_calendar(message)
    date = date_for(call.message.chat.id)
 
    if date...
При вызове последней функции бот падает с ошибкой:
date = date_for(call.message.chat.id)
AttributeError: 'function' object has no attribute 'message'
Что я делаю не так?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
11.05.2018, 18:58
Ответы с готовыми решениями:

Простой код для бота телеграм
Ребят, всем привет. Может кто-то написать, пожалуйста простой код для бота телеграм? Суть кода в том, что нужно создать кнопку в меню бота,...

Создание бота Телеграм для борьбы с мошенниками (волонтёрство)
Друзья, добрый день. Я не эксперт в написании ботов, я аналитик, сейчас оказался частично вовлечён в некоммерческий проект по борьбе с...

Не получается интерпретировать алгоритм для телеграм бота с использованием модуля aiogram
Мне надо написать бота для телеги который будет загадывать числа и использовать при этом модуль aiogram. Для этого я сначала написал...

2
Эксперт Python
5437 / 3859 / 1215
Регистрация: 28.10.2013
Сообщений: 9,552
Записей в блоге: 1
12.05.2018, 13:52
Цитата Сообщение от andrew1ee Посмотреть сообщение
Что я делаю не так?
Исходя из документации по telebot вы неверно используете register_next_step_handler.
Пример из документации:

Python Скопировано
1
2
3
4
5
6
7
8
9
10
11
12
13
@bot.message_handler(commands=['help', 'start'])
def send_welcome(message):
    msg = bot.reply_to(message, """\
Hi there, I am Example bot.
What's your name?
""")
    bot.register_next_step_handler(msg, process_name_step) # передается объект сообщения и имя функции-обработчика
 
# функция обработчик - принимает сообщение
def process_name_step(message):
    try:
        chat_id = message.chat.id
        ....
Дальше думайте сами - я использую другую библиотеку для ботов и с telebot знаком поверхностно.
0
1 / 1 / 1
Регистрация: 05.06.2013
Сообщений: 27
13.05.2018, 16:50  [ТС]
Переделал

Python Скопировано
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
@bot.callback_query_handler(func=lambda call: call.data[0:13] == 'calendar-day-')
def get_day(call):
    chat_id = call.message.chat.id
    bot.register_next_step_handler(call, date_for)
def date_for(chat_id):
    saved_date = current_shown_dates.get(chat_id)
    if(saved_date is not None):
        day = call.data[13:]
        date = datetime.date(int(saved_date[0]), int(saved_date[1]), int(day))
        bot.send_message(chat_id, str(date))
        bot.answer_callback_query(call.id, text="Выбрана дата")
        return date
    else:
        bot.send_message(chat_id, 'Ошибка')
        pass
Теперь при вызове
Python Скопировано
1
date = date_for(call.message.chat.id)
выдает ошибку: chat_id = message.chat.id
AttributeError: 'CallbackQuery' object has no attribute 'chat'
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
13.05.2018, 16:50
Помогаю со студенческими работами здесь

Оптимизация телеграм бота
Пытаюсь сделать телеграм бота для поиска. Вроде бы все готово, но вот проблема, def s работает слишком долго и отправляет сообщение...

Создание телеграм бота
Всем доброго времени суток! Заинтересовался созданием телеграм бота и столкнулся с проблемой... Мне нужно сделать бота, который раз в сутки...

Запуск телеграм бота на маке
Написали бота на винде, все прекрасно работает, поставили на мак, выдает ошибку подключения к хосту, не понимаем в чем дело. Текст...

Деплой Телеграм бота на Heroku
Хэй гайс. Нид хэлп. :cry: Запилил изи телеграмм бота на питоне - пытаюсь задеплоить на Heroku. В итоге он похоже не видит или не...

Не работает клавиатура у телеграм бота
До этого кода есть другая функция с обычным выведением текста из текстового файла после команд /grammar1, /lesson и тд. Хотела, чтобы на...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
Списки и кортежи в Python: различия, особенности, применение
py-thonny 13.04.2025
Python славится своей гибкостью при работе с данными. В арсенале языка есть две основные последовательные структуры данных, которые программисты используют ежедневно — списки и кортежи. Эти структуры. . .
Middleware в ASP.NET Core
UnmanagedCoder 13.04.2025
В ASP. NET Core термин "middleware" занимает особое место. Что же это такое? Middleware представляет собой программные компоненты, которые формируют конвейер обработки HTTP-запросов в приложении. . . .
Таблицы лута в Unity с MinMaxCurve и AnimationCurve
GameUnited 12.04.2025
Создание сбалансированного лута в играх — задача не из простых. Разработчики постоянно ищут способы настройки систем выпадения предметов, которые будут одновременно справедливыми для игроков и. . .
std::expected в C++: Управление ошибками
bytestream 12.04.2025
Обработка ошибок всегда была важной и одновременно сложной задачей в программировании на C++. На протяжении долгого времени разработчики использовали различные подходы: возвращаемые коды ошибок,. . .
Nullable типы и операторы объединения null в C#
UnmanagedCoder 12.04.2025
Многие шутят, что null — это миллиардная ошибка в программировании. И в этой шутке только доля шутки. Тони Хоар, создатель null-ссылки, сам назвал её своей "ошибкой на миллиард долларов". Почему?. . .
Аутентификация и авторизация JWT в микросервисах с API Gateway
stackOverflow 12.04.2025
В традиционных монолитных приложениях безопасность часто реализуется как единый защитный периметр - пользователь проходит аутентификацию один раз, после чего получает доступ ко всем функциям системы. . . .
TypeScript: Интерфейсы vs Типы
run.dev 11.04.2025
Современная разработка на JavaScript сталкивается с множеством проблем при масштабировании проектов. Типизация кода стала хорошим инструментом, помогающим избежать ошибок во время выполнения,. . .
Управление топиками и разделами Kafka
Javaican 11.04.2025
Apache Kafka — распределенная платформа потоковой передачи данных, которая стала стандартом для построения высоконагруженных систем обмена сообщениями. В современной архитектуре микросервисов,. . .
Миграция монолита в Event-Driven микросервисную архитектуру на C#
stackOverflow 11.04.2025
Монолитная архитектура – классический подход к разработке программного обеспечения. Это приложение, построенное как единое целое, где все компоненты тесно связаны между собой. Большинство проектов. . .
Go в Kubernetes: Управление ресурсами
golander 11.04.2025
Разработчики Go-приложений в Kubernetes часто сталкиваются с неожиданными проблемами производительности и даже внезапными отказами контейнеров. Причина этого кроется в особенностях взаимодействия. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru
Выделить код Копировать код Сохранить код Нормальный размер Увеличенный размер