import asyncio
from aiogram import Bot, Dispatcher, types
from aiogram.contrib.fsm_storage.memory import MemoryStorage
from aiogram.dispatcher import FSMContext
from aiogram.dispatcher.filters.state import State, StatesGroup
from aiogram.dispatcher.filters.builtin import IDFilter
class AdminConsole(StatesGroup):
admin = State()
new_text = State()
confirm_new_text = State()
async def write_upcoming(text):
with open("upcoming.txt", 'w', encoding="utf-8") as up:
up.write(text)
async def admin_console(message: types.Message):
await AdminConsole.admin.set()
available_actions = ["Обновить текст 'Что дальше?'", "Отправить сообщение всем пользователям"]
keyboard = types.ReplyKeyboardMarkup(resize_keyboard=True, row_width=3)
keyboard.add(*available_actions)
await message.answer("Здравствуй, хозяин! Что ты хочешь сделать?", reply_markup=keyboard)
async def update_upcoming(message: types.Message, state: FSMContext):
await AdminConsole.new_text.set()
await message.answer("Введи новое сообщение:", reply_markup=types.ReplyKeyboardRemove())
async def confirm_upcoming(message: types.Message, state: FSMContext):
await AdminConsole.confirm_new_text.set()
await state.update_data(new_text=message.text.lower())
available_actions = ["Да", "Нет, хочу отредактировать"]
keyboard = types.ReplyKeyboardMarkup(resize_keyboard=True, row_width=3)
keyboard.add(*available_actions)
user_data = await state.get_data()
await message.answer(f"Я прочитал: {user_data['new_text']}. Всё верно?", reply_markup=keyboard)
async def update_finished(message: types.Message, state: FSMContext):
user_data = await state.get_data()
await write_upcoming(user_data['new_text'])
message.answer("Успешно!")
await AdminConsole.admin.set()
def register_handlers_admin(dp: Dispatcher):
dp.register_message_handler(admin_console, IDFilter(user_id="my_id"), commands="admin", state="*")
dp.register_message_handler(update_upcoming, state=AdminConsole.admin, text="Обновить текст 'Что дальше?'")
dp.register_message_handler(update_upcoming, state=AdminConsole.confirm_new_text, text="Нет, хочу отредактировать'")
dp.register_message_handler(confirm_upcoming, state=AdminConsole.new_text)
dp.register_message_handler(update_finished, state=AdminConsole.confirm_new_text, text="Нет, хочу отредактировать'")
async def main():
# Настройка логирования в stdout
''' logging.basicConfig(
level=logging.INFO,
format="%(asctime)s - %(levelname)s - %(name)s - %(message)s",
)
logger.error("Starting bot")'''
logging.basicConfig(level=logging.INFO)
# Парсинг файла конфигурации
# config = load_config("config/bot.ini")
# Объявление и инициализация объектов бота и диспетчера
API_TOKEN = 'my_token'
bot = Bot(token=API_TOKEN, parse_mode=types.ParseMode.HTML)
dp = Dispatcher(bot, storage=MemoryStorage())
# Регистрация хэндлеров
register_handlers_admin(dp)
# Установка команд бота
# await set_commands(bot)
# Запуск поллинга
await dp.skip_updates()
await dp.start_polling()
if __name__ == '__main__':
asyncio.run(main())