Задать вопрос
nero211
@nero211

Почему может не отрабатывать телеграмм бот в business mode при входящем сообщении в личных сообщениях?

Есть бот для телеги на aiogram3 (вдруг библиотека важна). На боте включен бизнес режим. То есть входящие сообщения от сторонних пользователей должны запускать бота на выполнение. Бот должен получить id пользователя входящего сообщения, проверить, были ли записи с таким id и в зависимости от этого и основной логики бизнес слоя вывести тот или иной текст. Но: в логах пусто (ничего кроме пуллинг ок) , в базе пусто (SQLite на локальной машине, прав хватает), в телеге отображается «этим чатом управляет бот». / то есть бизнес режим включен. Какие зависимости еще не включены? При явном обращении к боту все работает корректно.

import sqlite3
from datetime import datetime
from aiogram import Bot, Dispatcher, types
from aiogram.filters import Command
from aiogram.types import Message
import asyncio

BOT_TOKEN = "BOT_TOKEN"

# Инициализация бота и диспетчера
bot = Bot(token=BOT_TOKEN)
dp = Dispatcher()

# Подключение к базе данных и создание таблицы
def init_db():
    with sqlite3.connect('users.db') as conn:
        cursor = conn.cursor()
        cursor.execute('''CREATE TABLE IF NOT EXISTS users (
                          user_id INTEGER PRIMARY KEY,
                          username TEXT,
                          created_at TEXT)''')
        conn.commit()

# Проверка существования пользователя в базе
def user_exists(user_id: int) -> bool:
    with sqlite3.connect('users.db') as conn:
        cursor = conn.cursor()
        cursor.execute("SELECT 1 FROM users WHERE user_id = ?", (user_id,))
        return cursor.fetchone() is not None

# Добавление нового пользователя
def add_user(user_id: int, username: str):
    with sqlite3.connect('users.db') as conn:
        cursor = conn.cursor()
        created_at = datetime.now().strftime('%Y-%m-%d %H:%M:%S')
        cursor.execute("INSERT INTO users (user_id, username, created_at) VALUES (?, ?, ?)",
                      (user_id, username, created_at))
        conn.commit()

# Обработчик всех входящих сообщений
@dp.message()
async def handle_message(message: Message):
    user = message.from_user
    if not user:
        return
    
    # Проверяем и добавляем пользователя при необходимости
    if not user_exists(user.id):
        add_user(user.id, user.full_name)
        await message.answer("✅ Вы были успешно зарегистрированы!")
 

# Запуск бота
async def main():
    init_db()  # Инициализация базы данных при старте
    await dp.start_polling(bot)

if __name__ == "__main__":
    asyncio.run(main())
  • Вопрос задан
  • 48 просмотров
Подписаться 1 Средний Комментировать
Пригласить эксперта
Ответы на вопрос 1
nero211
@nero211 Автор вопроса
решение нашлось на SO
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы