Ошибка `TypeError: 'NoneType' object is not subscriptable` возникает, когда вы пытаетесь выполнить доступ к элементу, используя квадратные скобки (например, `subs[0]`), но объект, к которому вы пытаетесь обратиться, имеет значение `None`. В вашем случае это происходит из-за того, что запрос к базе данных `SELECT subs_chanel FROM users_quests WHERE user_id = ?` не возвращает ни одной строки, и результатом работы `cursor.fetchone()` является `None`.
Чтобы исправить эту ошибку, вам нужно проверить, что результат не является `None`, прежде чем пытаться обращаться к его элементам. Вот модифицированный фрагмент вашего кода с необходимыми проверками:
```python
user_id = callback.message.from_user.id
cursor.execute("SELECT subs_chanel FROM users_quests WHERE user_id = ?", (user_id,))
subs = cursor.fetchone()
# Проверяем, что subs не равно None
if subs is None:
await bot.send_message(callback.message.chat.id, 'Ошибка. Пожалуйста, напишите администрации.')
else:
count_subs = subs[0]
if count_subs == 'NO':
if callback.message.chat.type == 'private':
user_id = callback.from_user.id
if await check_sub_channels(cfg.CHANNELS, callback.message.from_user.id):
cursor.execute("UPDATE users SET earns = earns + 4 WHERE user_id = ?", (user_id,))
cursor.execute("UPDATE users_quests SET subs_chanel = subs_chanel + 1 WHERE user_id = ?", (user_id,))
await bot.edit_message_caption(
chat_id=callback.message.chat.id,
message_id=callback.message.message_id,
caption=f'Здравствуй! {callback.from_user.first_name}\n\nСпасибо за вашу поддержку!\nВам было начислено 4 звезды.',
reply_markup=backing)
else:
await bot.edit_message_caption(
chat_id=callback.message.chat.id,
message_id=callback.message.message_id,
caption=f"Здравствуй! {callback.from_user.first_name}\n\nВы не подписались на все каналы.",
reply_markup=subing_channels)
elif count_subs == 'YES':
await bot.edit_message_caption(
chat_id=callback.message.chat.id,
message_id=callback.message.message_id,
caption=f"Здравствуй! {callback.from_user.first_name}\n\nВы уже выполнили данное задание.",
reply_markup=backing)
elif count_subs == 'NONE':
await bot.send_message(callback.message.chat.id, 'Ошибка.\n\nСообщите администрации.')
```
В этом изменённом коде перед обращением к элементам `subs` сначала проверяется, есть ли данные в выборке (`if subs is None`). Таким образом, вы избежите ошибки, когда `subs` равно `None`.