Новичок в этих делах. Не пойму как мне связать моего бота, чтобы он получал последнее сообщение из группового чата (в чат бота добавил), с файлом в формате .py, в котором написан код? Нужно ли где-то указывать айди чата? если да, то как его получить?
Andrey Barbolin, "@bot.message_handler" - это не функция, а декоратор и она не слушает сообщения, а реагирует только на команду "/start"
по ссылке же все написано
Andrey Barbolin, так лучше, но у меня вопрос тогда: а ее всегда нужно указывать? Я думал, что декоратор нужен, чтобы бот мог "разобрать" текст, а мне нужно получить даже не само сообщение (уточню - последнее сообщение), а время, когда оно было написано. и я правильно понимаю, что всё-таки связующим звеном между файлом питона и чатом в телеграме для бота является токен? то есть фактически у меня все готово, только текст файла нужно написать корректно?
Токен нужен для того чтоы бот мог подключится к сети телеграмм.
Что бы бот получал сообщения из чата, его нужно добавить в этот чат.
Что бы бот слушал сообщения в чате и реагировал на них, необходим bot.message_handler.
А дальше вы настраиваете, что делать с сообщением при получении.
В этом примере бот проверяет, что текст отправленный в чат равен слову Привет. Вы же найдите метод который будет вынимать время из сообщения.
Andrey Barbolin, но все равно вопрос. у меня лежит файл с командами на компе. есть бот в телеграме. как мой бот в телеграме узнает, что ему делать по командам, которые перечислены в файле, когда к нему обращаются?
gossip_boi, тут два варианта.
1. Писать хендлер для каждой команды. Вот пример для команды старт.
@bot.message_handler(commands=['start'])
2. Написать общий хендлер и внутри его с помощью IF парсить текст внутри сообщения.
@bot.message_handler(content_types=['text'])
gossip_boi, Пример моего хендлера на команду callback
@bot.message_handler(commands=["callback"])
def cmd_callback(message):
keyboard = types.InlineKeyboardMarkup()
keyboard.add(*[types.InlineKeyboardButton(text=name, callback_data=name) for name in ['Call','SMS']])
А вот универсальный
@bot.message_handler(content_types=["text"])
def repeat_all_messages(message): # Название функции не играет никакой роли, в принципе
try:
if "Привет" in message.text:
bot.send_message(message.chat.id, message.text)
return
if "Список камер" in message.text:
buildNames = list(cameras_n.ipcam_list.keys())
buildNames.sort()
keyboard = types.InlineKeyboardMarkup()
keyboard.add(*[types.InlineKeyboardButton(text=name, callback_data="build_" + name) for name in buildNames])
bot.send_message(message.chat.id, "Выберите корпус: ", reply_markup=keyboard)
if "/callback" in message.text:
userID = str(message.chat.id)
а это вроде как не хватает либо того либо того. так что вопрос новый: как обойти блокировку? где взять прокси сервер? у меня на телефоне и маке телега работает без всяких приблуд, а вот к боту надо приделать)
gossip_boi, У меня такая же беда. На форумах пишут, что для сильно нагруженных ботов надо переходить на push уведомления. Сейчас ваш скрипт ходит на сервер телеграмма и достает его своими запросами. А при push, скрипт 1 раз регается на телеграмм и указывает куда присылать обновления, но для этого нужен белый IP, https.
Лень было разбираться, у себя сделал так. Иногда падает, но сам поднимается.
#while True:
if __name__ == '__main__':
try:
bot.polling(none_stop=True)
except Exception as err:
logging.error(err)
time.sleep(5)
print ("Internet error!")
Andrey Barbolin, ну по сути вы просто проверяете, что если не возвращается ошибка, то всё выполняется, иначе выводится сообщение об ошибке. а я сейчас не уверен: вдруг дело не в сервере)) вобще странно мне вот что: если на компе телега работает норм, то почему бот не может получить ответ от серверов?)