Top.Mail.Ru
Ответы

Помогите разобраться с кодом для Telegram бота

Выдает бесконечные ошибки в коде, не знаю уже что делать, устал голову ломать , установлен aiogram 3.0, знатоки подскажите пожалуйста, бот по меркам реалий не такой уж и сложный

Пишу через Replit

main.ru:

import asyncio

from aiogram import Bot, Dispatcher

from aiogram.enums import ParseMode

from aiogram.types import Message

from aiogram.fsm.storage.memory import MemoryStorage

from aiogram.filters import Command

from handlers import blog, broadcast, poll

TOKEN = "Мой токен"

CHANNEL_ID = "@Serquor_DevLog"

async def main():

bot = Bot(token=TOKEN, parse_mode=ParseMode.HTML)

dp = Dispatcher(storage=MemoryStorage())

dp.include_routers(blog.router, broadcast.router, poll.router)

@dp.message(Command("start"))

async def start(message: Message):

await message.answer("Привет! Я — бот для блога Serquor.")

await dp.start_polling(bot)

if name == "__main__":

asyncio.run(main())

blog.py;

from aiogram import Router, F

from aiogram.types import Message

from aiogram.filters import Command

from main import CHANNEL_ID

router = Router()

@router.message(Command("publish"))

async def publish_blog(message: Message):

if message.from_user.id != Мой id:

await message.answer("Нет доступа.")

return

lines = message.text.split("\n", 1)

if len(lines) < 2:

await message.answer("Формат: /publish\nТекст блога")

return

text = lines[1]

await message.bot.send_message(CHANNEL_ID, text)

await message.answer("✅ Опубликовано в канал.")

broadcast.pu

from aiogram import Router, F

from aiogram.types import Message

from aiogram.filters import Command

import json

import os

router = Router()

DATA_FILE = "data/users.json"

def save_user(user_id):

users = []

if os.path.exists(DATA_FILE):

with open(DATA_FILE, "r") as f:

users = json.load(f)

if user_id not in users:

users.append(user_id)

with open(DATA_FILE, "w") as f:

json.dump(users, f)

@router.message(Command("start"))

async def track_user(message: Message):

save_user(message.from_user.id)

await message.answer("Вы подписались на обновления.")

@router.message(Command("broadcast"))

async def broadcast(message: Message):

if message.from_user.id != Мой Id:

return

parts = message.text.split("\n", 1)

if len(parts) < 2:

await message.answer("Формат: /broadcast\nТекст рассылки")

return

text = parts[1]

with open(DATA_FILE, "r") as f:

users = json.load(f)

for uid in users:

try:

await message.bot.send_message(uid, text)

except:

continue

await message.answer("✅ Рассылка отправлена.")

poll.py

from aiogram import Router

from aiogram.types import Message, InlineKeyboardMarkup, InlineKeyboardButton, CallbackQuery

from aiogram.filters import Command

from aiogram.utils.keyboard import InlineKeyboardBuilder

router = Router()

votes = {"yes": 0, "no": 0, "maybe": 0}

@router.message(Command("poll"))

async def send_poll(message: Message):

keyboard = InlineKeyboardBuilder()

keyboard.button(text="✅ Да", callback_data="vote_yes")

keyboard.button(text="❌ Нет", callback_data="vote_no")

keyboard.button(text="🤔 Не уверен", callback_data="vote_maybe")

await message.answer("Что ты думаешь о блоге?", reply_markup=keyboard.as_markup())

@router.callback_query(F.data.startswith("vote_"))

async def handle_vote(callback: CallbackQuery):

vote_type = callback.data.split("_")[1]

votes[vote_type] += 1

text = f"✅ Да: {votes['yes']} | ❌ Нет: {votes['no']} | 🤔 Не уверен: {votes['maybe']}"

await callback.message.edit_text("Что ты думаешь о блоге?\n" + text, reply_markup=callback.message.reply_markup)

await callback.answer("Спасибо за голос!")