我正在制作一个主持人机器人,我需要一个在机器人启动时进行所有必要检查的功能,但问题是在启动检查的功能中,msg: Message如果使用启动则无法通过if __name__ == '__main__':。我尝试在内部创建一个函数if __name__ == '__main__',并认为它会自行启动,但机器人只是关闭了。这是机器人启动代码:
async def main(msg: Message):
bot = Bot(token=config.bot_token)
dp = Dispatcher(storage=MemoryStorage())
dp.include_router(router)
await bot.delete_webhook(drop_pending_updates=True)
await handlers.bot_started_check(msg) # Для запуска нужно передавать msg
print('Бот запущен')
await dp.start_polling(bot, allowed_updates=dp.resolve_used_update_types(), on_startup=DB.bot_startup(1), on_shutdown=DB.bot_startup(0))
if __name__ == '__main__':
async def start(msg: Message):
logging.basicConfig(level=logging.INFO)
asyncio.run(main(msg))
我不知道如何解决它。
更新:代码handlers.py
from aiogram import types, F, Router
from aiogram.types import Message
from aiogram.filters import Command
from aiogram.fsm.state import State, StatesGroup
from aiogram.fsm.context import FSMContext
from aiogram.types.message import ContentType
from aiogram.filters import ADMINISTRATOR, IS_ADMIN, IS_MEMBER, IS_NOT_MEMBER
from aiogram import Bot
import asyncio
from database import ModerDB
import pydantic_core
DB = ModerDB('DB.db')
import config
import swears
bot = Bot(token=config.bot_token)
router = Router()
async def bot_started_check(msg: Message):
while True:
if DB.bot_startup().fetchone()[0] == 1:
await bot.send_message(msg.chat.id,'Бот включен')
pass
else:
await bot.send_message(msg.chat.id, 'Бот выключен')
await asyncio.sleep(1)
async def bot_stopped(msg: Message):
if DB.bot_startup().fetchone()[0] != 1:
await bot.send_message(msg.chat.id, 'Бот выключен.')
@router.message(Command(commands='start', prefix='!'))
async def start(msg: Message):
if not DB.bot_exist(bot.id):
DB.bot_activate(bot.id)
await bot.send_message(msg.chat.id, 'Бот был активирован✅')
await bot_started_check(msg)
@router.message(Command(commands='админ1', prefix='+'))
async def prefix(msg: Message):
member_name = ' '.join(msg.text.split()[1:])
if DB.username_exist(member_name):
await bot.send_message(msg.from_user.id, f'Участник {member_name} стал администратором первого уровня.')
else:
await bot.send_message(msg.chat.id, 'Учатник не найден.')
await bot.set_chat_administrator_custom_title(msg.chat.id, msg.reply_to_message.from_user.id, f'{member_name}')
@router.message(F.text, lambda msg: any(x in msg.text.lower().replace("ё", "е") for x in swears.swears))
async def censure(msg: Message):
await msg.delete()
await msg.answer("Без мата, пожалуйста ⛔")
机器人不需要编写消息的选项:
机器人需要编写消息的选项: