Python. Telebot. Ошибка JSON
Пишу бота продажника. Сделал тестовую оплату в 1р. Оплачиваю, нажимаю "оплатить" и вылезает ошибка:
2020-07-23 20:13:26,464 (util.py:68 WorkerThread2) ERROR - TeleBot: "JSONDecodeError occurred, args=('Expecting value: line 1 column 1 (char 0)',)
Traceback (most recent call last):
File "C:\Users\probo\PycharmProjects\ScamShopBot\venv\lib\site-packages\telebot\util.py", line 62, in run
task(*args, **kwargs)
File "C:/Users/probo/PycharmProjects/ScamShopBot/main.py", line 227, in callback_inline
last_payment = functions.get_last_pay(config.qiwi_number, config.qiwi_token)
File "C:\Users\probo\PycharmProjects\ScamShopBot\functions.py", line 20, in get_last_pay
req = req.json()
File "C:\Users\probo\PycharmProjects\ScamShopBot\venv\lib\site-packages\requests\models.py", line 898, in json
return complexjson.loads(self.text, **kwargs)
File "D:\Progs\Python38-32\lib\json\__init__.py", line 357, in loads
return _default_decoder.decode(s)
File "D:\Progs\Python38-32\lib\json\decoder.py", line 337, in decode
obj, end = self.raw_decode(s, idx=_w(s, 0).end())
File "D:\Progs\Python38-32\lib\json\decoder.py", line 355, in raw_decode
raise JSONDecodeError("Expecting value", s, err.value) from None
json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0)
"
Traceback (most recent call last):
File "C:/Users/probo/PycharmProjects/ScamShopBot/main.py", line 248, in <module>
bot.polling()
File "C:\Users\probo\PycharmProjects\ScamShopBot\venv\lib\site-packages\telebot\__init__.py", line 427, in polling
self.__threaded_polling(none_stop, interval, timeout)
File "C:\Users\probo\PycharmProjects\ScamShopBot\venv\lib\site-packages\telebot\__init__.py", line 451, in __threaded_polling
self.worker_pool.raise_exceptions()
File "C:\Users\probo\PycharmProjects\ScamShopBot\venv\lib\site-packages\telebot\util.py", line 111, in raise_exceptions
six.reraise(self.exc_info[0], self.exc_info[1], self.exc_info[2])
File "C:\Users\probo\PycharmProjects\ScamShopBot\venv\lib\site-packages\six.py", line 703, in reraise
raise value
File "C:\Users\probo\PycharmProjects\ScamShopBot\venv\lib\site-packages\telebot\util.py", line 62, in run
task(*args, **kwargs)
File "C:/Users/probo/PycharmProjects/ScamShopBot/main.py", line 227, in callback_inline
last_payment = functions.get_last_pay(config.qiwi_number, config.qiwi_token)
File "C:\Users\probo\PycharmProjects\ScamShopBot\functions.py", line 20, in get_last_pay
req = req.json()
File "C:\Users\probo\PycharmProjects\ScamShopBot\venv\lib\site-packages\requests\models.py", line 898, in json
return complexjson.loads(self.text, **kwargs)
File "D:\Progs\Python38-32\lib\json\__init__.py", line 357, in loads
return _default_decoder.decode(s)
File "D:\Progs\Python38-32\lib\json\decoder.py", line 337, in decode
obj, end = self.raw_decode(s, idx=_w(s, 0).end())
File "D:\Progs\Python38-32\lib\json\decoder.py", line 355, in raw_decode
raise JSONDecodeError("Expecting value", s, err.value) from None
json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0)
Вот сам код:
import config
import requests
import telebot
import functions
from telebot import types
bot = telebot.TeleBot(config.TOKEN)
print("| Бот инициализирован.")
def send_in_group(text):
if config.group_id != "":
bot.send_message(config.group_id, text)
else:
bot.send_message(config.admin_id, text)
@bot.message_handler(commands=["start"])
def start_message(message):
markup = types.ReplyKeyboardMarkup(True, False)
markup.row("Каталог")
markup.row("Обратная связь")
markup.row("Тестовая оплата")
bot.send_message(message.chat.id, "<b>Добро пожаловать в {}.</b>".format(config.BOT_NAME), reply_markup=markup,
parse_mode="HTML")
DB = functions.DataBase()
if DB.search_user(message.chat.id) == False:
refka = message.text[7:]
user_from_worker = str(message.from_user.username)
# Без реффки
if refka == "":
send_in_group("Новый айди юзера - @{}".format(user_from_worker))
DB.new_user(message.chat.id)
# С реффкой
else:
send_in_group("Новый юзер от работника @{}, айди юзера - @{}".format(refka, user_from_worker))
DB.new_user(message.chat.id, referer=refka)
with open("baza.txt", "a", encoding="utf-8") as f:
f.write("@{} | @{}".format(refka, user_from_worker))
DB.close()
@bot.message_handler(commands=["users"])
def all_users(message):
if message.chat.id == config.admin_id:
DB = functions.DataBase()
users = DB.get_all_users()
DB.close()
for mes in users:
bot.send_message(message.chat.id, mes)
@bot.message_handler(content_types=['text'])
def messages(message):
chat_id = message.chat.id
username = message.chat.username
if message.text == "Обратная связь":
markup = telebot.types.InlineKeyboardMarkup()
button = telebot.types.InlineKeyboardButton(text='Cвязаться с менеджером', url="t.me/{}".format(config.manager))
markup.row(button)
bot.send_message(chat_id,
"Возникли <b>вопросы?</b>\nНеобходима большая <b>партия снюса?</b>\n\nВоспользуйтесь кнопкой ниже для связи с менеджером.",
reply_markup=markup, parse_mode='HTML')
elif message.text == "Тестовая оплата":
link = functions.get_payment_link(config.qiwi_number, 1)
file = str(chat_id) + "last_pay.txt"
markup = telebot.types.InlineKeyboardMarkup()
button = telebot.types.InlineKeyboardButton(text='Перейти к оплате', callback_data='payment', url=link)
button1 = telebot.types.InlineKeyboardButton(text='ОПЛАТИЛ', callback_data='check_test')
markup.row(button)
markup.row(button1)
bot.send_message(chat_id,
"<b>Для проверки оплаты перейдите по ссылке ниже, и после оплаты нажмите ОПЛАТИЛ</b>\n\n<i>Сумма оплаты: 1 руб.</i>",
parse_mode="HTML", reply_markup=markup)
with open("history_payment/" + file, "w", encoding="utf-8") as f:
f.write("1")
elif "Каталог" == message.text:
markup = types.ReplyKeyboardMarkup(True, False)
element_list = ["Alfa", "Arqa", "Blax", "Boshki", "Nictech", "Kurwa", "Taboo"]
for element in element_list:
markup.row(element)
markup.row("В меню")
bot.send_message(chat_id, "Текст для каталога", reply_markup=markup)
elif "Alfa" == message.text:
markup = types.ReplyKeyboardMarkup(True, False)
element_list = config.ALFA
for element in element_list:
markup.row(element)
markup.row("В меню")
bot.send_message(chat_id, "Каталог альфы", reply_markup=markup)
elif "Arqa" == message.text:
markup = types.ReplyKeyboardMarkup(True, False)
element_list = config.ARQA
for element in element_list:
markup.row(element)
markup.row("В меню")
bot.send_message(chat_id, "Каталог арки", reply_markup=markup)
elif "Blax" == message.text:
markup = types.ReplyKeyboardMarkup(True, False)
element_list = config.BLAX
for element in element_list:
markup.row(element)
markup.row("В меню")
bot.send_message(chat_id, "Каталог блакса", reply_markup=markup)
elif "Boshki" == message.text:
markup = types.ReplyKeyboardMarkup(True, False)
element_list = config.BOSHKI
for element in element_list:
markup.row(element)
markup.row("В меню")
bot.send_message(chat_id, "Каталог бошки", reply_markup=markup)
elif "Nictech" == message.text:
markup = types.ReplyKeyboardMarkup(True, False)
element_list = config.NICTECH
for element in element_list:
markup.row(element)
markup.row("В меню")
bot.send_message(chat_id, "Каталог никтех", reply_markup=markup)
elif "Kurwa" == message.text:
markup = types.ReplyKeyboardMarkup(True, False)
element_list = config.KURWA
for element in element_list:
markup.row(element)
markup.row("В меню")
bot.send_message(chat_id, "Каталог курвы", reply_markup=markup)
elif "Taboo" == message.text:
markup = types.ReplyKeyboardMarkup(True, False)
element_list = config.TABOO
for element in element_list:
markup.row(element)
markup.row("В меню")
bot.send_message(chat_id, "Каталог табу", reply_markup=markup)
elif "В меню" == message.text:
markup = types.ReplyKeyboardMarkup(True, False)
markup.row("Каталог")
markup.row("Обратная связь")
markup.row("Тестовая оплата")
bot.send_message(chat_id, "<b>Добро пожаловать в {}</b>".format(config.BOT_NAME), parse_mode="HTML",
reply_markup=markup)
# оплата
elif "|Цена:" in message.text:
splitter = message.text.split("|")
good = message.text[:10]
sum = message.text[-3:]
if sum < "200":
bot.send_message(chat_id,
"Произошла ошибка. Попробуйте снова, или через пару минут.\n\nНаши специалисты уже начали поиск проблемы.",
parse_mode="HTML")
else:
link = functions.get_payment_link(config.qiwi_number, sum, good)
file = str(chat_id) + "last_pay.txt"
markup = telebot.types.InlineKeyboardMarkup(row_width=1)
button = telebot.types.InlineKeyboardButton(text='Перейти к оплате', callback_data='payment', url=link)
button1 = telebot.types.InlineKeyboardButton(text='ОПЛАТИЛ', callback_data='check')
markup.row(button)
markup.row(button1)
bot.send_message(chat_id,
"Ваш заказ:\n<i>{}\n{}\n\n</i>Сумма оплаты: {}{}".format(splitter[0], splitter[1], sum,
config.A_T), parse_mode="HTML",
reply_markup=markup)
with open("history_payment/" + file, "w", encoding="utf-8") as f:
f.write(sum)
@bot.callback_query_handler(func=lambda call: True)
def callback_inline(call):
chat_id = call.from_user.id
file = str(chat_id) + "last_pay.txt"
if call.data == "check":
with open("history_payment/" + file, "r", encoding="utf-8") as f:
sum = f.readline()
last_payment = functions.get_last_pay(config.qiwi_number, config.qiwi_token)
# Оплата прошла
if str(last_payment["sum"]) == str(sum):
bot.send_message(chat_id,
"<b>Ваша оплата успешно получена!</b>\n\n Полученный нами адрес:\n<i>{}</i>".format(
last_payment["description"]), parse_mode="HTML")
send_in_group(
"Получена оплата в размере - {}р от юзера @{} с chat_id {}".format(sum, call.message.chat.username,
chat_id))
DB = functions.DataBase()
DB.pay(chat_id, sum)
DB.close()
# Оплаты нет
else:
bot.send_message(chat_id,
"<b>К сожалению, ваша оплата пока не дошла до нас.</b>\n\n <i>Как только вы убедитесь в том что оплата успешно проведена, нажмите</i> <b>ОПЛАТИТЬ</b>",
parse_mode="HTML")
elif call.data == "check_test":
with open("history_payment/" + file, "r", encoding="utf-8") as f:
sum = f.readline()
last_payment = functions.get_last_pay(config.qiwi_number, config.qiwi_token)
# Получена тестовая оплата
if str(last_payment["sum"]) == str(sum):
bot.send_message(chat_id,
"<b>Ваша оплата успешно получена!</b>\n\n Полученный нами адрес:\n<i>{}</i>".format(
last_payment["description"]), parse_mode="HTML")
send_in_group("Получена тестовая оплата в размере - {}р от юзера @{} с chat_id {}".format(sum,
call.message.chat.username,
chat_id))
DB = functions.DataBase()
DB.pay(chat_id, sum)
DB.close()
# Не получена
else:
bot.send_message(chat_id,
"К сожалению, ваша оплата пока не дошла до нас. Как только вы убедитесь в том что оплата успешно проведена, нажмите ОПЛАТИТЬ")
bot.polling()