Ошибка Telegram-бота: «403: Forbidden: bots can’t send message to bots»
При попытке пополнения баланса через бота выбивает ошибку 403 Forbidden: bots can't send messages to bots.
@bot.message_handler(commands=["dep"])
def dep(mess):
id=mess.from_user.id
sum,name,log=checkReg(mess)
if log:
clava=types.InlineKeyboardMarkup()
crypt=types.InlineKeyboardButton("Криптовалюта",callback_data="crypt")
rubles=types.InlineKeyboardButton("Рубли",callback_data="rub")
clava.add(crypt,rubles)
bot.send_message(id,"Выберите способ пополнения",reply_markup=clava)
@bot.callback_query_handler(func=lambda call:True)
def opl(des):
if des.data=="crypt":
clava1=types.InlineKeyboardMarkup()
ton=types.InlineKeyboardButton("TON",callback_data="TON")
usdt=types.InlineKeyboardButton("USDT",callback_data="usdt")
clava1.add(ton,usdt)
bot.send_message(des.from_user.id,"Выберите валюту(сеть-TON)",reply_markup=clava1)
@bot.callback_query_handler(func=lambda call:True)
def oplCr(crypt1):
id=crypt1.from_user.id
if crypt1.data=="TON":
bot.send_message(id,"Введите сумму, на которую хотите пополнить(1 TON=480):")
bot.register_next_step_handler(crypt1.message,ton1)
else:
bot.send_message(id,"Введите сумму, на которую хотите пополнить(1 USDT=180):")
bot.register_next_step_handler(crypt1.message,usdt1)
def ton1(mess):
with open('fDeps.txt','a+t') as fDep:
sum1,name,log=checkReg(mess)
id=mess.from_user.id
sum=int(mess.text)
bot.send_message(id,f"UQCxvHZCH6PFCfUF5wQ0CP45eH0qYt9r7MdVqRtmzSdYjmw8\nВы должны перевести{sum/480}TON на указанный адрес\nВ комментарии укажите свое имя\nПосле этого отправьте @dictatorgroup10 скриншот перевода и свое имя в боте")
fDep.write(name+" "+str(sum)+" "+str(sum/480)+" "+"TON")
def usdt1(mess):
with open('fDeps.txt','a+t') as fDep:
sum1,name,log=checkReg(mess)
id=mess.from_user.id
sum=int(mess.text)
bot.send_message(id,f"UQCxvHZCH6PFCfUF5wQ0CP45eH0qYt9r7MdVqRtmzSdYjmw8\nВы должны перевести{sum/180}USDT на указанный адрес\В комментарии укажите свое имя\nПосле этого отправьте @dictatorgroup10 скриншот перевода и свое имя в боте")
fDep.write(name+" "+str(sum)+" "+str(sum/180)+" "+"USDT"+"\n")
else:
with open('fDeps.txt','a+t') as fDep:
sum1,name1,log1=checkReg(des.message)
bot.send_message(des.from_user.id,"Введите сумму, на которую хотите пополнить баланс")
bot.register_next_step_handler(des.message,rub)
def rub(mess):
sum=int(mess.text)
bot.send_message(des.from_user.id,f"https://vtb.paymo.ru/collect-money/qr/?transaction=1b01d439-c410-421d-a74c-9b8cf4067fff\nСовершите перевод на сумму{sum/2}\nВ сообщении получателю укажите имя в боте, иначе средства не поступят")
fDep.write(name+" "+str(sum)+" "+str(sum/2)+"RUB"+"\n")
Вопрос:
Почему возникает ошибка 403, и как правильно отправить пользователю сообщение?
Ответы (1 шт):
«403: Forbidden: bots can’t send message to bots»
Ваш бот пытается отправить сообщение другому боту. Это невозможно, боты могут отправлять сообщения только пользователям.
bot.send_message(call.message.from_user.id, "Валюта...")
Меняем на:
bot.send_message(call.message.chat.id, "Валюта...")
Используйте chat.id, а не from_user.id.
chat.id будет == id пользователя с которым работает бот если общение идёт напрямую, или будет == id группы.
А вот from_user.id может содержать ID другого бота. Так как from_user.id — это ID отправитель сообщения. Если отправитель сообщения бот, то попытка отправки ему сообщения приведёт к ошибке 403.
В общем, безопаснее отправлять сообщения в чат из которого он был отправлен или проверять не бот ли это пишет?♀️
Проверить отправителя можно через from_user.is_bot - если отправитель бот, как вариант, такие сообщения можно игнорировать:
if call.message.from_user.is_bot:
print("Игнорируем сообщение от бота")
return