我是皮顿的新手。我收到了电报机器人的手杖。如果我只发送文件,一切正常,但是当我开始输入数据并生成pdf文件时,在bot中发送文件之后,我的代码就会出现错误:
2022-10-17 12:19:54,164 (__init__.py:878 MainThread) ERROR - TeleBot: "Infinity polling exception: 'NoneType' object is not callable"
ERROR:TeleBot:Infinity polling exception: 'NoneType' object is not callable
2022-10-17 12:19:54,167 (__init__.py:880 MainThread) ERROR - TeleBot: "Exception traceback:
Traceback (most recent call last):
File "/usr/local/lib/python3.7/dist-packages/telebot/__init__.py", line 875, in infinity_polling
logger_level=logger_level, allowed_updates=allowed_updates, *args, **kwargs)
File "/usr/local/lib/python3.7/dist-packages/telebot/__init__.py", line 947, in polling
logger_level=logger_level, allowed_updates=allowed_updates)
File "/usr/local/lib/python3.7/dist-packages/telebot/__init__.py", line 1021, in __threaded_polling
raise e
File "/usr/local/lib/python3.7/dist-packages/telebot/__init__.py", line 977, in __threaded_polling
self.worker_pool.raise_exceptions()
File "/usr/local/lib/python3.7/dist-packages/telebot/util.py", line 154, in raise_exceptions
raise self.exception_info
File "/usr/local/lib/python3.7/dist-packages/telebot/util.py", line 98, in run
task(*args, **kwargs)
TypeError: 'NoneType' object is not callable
"
ERROR:TeleBot:Exception traceback:
Traceback (most recent call last):
File "/usr/local/lib/python3.7/dist-packages/telebot/__init__.py", line 875, in infinity_polling
logger_level=logger_level, allowed_updates=allowed_updates, *args, **kwargs)
File "/usr/local/lib/python3.7/dist-packages/telebot/__init__.py", line 947, in polling
logger_level=logger_level, allowed_updates=allowed_updates)
File "/usr/local/lib/python3.7/dist-packages/telebot/__init__.py", line 1021, in __threaded_polling
raise e
File "/usr/local/lib/python3.7/dist-packages/telebot/__init__.py", line 977, in __threaded_polling
self.worker_pool.raise_exceptions()
File "/usr/local/lib/python3.7/dist-packages/telebot/util.py", line 154, in raise_exceptions
raise self.exception_info
File "/usr/local/lib/python3.7/dist-packages/telebot/util.py", line 98, in run
task(*args, **kwargs)
TypeError: 'NoneType' object is not callableimport telebot
from telebot.types import InlineKeyboardMarkup, InlineKeyboardButton
from PyPDF2 import PdfFileWriter, PdfFileReader
import io
import os
from reportlab.pdfgen import canvas
from reportlab.lib.pagesizes import letter
from reportlab.pdfbase import pdfmetrics
from reportlab.pdfbase.ttfonts import TTFont
from datetime import date
import email, smtplib, ssl
from email import encoders
from email.mime.base import MIMEBase
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
TELEGRAM_TOKEN = 'bot token'
bot = telebot.TeleBot(TELEGRAM_TOKEN)
current_date = date.today()
print(current_date)
@bot.message_handler(commands=["start"])
def start(m, res=False):
bot.send_message(m.chat.id, 'Я на связи. Как тебя зовут? )')
@bot.message_handler(content_types=['text'])
def get_name(message):
bot.send_message(message.from_user.id, "Введи серию и номер паспорта?");
global name
name = message.text
print(name)
bot.register_next_step_handler(message, get_passport_serial);
def get_passport_serial(message):
bot.send_message(message.from_user.id, "Введи кем и когда выдан паспорт");
global number
number = message.text
print(name)
print(number)
bot.register_next_step_handler(message, get_passport_info);
def get_passport_info(message):
bot.send_message(message.from_user.id, "Введи адрес регистрации");
global info
info = message.text
print(name, number, info)
bot.register_next_step_handler(message, get_passport_adress);
def get_passport_adress(message):
bot.send_message(message.from_user.id, "Жди");
global adress
adress = message.text
print(name, number, info, adress)
bot.register_next_step_handler(message, send_PDF(message, name, number, info, adress));
def send_PDF(message, name, number, info, adress):
checkSend = False
print("отправлено")
while checkSend == False:
try:
f = open("original" + str(message.from_user.id) + ".pdf","rb")
bot.send_document(message.chat.id,f)
checkSend = True
if os.path.isfile("original" + str(message.from_user.id) + ".pdf"):
os.remove("original" + str(message.from_user.id) + ".pdf")
print("success")
else: print("File doesn't exists!")
except FileNotFoundError:
print('write')
pdfmetrics.registerFont(TTFont('DejaVuSerif','DejaVuSerif.ttf', 'UTF-8'))
packet = io.BytesIO()
can = canvas.Canvas(packet, pagesize=letter)
can.setFont('DejaVuSerif', 10)
can.drawString(150, 785, name)
can.drawString(130, 755, number)
can.drawString(250, 755, info)
can.drawString(210, 727, adress)
can.drawString(130, 200, str(current_date))
can.save()
#move to the beginning of the StringIO buffer
packet.seek(0)
# create a new PDF with Reportlab
new_pdf = PdfFileReader(packet)
# read your existing PDF
existing_pdf = PdfFileReader(open("destination.pdf", "rb"))
output = PdfFileWriter()
# add the "watermark" (which is the new pdf) on the existing page
page = existing_pdf.getPage(0)
page.mergePage(new_pdf.getPage(0))
output.addPage(page)
# finally, write "output" to a real file
outputStream = open("original" + str(message.from_user.id) + ".pdf", "wb")
output.write(outputStream)
outputStream.close()
@bot.message_handler(content_types=['document'])
def sender_email(message):
print("file accepted")
bot.infinity_polling()发布于 2022-10-25 12:08:55
这样啊,原来是这么回事。如果有人感兴趣的问题是在bot.register_next_step_handler。如果函数是这样的,它就不能提供参数,而不是这样:
bot.register_next_step_handler(message, send_PDF(message, name, number, info, adress))我做了这个:
send_PDF(message, name, number, info, adress)现在一切都很好。谢谢我自己)
https://stackoverflow.com/questions/74097264
复制相似问题