@Daiva7

Как правильно склеить 2 кода для Telegram бота?

Всем привет!
Подскажите, пожалуйста, как можно решить вопрос объединения двух кодов в один, последовательный.
Идея в следующем: В бот отправляют qr-code, бот возвращает значение и пересылает его на основании полученного значения.
Вот первая часть:
import telebot
#Код для пересылки по значениям
bot = telebot.TeleBot('********')

my_id = int('-*********') #chat AS
chat_id = int('-************') #chat BS

@bot.message_handler(commands=['start'])
def start(message):
    print(message)


@bot.message_handler(regexp="AS", content_types=['text'])
def repeat_all_messages(message):
    bot.forward_message(my_id, message.chat.id, message.id)

@bot.message_handler(regexp="BS", content_types=['text'])
def repeat_all_messages(message):
    bot.forward_message(chat_id, message.chat.id, message.id)

bot.polling(none_stop=True)


и Еще один, на обработку QR:
from telegram import Update, InlineKeyboardMarkup, InlineKeyboardButton
from telegram.ext import Updater, Filters, MessageHandler, CallbackContext

# QR Code
from pyzbar.pyzbar import decode

# System libraries
import os
from os import listdir
from os.path import isfile, join

from io import BytesIO
from PIL import Image
import telebot #for resend

TOKEN = "******"

def decode_qr(update: Update, context: CallbackContext):
	chat_id = update.message.chat_id

	if update.message.photo:
		id_img = update.message.photo[-1].file_id
	else:
		return

	foto = context.bot.getFile(id_img)

	new_file = context.bot.get_file(foto.file_id)
	new_file.download('qrcode.png')

	try:
		result = decode(Image.open('qrcode.png'))
		context.bot.sendMessage(chat_id=chat_id, text=result[0].data.decode("utf-8"))
		os.remove("qrcode.png")
	except Exception as e:
		return
def main():
	updater = Updater(TOKEN, request_kwargs={'read_timeout': 20, 'connect_timeout': 20}, use_context=True)
	dp = updater.dispatcher

	dp.add_handler(MessageHandler(Filters.photo, decode_qr))

	updater.start_polling()
	updater.idle()

if __name__ == '__main__':
    bot.polling(none_stop = True)

Заранее спасибо за помощь :)
  • Вопрос задан
  • 267 просмотров
Решения вопроса 1
@Yunix
import telebot
import os

from telegram import Update, InlineKeyboardMarkup, InlineKeyboardButton
from telegram.ext import Updater, Filters, MessageHandler, CallbackContext
from pyzbar.pyzbar import decode
from os import listdir
from os.path import isfile, join
from io import BytesIO
from PIL import Image

#Код для пересылки по значениям
bot = telebot.TeleBot('********')

my_id = int('-*********') #chat AS
chat_id = int('-************') #chat BS

@bot.message_handler(commands=['start'])
def start(message):
    print(message)

@bot.message_handler(regexp="AS", content_types=['text'])
def repeat_all_messages(message):
    bot.forward_message(my_id, message.chat.id, message.id)

def decode_qr(update: Update, context: CallbackContext):
  chat_id = update.message.chat_id

  if update.message.photo:
    id_img = update.message.photo[-1].file_id
  else:
    return

  foto = context.bot.getFile(id_img)

  new_file = context.bot.get_file(foto.file_id)
  new_file.download('qrcode.png')

  try:
    result = decode(Image.open('qrcode.png'))
    context.bot.sendMessage(chat_id=chat_id, text=result[0].data.decode("utf-8"))
    os.remove("qrcode.png")
  except Exception as e:
    return
def main():
  updater = Updater(TOKEN, request_kwargs={'read_timeout': 20, 'connect_timeout': 20}, use_context=True)
  dp = updater.dispatcher

  dp.add_handler(MessageHandler(Filters.photo, decode_qr))

  updater.start_polling()
  updater.idle()


@bot.message_handler(regexp="BS", content_types=['text'])
def repeat_all_messages(message):
    bot.forward_message(chat_id, message.chat.id, message.id)

bot.polling(none_stop=True)

Если не запустится, то def main перемести в BS
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы