RError.com

RError.com Logo RError.com Logo

RError.com Navigation

  • 主页

Mobile menu

Close
  • 主页
  • 系统&网络
    • 热门问题
    • 最新问题
    • 标签
  • Ubuntu
    • 热门问题
    • 最新问题
    • 标签
  • 帮助
主页 / 问题 / 1563465
Accepted
Nqweqweqwe
Nqweqweqwe
Asked:2024-01-27 15:05:03 +0000 UTC2024-01-27 15:05:03 +0000 UTC 2024-01-27 15:05:03 +0000 UTC

机器人启动时如何运行函数?爱格拉姆3.3.0

  • 772

我正在制作一个主持人机器人,我需要一个在机器人启动时进行所有必要检查的功能,但问题是在启动检查的功能中,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("Без мата, пожалуйста ⛔")

python
  • 1 1 个回答
  • 34 Views

1 个回答

  • Voted
  1. Best Answer
    Иван Ипатов
    2024-01-27T22:46:00Z2024-01-27T22:46:00Z

    机器人不需要编写消息的选项:

    async def main():
        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(bot)  # вставьте bot
        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__':
        logging.basicConfig(level=logging.INFO)
        asyncio.run(main())
    
    
    async def bot_started_check(bot: Bot):
        while True:
            if DB.bot_startup().fetchone()[0] == 1:
                await bot.send_message(ТУТ ВАШ TG ID,'Бот включен')
                pass
            else:
                await bot.send_message(ТУТ ВАШ TG ID, 'Бот выключен')
            await asyncio.sleep(1)
    

    机器人需要编写消息的选项:

    async def main():
        bot = Bot(token=config.bot_token)
        dp = Dispatcher(storage=MemoryStorage())
        dp.include_router(router)
        await bot.delete_webhook(drop_pending_updates=True)
    
        @dp.message()
        async def test_func(msg: Message):
            await handlers.bot_started_check(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__':
        logging.basicConfig(level=logging.INFO)
        asyncio.run(main())
    
    async def bot_started_check(msg: Message):
        while True:
            if DB.bot_startup().fetchone()[0] == 1:
                await message.answer('Бот включен')
                pass
            else:
                await message.answer('Бот выключен')
            await asyncio.sleep(1)
    

    至于你的其余代码片段,我不知道,我无法检查,错误是可能的,例如dp.include_router(router)

    • 1

相关问题

  • 是否可以以某种方式自定义 QTabWidget?

  • telebot.anihelper.ApiException 错误

  • Python。检查一个数字是否是 3 的幂。输出 无

  • 解析多个响应

  • 交换两个数组的元素,以便它们的新内容也反转

Sidebar

Stats

  • 问题 10021
  • Answers 30001
  • 最佳答案 8000
  • 用户 6900
  • 常问
  • 回答
  • Marko Smith

    我看不懂措辞

    • 1 个回答
  • Marko Smith

    请求的模块“del”不提供名为“default”的导出

    • 3 个回答
  • Marko Smith

    "!+tab" 在 HTML 的 vs 代码中不起作用

    • 5 个回答
  • Marko Smith

    我正在尝试解决“猜词”的问题。Python

    • 2 个回答
  • Marko Smith

    可以使用哪些命令将当前指针移动到指定的提交而不更改工作目录中的文件?

    • 1 个回答
  • Marko Smith

    Python解析野莓

    • 1 个回答
  • Marko Smith

    问题:“警告:检查最新版本的 pip 时出错。”

    • 2 个回答
  • Marko Smith

    帮助编写一个用值填充变量的循环。解决这个问题

    • 2 个回答
  • Marko Smith

    尽管依赖数组为空,但在渲染上调用了 2 次 useEffect

    • 2 个回答
  • Marko Smith

    数据不通过 Telegram.WebApp.sendData 发送

    • 1 个回答
  • Martin Hope
    Alexandr_TT 2020年新年大赛! 2020-12-20 18:20:21 +0000 UTC
  • Martin Hope
    Alexandr_TT 圣诞树动画 2020-12-23 00:38:08 +0000 UTC
  • Martin Hope
    Air 究竟是什么标识了网站访问者? 2020-11-03 15:49:20 +0000 UTC
  • Martin Hope
    Qwertiy 号码显示 9223372036854775807 2020-07-11 18:16:49 +0000 UTC
  • Martin Hope
    user216109 如何为黑客设下陷阱,或充分击退攻击? 2020-05-10 02:22:52 +0000 UTC
  • Martin Hope
    Qwertiy 并变成3个无穷大 2020-11-06 07:15:57 +0000 UTC
  • Martin Hope
    koks_rs 什么是样板代码? 2020-10-27 15:43:19 +0000 UTC
  • Martin Hope
    Sirop4ik 向 git 提交发布的正确方法是什么? 2020-10-05 00:02:00 +0000 UTC
  • Martin Hope
    faoxis 为什么在这么多示例中函数都称为 foo? 2020-08-15 04:42:49 +0000 UTC
  • Martin Hope
    Pavel Mayorov 如何从事件或回调函数中返回值?或者至少等他们完成。 2020-08-11 16:49:28 +0000 UTC

热门标签

javascript python java php c# c++ html android jquery mysql

Explore

  • 主页
  • 问题
    • 热门问题
    • 最新问题
  • 标签
  • 帮助

Footer

RError.com

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

帮助

© 2023 RError.com All Rights Reserve   沪ICP备12040472号-5