Всем привет!
У меня имеется код который отправляет данные через телеграм-бота в группу телеграм, используя API-ключ
import OpenOPC
import time
import requests
###################################################
react_temp = int(input("Введите температуру слоя реактора (целое число): "))
r_tmp_lim = int(input("Введите допустимое отклонение температур реактора (+- x градусов, целое число): "))
###################################################
def send_telegram(text: str):
token = "1854430581:AAFupZdsev5kfmwKDLe9OPdwan210gX0p4o"
url = "https://api.telegram.org/bot"
channel_id = "@newOilPlant"
url += token
method = url + "/sendMessage"
r = requests.post(method, data={
"chat_id": channel_id,
"text": text
})
if r.status_code != 200:
raise Exception("post_text error")
###################################################
opc = OpenOPC.client()
servers = opc.servers()
opc.connect("Owen.OPCNet.DA.1")
print("Удачное подключение к " + servers[0])
#--------------------------------------------------------------------------------------------------------#
tagsValue = [];
# Тр-ра Верх
tagsValue.append(opc.list("COM4.TRM_202(adr=104)T_слой_Ср_р-ра.Оперативные параметры")[3])
while True:
print("-----------------------------------------------------------------------------------------")
try:
############################################################
# Проверка температур слоя реактора
val = opc.read(tagsValue, update=1, include_error=True)
if int(val[0][1]) > (react_temp + r_tmp_lim) or int(val[1][1]) > (react_temp + r_tmp_lim) or int(val[2][1]) > (react_temp + r_tmp_lim):
try:
#print("here")
send_telegram("Слой реактора перегрет до {0:.2f} {1:.2f} {2:.2f} С".format(val[0][1], val[1][1], val[2][1]))
except:
print("Включите VPN (test 1)")
if int(val[0][1]) < (react_temp - r_tmp_lim) or int(val[1][1]) < (react_temp - r_tmp_lim) or int(val[2][1]) < (react_temp - r_tmp_lim):
except:
print("error read item")
time.sleep(20)
opc.close()
#---------------------------#
Этот код уже использует бота. Я хотел сделать так, чтобы у бота было меню и при вызове из бота например команды /get_data появлялась кнопка и я мог отправить в диалог пользователя с ботом данные из основного скрипта.
Получается так, что у меня либо работает код с кнопкой, либо основная программа.
import telebot
token = "1203397890:AAF3Z53lbtmCWkXlsxJl4fXRj6Dtcv6TEc0"
bot = telebot.TeleBot(token)
@bot.message_handler(commands=['start'])
def start_message(message):
keyboard = telebot.types.ReplyKeyboardMarkup(True)
bot.send_message(message.chat.id, 'Привет!', reply_markup=keyboard)
@bot.message_handler(commands=['get_data'])
def get_data(message):
markup = telebot.types.InlineKeyboardMarkup()
markup.add(telebot.types.InlineKeyboardButton(text='Получить данные', callback_data=3))
bot.send_message(message.chat.id, text="Что вы хотите сделать?", reply_markup=markup)
@bot.callback_query_handler(func=lambda call: True)
def query_handler(call):
#bot.answer_callback_query(callback_query_id=call.id, text='Спасибо за честный ответ!')
answer = ''
if call.data == '3':
answer = '...Тут будут данные...'
bot.send_message(call.message.chat.id, answer)
bot.polling()
Если я добавляю bot.polling() у меня работает только диалог с ботом, если я убираю bot.polling(), то у меня работает основной код, но не работает бот.
Как решить данную проблему?