通过机器人登录 Telegram WebApp 时,出现错误:Upstream connection error: unable to verify the first certificate
。此外,如果您从浏览器或其他设备发出请求,一切都可以。该网站通过 nginx 提供服务
Kosha Comics
Asked:
2023-10-05 18:48:17 +0800 CST
我需要机器人在 .txt 文件中查找整个单词,而不仅仅是其中的一部分。一个包含我们品牌代表的城市的文件,当用户输入该城市时,一切正常,但如果他只输入“Mos”、“Sa”、“Pe”,机器人也会告诉用户他的城市品牌中有代表。如何修复它?我到处都找不到信息,我已经尝试了几种方法。
СПОСОБ 1
@bot.message_handler()
def is_valid_city(message):
citi = message.text
a = open(r'A:\Python files\cities.txt.txt', encoding='utf-8')
b = a.read()
if citi in b:
bot.send_message(message.chat.id, 'В вашем городе есть представители нашего бренда.')
else:
bot.send_message(message.chat.id, 'К сожалению, не удалось распознать ваше сообщение. Пожалуйста, повторите попытку, используя команду /start')```
СПОСОБ 2
@bot.message_handler()
def search_str(message):
a = message.text
with open(r'A:\Python files\cities.txt.txt', 'r', encoding='utf-8') as file:
content = file.read()
if a in content:
bot.send_message(message.chat.id, 'В вашем городе есть представители нашего бренда.')
else:
bot.send_message(message.chat.id, 'К сожалению, не удалось распознать ваше сообщение. Пожалуйста, повторите попытку, используя команду /start')```
Colorado
Asked:
2023-08-26 03:42:13 +0800 CST
由于我的“误解”,show_summary
下面代码中的函数输出值不正确。以下是 ( ) 中的输出结果show_summary
:
The following is a summary of the information you provided:
Student Name: (Parent) # Здесь по какой-то причине выводится/принимается первое значение (`Parent`) из первой в коде функции `command_start`, вместо `student_name`, следовательно, нарушается и остальная "последовательность".
Date of birth: (full name)
Parent's name: (YYYYY-MM-DD)
Parent's phone number: (full name of (parent))
Thank you for enrolling your child. You will receive further instructions.
括号中的内容是我在 Telegram 机器人中测试时手动输入的(用于演示目的)
消息/
show_summary
应该是这样的:
Here is the summary of the information you provided:
Student Name: (Student Name) # И так оно и должно быть по идеи.
Date of Birth: (Date of Birth)
Parent Name: (Parent Name)
Parent Phone: (Parent Phone)
Thank you for enrolling your child. You will receive further instructions.
这是完整的代码:
class Form(StatesGroup):
select = State()
student_name = State()
student_dob = State()
parent_name = State()
parent_phone = State()
finish = State()
@router.message(CommandStart())
async def command_start(message: Message, state: FSMContext) -> None:
await state.set_state(Form.select)
await message.answer(
"Welcome! We are happy to welcome you to our bot. "
"By continuing, you automatically agree to the terms of use and privacy policy. "
"Are you a parent or a student?",
reply_markup=ReplyKeyboardMarkup(
keyboard=[
[
KeyboardButton(text="Parent"),
KeyboardButton(text="Student")
]
],
resize_keyboard=True,
),
)
@router.message(Form.select, F.text.casefold() == "student")
async def student(message: Message, state: FSMContext) -> None:
await state.clear()
await message.answer(
"Not bad not terrible.\nSee you soon.",
reply_markup=ReplyKeyboardRemove(),
)
@router.message(Form.select, F.text.casefold() == "parent")
async def student_name(message: Message, state: FSMContext) -> None:
await state.update_data(student_name=message.text)
await state.set_state(Form.student_dob)
await message.reply(
"Great! To enroll your child, please enter the student's full name:",
reply_markup=ReplyKeyboardRemove(),
)
@router.message(Form.student_dob)
async def student_dob(message: Message, state: FSMContext) -> None:
await state.update_data(student_dob=message.text)
await state.set_state(Form.parent_name)
await message.reply(
"Thank you! Please enter the student's date of birth (YYYYY-MM-DD).",
reply_markup=ReplyKeyboardRemove(),
)
@router.message(Form.parent_name)
async def parent_name(message: Message, state: FSMContext) -> None:
await state.update_data(parent_name=message.text)
await state.set_state(Form.parent_phone)
await message.reply(
"Please enter your full name (parent):",
reply_markup=ReplyKeyboardRemove(),
)
@router.message(Form.parent_phone)
async def parent_phone(message: Message, state:FSMContext) -> None:
await state.update_data(parent_phone=message.text)
await state.set_state(Form.finish)
await message.reply(
"Last step - enter your phone number (parent).",
reply_markup=ReplyKeyboardRemove(),
)
@router.message(Form.finish)
async def process_register(message: Message, state: FSMContext) -> None:
data = await state.get_data()
await state.clear()
await message.answer(
"Congratulations! You have successfully enrolled your child.",
reply_markup=ReplyKeyboardRemove(),
)
await show_summary(message=message, data=data)
async def show_summary(message: Message, data: Dict[str, Any], positive: bool = True) -> None:
student_name = data.get("student_name", "Unknown")
student_dob = data.get("student_dob", "Unknown")
parent_name = data.get("parent_name", "Unknown")
parent_phone = data.get("parent_phone", "Unknown")
summary_text = "Here is the summary of the information you provided:\n"
summary_text += f"Student Name: {student_name}\n"
summary_text += f"Date of Birth: {student_dob}\n"
summary_text += f"Parent Name: {parent_name}\n"
summary_text += f"Parent Phone: {parent_phone}\n"
if positive:
summary_text += "Thank you for enrolling your child. You will receive further instructions."
else:
summary_text += "We're sorry to hear that you encountered issues during the registration process."
await message.answer(text=summary_text, reply_markup=ReplyKeyboardRemove())
sxtrfly
Asked:
2022-08-20 01:08:15 +0800 CST
大家好。我想请你帮忙解释一下我的想法。我需要从传入的消息中提取一个数字,如果该数字 > 50,答案就是这个。如果数字 < 50,则答案不同。
示例:机器人:数量:76
我:销售
机器人:数量:11
我:购买
问题:如何以编程方式获取此数字并将其与另一个数字进行比较?
我在代码中的尝试:
@client.on(events.NewMessage)
async def handler(event):
text = event.text.split()
if text[0] in event.raw_text == "Количество: ":
if x >= 31:
await event.respond('Продать')
if x <= 31:
await event.respond('Купить')
p.s. 我不擅长编程
提前感谢任何可以帮助/解释的人。