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

Не могу победить ошибку при запуске бота?

Делаю бота на aiogram 3. 3 при запуске висит ошибка в консоли, VS ошибок не видит. Уже кучу методов перепробовал.
Ошибка из консоли
Traceback (most recent call last):
  File "C:\Users\user1\Desktop\prizma_bot\app.py", line 21, in <module>
    keyboard = ReplyKeyboardMarkup(resize_keyboard=True).add(contact_admin_button)
  File "C:\Users\user1\AppData\Local\Programs\Python\Python39\lib\site-packages\pydantic\main.py", line 164, in __init__
    __pydantic_self__.__pydantic_validator__.validate_python(data, self_instance=__pydantic_self__)
pydantic_core._pydantic_core.ValidationError: 1 validation error for ReplyKeyboardMarkup
keyboard
  Field required [type=missing, input_value={'resize_keyboard': True}, input_type=dict]
    For further information visit https://errors.pydantic.dev/2.5/v/missing
Для продолжения нажмите любую клавишу . . .


import logging
from typing import Text
from aiogram.filters import Command
import aiosqlite
from aiogram import Bot, Dispatcher, types
from aiogram.types import ReplyKeyboardRemove, \
    ReplyKeyboardMarkup, KeyboardButton, \
    InlineKeyboardMarkup, InlineKeyboardButton

API_TOKEN = ''
ADMIN_ID = ''  # ID администратора

logging.basicConfig(level=logging.INFO)

bot = Bot(token=API_TOKEN)

dp = Dispatcher()

# кнопкоа "Связаться с администратором"
contact_admin_button = KeyboardButton(text='Связаться с администратором')
keyboard = ReplyKeyboardMarkup(resize_keyboard=True).add(contact_admin_button)

# Кнопка-ссылка на сайт
inline_button = InlineKeyboardButton(text="Перейти на сайт", url="https://example.com")
inline_keyboard = InlineKeyboardMarkup().add(inline_button)

# подключение к базе данных и таблицу для сообщений
async def init_db():
    async with aiosqlite.connect('bot_messages.db') as db:
        await db.execute('''
            CREATE TABLE IF NOT EXISTS messages (
                id INTEGER PRIMARY KEY AUTOINCREMENT,
                user_id INTEGER,
                user_name TEXT,
                message TEXT,
                bot_reply TEXT,
                timestamp DATETIME DEFAULT CURRENT_TIMESTAMP
            )
        ''')
        await db.commit()

# Функция для сохранения сообщений в базу данных
async def log_message(user_id, user_name, message_text, bot_reply):
    async with aiosqlite.connect('bot_messages.db') as db:
        await db.execute('''
            INSERT INTO messages (user_id, user_name, message, bot_reply)
            VALUES (?, ?, ?, ?)
        ''', (user_id, user_name, message_text, bot_reply))
        await db.commit()

# Обработчик команды /start
@dp.message(Command("start"))
async def cmd_start(message: types.Message):
    bot_reply = "Привет! Если нужно связаться с администратором, нажми кнопку ниже."
    await message.answer(bot_reply, reply_markup=keyboard)
    
    # Логирование запроса и ответа
    await log_message(message.from_user.id, message.from_user.full_name, message.text, bot_reply)

# Обработчик нажатия кнопки "Связаться с администратором"
@dp.message(Text(text="Связаться с администратором"))
async def contact_admin(message: types.Message):
    bot_reply = "Ваше сообщение отправлено администратору. Ожидайте ответа."
    
    # Отправка сообщения админу
    await bot.send_message(ADMIN_ID, f"Пользователь {message.from_user.full_name} хочет связаться с вами.")
    
    # Ответ пользователю
    await message.answer(bot_reply)
    
    # Логирование запроса и ответа
    await log_message(message.from_user.id, message.from_user.full_name, message.text, bot_reply)

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

if __name__ == "__main__":
    import asyncio
    asyncio.run(main())
  • Вопрос задан
  • 150 просмотров
Подписаться 1 Простой Комментировать
Решения вопроса 1
@Everything_is_bad
У ReplyKeyboardMarkup параметр keyboard обязательный, читай доки или гугли хотя бы примеры.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

Похожие вопросы
Wanted. Москва
До 400 000 ₽
Wanted. Санкт-Петербург
До 120 000 ₽
от 60 000 до 120 000 ₽
21 дек. 2024, в 16:56
180000 руб./за проект
21 дек. 2024, в 16:14
40000 руб./за проект
21 дек. 2024, в 16:02
1550 руб./за проект