короче есть код который я называю не гавнокод а код для доработки есть админ панелька для добавления фильмов и простейший интерфейс
Python:
import logging
import random
from aiogram import Bot, Dispatcher, types
from aiogram.contrib.fsm_storage.memory import MemoryStorage
from aiogram.dispatcher import FSMContext
from aiogram.dispatcher.filters import Text
from aiogram.dispatcher.filters.state import State, StatesGroup
from aiogram.types import ParseMode
from aiogram.utils import executor
# Настройка логирования
logging.basicConfig(level=logging.INFO)
# Создание экземпляров бота и диспетчера
TOKEN = "токен въеби"
bot = Bot(token=TOKEN)
storage = MemoryStorage()
dp = Dispatcher(bot, storage=storage)
# Создание класса для представления состояний бота
class AdminPanel(StatesGroup):
waiting_for_message = State()
waiting_for_movie = State()
# Определение функции для отправки сообщения всем пользователям
async def broadcast_message(message: str):
async with dp.bot.get_updates() as updates:
for update in updates:
if update.message and update.message.chat.type == types.ChatType.PRIVATE:
await update.message.answer(message)
# Определение функции для добавления фильма в список
async def add_movie(movie: str, number: str, state: FSMContext):
async with state.proxy() as data:
if "movies" not in data:
data["movies"] = {}
data["movies"][number] = movie
await state.finish()
# Определение функции для получения случайного фильма из списка
async def get_random_movie(state: FSMContext) -> str:
async with state.proxy() as data:
if "movies" not in data:
data["movies"] = {}
if len(data["movies"]) == 0:
return "Фильмы еще не добавлены"
number, movie = random.choice(list(data["movies"].items()))
return f"Фильм с номером {number}: {movie}"
# Обработчик команды /start
@dp.message_handler(commands=["start"])
async def cmd_start(message: types.Message):
await message.answer("Привет! Отправь мне код, и я дам тебе название фильма.")
# Обработчик сообщений от пользователя
@dp.message_handler(Text(equals=["1234", "5678", "9012"]))
async def send_movie(message: types.Message, state: FSMContext):
movie = await get_random_movie(state)
await message.answer(f"Фильм для кода {message.text}: {movie}")
# Обработчик команды /admin
@dp.message_handler(commands=["admin"])
async def cmd_admin(message: types.Message):
# Проверка, является ли пользователь администратором
if message.from_user.id != свой айди:
return
# Отображение админ-панели
keyboard = types.ReplyKeyboardMarkup(resize_keyboard=True)
keyboard.add(types.KeyboardButton("Отправить сообщение всем пользователям"))
keyboard.add(types.KeyboardButton("Добавить фильм"))
await message.answer("Админ-панель:", reply_markup=keyboard)
await AdminPanel.waiting_for_message.set()
# Обработчик сообщений админ-панели
@dp.message_handler(state=AdminPanel.waiting_for_message)
async def admin_panel_handler(message: types.Message, state: FSMContext):
if message.text == "Отправить сообщение всем пользователям":
await message.answer("Введите сообщение для отправки:")
await AdminPanel.waiting_for_message.set()
elif message.text == "Добавить фильм":
await message.answer("Введите номер фильма:")
await AdminPanel.waiting_for_movie.set()
# Обработчик сообщений после ввода сообщения для рассылки
@dp.message_handler(state=AdminPanel.waiting_for_message)
async def send_message_to_users(message: types.Message, state: FSMContext):
await broadcast_message(message.text)
await message.answer("Сообщение успешно отправлено всем пользователям.")
await state.finish()
# Обработчик сообщений после ввода номера фильма для добавления
@dp.message_handler(state=AdminPanel.waiting_for_movie)
async def add_movie_number_handler(message: types.Message, state: FSMContext):
await message.answer("Введите название фильма:")
await AdminPanel.waiting_for_movie.next()
# Обработчик сообщений после ввода названия фильма для добавления
@dp.message_handler(state=AdminPanel.waiting_for_movie)
async def add_movie_handler(message: types.Message, state: FSMContext):
number = message.text
movie = message.text
await add_movie(movie, number, state)
await message.answer("Фильм успешно добавлен.")
await state.finish()
# Запуск бота
if __name__ == '__main__':
executor.start_polling(dp, skip_updates=True)