Вчера я работал над ботом для Telegram, используя aiogram 3.0. Я установил все необходимые библиотеки в виртуальную среду (venv) и несколько раз все перепроверил. Однако, когда я пытаюсь запустить код, я постоянно получаю сообщение об ошибке. Любая помощь будет оценена по достоинству!
Exception has occurred: ModuleNotFoundError
No module named 'aiogram'
File "/home/nwlie/Giveaway/bot.py", line 2, in
from aiogram import Bot, Dispatcher, types
ModuleNotFoundError: No module named 'aiogram'
import asyncio
import sqlite3
from datetime import datetime
from aiogram import Bot, Dispatcher, types
from aiogram.types import Message, InlineKeyboardMarkup, InlineKeyboardButton, CallbackQuery, FSInputFile
from aiogram.filters import CommandStart, Command
from aiogram.fsm.storage.memory import MemoryStorage
from aiogram.exceptions import TelegramBadRequest
# =======================
# НАСТРОЙКИ
# =======================
TOKEN = "YOUR_BOT_TOKEN" # Вставьте ваш токен
ADMIN_IDS = {5042914354, 5871506949} # ID администраторов
CHANNEL_ID = "@community_so2" # Канал для проверки подписки
bot = Bot(token=TOKEN, parse_mode="HTML")
storage = MemoryStorage()
dp = Dispatcher(storage=storage)
# =======================
# БАЗА ДАННЫХ
# =======================
def init_db():
conn = sqlite3.connect('bot.db')
c = conn.cursor()
c.execute('''CREATE TABLE IF NOT EXISTS users (
telegram_id INTEGER UNIQUE,
username TEXT,
coins INTEGER DEFAULT 0,
invited_by INTEGER,
blocked INTEGER DEFAULT 0
)''')
c.execute('''CREATE TABLE IF NOT EXISTS raffles (
id INTEGER PRIMARY KEY AUTOINCREMENT,
title TEXT,
description TEXT,
image TEXT,
end_date TEXT,
participants TEXT DEFAULT ''
)''')
conn.commit()
conn.close()
def add_user(telegram_id, username, invited_by=None):
conn = sqlite3.connect('bot.db')
c = conn.cursor()
c.execute('SELECT * FROM users WHERE telegram_id = ?', (telegram_id,))
if not c.fetchone():
c.execute('INSERT INTO users (telegram_id, username, invited_by) VALUES (?, ?, ?)',
(telegram_id, username, invited_by))
if invited_by:
c.execute('UPDATE users SET coins = coins + 5 WHERE telegram_id = ?', (invited_by,))
c.execute('UPDATE users SET coins = coins + 2 WHERE telegram_id = ?', (telegram_id,))
conn.commit()
conn.close()
def update_coins(telegram_id, amount):
conn = sqlite3.connect('bot.db')
c = conn.cursor()
c.execute('UPDATE users SET coins = coins + ? WHERE telegram_id = ?', (amount, telegram_id))
conn.commit()
conn.close()
def add_participant(raffle_id, user_id):
conn = sqlite3.connect('bot.db')
c = conn.cursor()
c.execute('SELECT participants FROM raffles WHERE id = ?', (raffle_id,))
participants = c.fetchone()[0]
if str(user_id) not in participants.split(","):
participants += f",{user_id}"
c.execute('UPDATE raffles SET participants = ? WHERE id = ?', (participants, raffle_id))
conn.commit()
conn.close()
# =======================
# ПРОВЕРКА ПОДПИСКИ
# =======================
async def check_subscription(user_id):
try:
user_status = await bot.get_chat_member(CHANNEL_ID, user_id)
return user_status.status in ["member", "administrator", "creator"]
except:
return False
# =======================
# ХЭНДЛЕРЫ
# =======================
@dp.message(CommandStart())
async def start_handler(message: Message):
add_user(message.from_user.id, message.from_user.username)
markup = InlineKeyboardMarkup(inline_keyboard=[
[InlineKeyboardButton(text="👤 Профиль", callback_data="profile")],
[InlineKeyboardButton(text="🎉 Розыгрыши", callback_data="raffles")]
])
await message.answer("Добро пожаловать! Выберите действие:", reply_markup=markup)
@dp.callback_query(lambda c: c.data == "profile")
async def profile_handler(callback: CallbackQuery):
conn = sqlite3.connect('bot.db')
c = conn.cursor()
c.execute('SELECT coins FROM users WHERE telegram_id = ?', (callback.from_user.id,))
coins = c.fetchone()
if coins:
await callback.message.edit_text(f"👤 Ваш профиль:\n💰 Баланс Coins: {coins[0]}")
else:
await callback.message.edit_text("Профиль не найден.")
@dp.callback_query(lambda c: c.data == "raffles")
async def raffles_handler(callback: CallbackQuery):
conn = sqlite3.connect('bot.db')
c = conn.cursor()
c.execute('SELECT id, title, description FROM raffles')
raffles = c.fetchall()
if not raffles:
await callback.message.edit_text("🎉 Розыгрышей пока нет.")
else:
for raffle in raffles:
await callback.message.answer(f"🎁 {raffle[1]}\n{raffle[2]}\n\nУчаствуйте!")
conn.close()
@dp.message(Command("admin"))
async def admin_panel(message: Message):
if message.from_user.id not in ADMIN_IDS:
await message.reply("У вас нет доступа к этой панели.")
return
markup = InlineKeyboardMarkup(inline_keyboard=[
[InlineKeyboardButton(text="➕ Создать розыгрыш", callback_data="create_raffle")],
[InlineKeyboardButton(text="💰 Выдать Coins", callback_data="give_coins")],
])
await message.answer("Админ-панель:", reply_markup=markup)
@dp.callback_query(lambda c: c.data == "create_raffle")
async def create_raffle(callback: CallbackQuery):
await callback.message.answer("Отправьте информацию о розыгрыше в формате:\n\n||")
@dp.message(lambda m: "|" in m.text and m.from_user.id in ADMIN_IDS)
async def save_raffle(message: Message):
title, description, end_date = message.text.split("|")
conn = sqlite3.connect('bot.db')
c = conn.cursor()
c.execute('INSERT INTO raffles (title, description, end_date) VALUES (?, ?, ?)', (title, description, end_date))
conn.commit()
conn.close()
await message.reply(f"🎉 Розыгрыш '{title}' создан!")
# =======================
# ЗАПУСК БОТА
# =======================
async def main():
init_db()
await dp.start_polling(bot)
if __name__ == '__main__':
asyncio.run(main())
Все библиотеки установлены в виртуальную среду, которая подключена к папке бота, но все равно выдает ошибку. ChatGPT не помог и просто продолжал давать мне общие ответы.
Вчера я работал над ботом для Telegram, используя [b]aiogram 3.0[/b]. Я установил все необходимые библиотеки в виртуальную среду (venv) и несколько раз все перепроверил. Однако, когда я пытаюсь запустить код, я постоянно получаю сообщение об ошибке. Любая помощь будет оценена по достоинству! [code]
Exception has occurred: ModuleNotFoundError
No module named 'aiogram'
File "/home/nwlie/Giveaway/bot.py", line 2, in
from aiogram import Bot, Dispatcher, types
ModuleNotFoundError: No module named 'aiogram' [/code] Код: [code]
import asyncio
import sqlite3
from datetime import datetime
from aiogram import Bot, Dispatcher, types
from aiogram.types import Message, InlineKeyboardMarkup, InlineKeyboardButton, CallbackQuery, FSInputFile
from aiogram.filters import CommandStart, Command
from aiogram.fsm.storage.memory import MemoryStorage
from aiogram.exceptions import TelegramBadRequest
# =======================
# НАСТРОЙКИ
# =======================
TOKEN = "YOUR_BOT_TOKEN" # Вставьте ваш токен
ADMIN_IDS = {5042914354, 5871506949} # ID администраторов
CHANNEL_ID = "@community_so2" # Канал для проверки подписки
[/code] Все библиотеки установлены в виртуальную среду, которая подключена к папке бота, но все равно выдает ошибку. :( ChatGPT не помог и просто продолжал давать мне общие ответы.