コード例 #1
0
def init(*, _env_file: Optional[str] = None, **kwargs: Any) -> None:
    """初始化 NoneBot 以及 全局 {ref}`nonebot.drivers.Driver` 对象。

    NoneBot 将会从 .env 文件中读取环境信息,并使用相应的 env 文件配置。

    也可以传入自定义的 `_env_file` 来指定 NoneBot 从该文件读取配置。

    参数:
        _env_file: 配置文件名,默认从 `.env.{env_name}` 中读取配置
        kwargs: 任意变量,将会存储到 {ref}`nonebot.drivers.Driver.config` 对象里

    用法:
        ```python
        nonebot.init(database=Database(...))
        ```
    """
    global _driver
    if not _driver:
        logger.success("NoneBot is initializing...")
        env = Env()
        config = Config(
            **kwargs,
            _common_config=env.dict(),
            _env_file=_env_file or f".env.{env.environment}",
        )

        default_filter.level = config.log_level
        logger.opt(colors=True).info(
            f"Current <y><b>Env: {escape_tag(env.environment)}</b></y>")
        logger.opt(colors=True).debug(
            f"Loaded <y><b>Config</b></y>: {escape_tag(str(config.dict()))}")

        DriverClass: Type[Driver] = _resolve_combine_expr(config.driver)
        _driver = DriverClass(env, config)
コード例 #2
0
ファイル: __init__.py プロジェクト: SK-415/nonebot2
def run(host: Optional[str] = None,
        port: Optional[int] = None,
        *args,
        **kwargs):
    """
    :说明:

      启动 NoneBot,即运行全局 Driver 对象。

    :参数:

      * ``host: Optional[str]``: 主机名/IP,若不传入则使用配置文件中指定的值
      * ``port: Optional[int]``: 端口,若不传入则使用配置文件中指定的值
      * ``*args``: 传入 Driver.run 的位置参数
      * ``**kwargs``: 传入 Driver.run 的命名参数

    :返回:

      - ``None``

    :用法:

    .. code-block:: python

        nonebot.run(host="127.0.0.1", port=8080)

    """
    logger.success("Running NoneBot...")
    get_driver().run(host, port, *args, **kwargs)
コード例 #3
0
async def handle(bot: Bot, event: Event, state: T_State):
    logger.success(f'help: {event}\n')
    data = await get_help_data()
    await help.send(
        Message(
            f'[CQ:share,url={data["url"]},title={data["title"]},content={data["content"]},image={data["image"]}]'
        ))
コード例 #4
0
ファイル: __init__.py プロジェクト: Kagarise/qqbot
async def handle(bot: Bot, event: Event, state: T_State):
    state['message'] = str(event.get_message()).strip()
    logger.success(f'tuling_ai: {event}\n')
    if state['message'] == "":
        response = await get_none_response()
        await tuling_ai.send(response)
    else:
        response = await get_tuling_ai_response(state['message'])
        await tuling_ai.send(response)
コード例 #5
0
def run(*args: Any, **kwargs: Any) -> None:
    """启动 NoneBot,即运行全局 {ref}`nonebot.drivers.Driver` 对象。

    参数:
        args: 传入 {ref}`nonebot.drivers.Driver.run` 的位置参数
        kwargs: 传入 {ref}`nonebot.drivers.Driver.run` 的命名参数

    用法:
        ```python
        nonebot.run(host="127.0.0.1", port=8080)
        ```
    """
    logger.success("Running NoneBot...")
    get_driver().run(*args, **kwargs)
コード例 #6
0
ファイル: __init__.py プロジェクト: SK-415/nonebot2
def init(*, _env_file: Optional[str] = None, **kwargs):
    """
    :说明:

      初始化 NoneBot 以及 全局 Driver 对象。

      NoneBot 将会从 .env 文件中读取环境信息,并使用相应的 env 文件配置。

      你也可以传入自定义的 _env_file 来指定 NoneBot 从该文件读取配置。

    :参数:

      * ``_env_file: Optional[str]``: 配置文件名,默认从 .env.{env_name} 中读取配置
      * ``**kwargs``: 任意变量,将会存储到 Config 对象里

    :返回:

      - ``None``

    :用法:

    .. code-block:: python

        nonebot.init(database=Database(...))

    """
    global _driver
    if not _driver:
        logger.success("NoneBot is initializing...")
        env = Env()
        config = Config(**kwargs,
                        _common_config=env.dict(),
                        _env_file=_env_file or f".env.{env.environment}")

        default_filter.level = (
            "DEBUG" if config.debug else
            "INFO") if config.log_level is None else config.log_level
        logger.opt(colors=True).info(
            f"Current <y><b>Env: {escape_tag(env.environment)}</b></y>")
        logger.opt(colors=True).debug(
            f"Loaded <y><b>Config</b></y>: {escape_tag(str(config.dict()))}")

        modulename, _, cls = config.driver.partition(":")
        module = importlib.import_module(modulename)
        instance = module
        for attr_str in (cls or "Driver").split("."):
            instance = getattr(instance, attr_str)
        DriverClass: Type[Driver] = instance  # type: ignore
        _driver = DriverClass(env, config)
コード例 #7
0
async def setu():
    try:
        Bot_me = nonebot.get_bots()[Config.me]
        logger.success(f"{Config.me}:scheduler-setu")
        img_url = await get_img_url()
        if img_url:
            msg = Message(f'[CQ:image,file={img_url},cache=0]')
        else:
            msg = "诶嘿,出错了"
        await Bot_me.call_api(
            'send_group_msg', **{
                'message': msg,
                'group_id': Config.test_group
            })
    except:
        logger.error("定时任务setu失败")
コード例 #8
0
async def weather_on_11_30_and_18_30():
    try:
        Bot_me = nonebot.get_bots()[Config.me]
        logger.success(f"{Config.me}:scheduler-weather_now")
        data = await get_weather_detail(daily=False)
        msg = ""
        for key, value in data.items():
            if value:
                msg += f'{key}:{value}\n'
        msg = msg.strip()
        await Bot_me.call_api(
            'send_group_msg', **{
                'message': msg,
                'group_id': Config.test_group
            })
    except:
        logger.error("定时任务weather_now失败")
コード例 #9
0
def init(*, _env_file: Optional[str] = None, **kwargs):
    """
    :说明:

      初始化 NoneBot 以及 全局 Driver 对象。

      NoneBot 将会从 .env 文件中读取环境信息,并使用相应的 env 文件配置。

      你也可以传入自定义的 _env_file 来指定 NoneBot 从该文件读取配置。

    :参数:

      * ``_env_file: Optional[str]``: 配置文件名,默认从 .env.{env_name} 中读取配置
      * ``**kwargs``: 任意变量,将会存储到 Config 对象里

    :返回:

      - ``None``

    :用法:

    .. code-block:: python

        nonebot.init(database=Database(...))

    """
    global _driver
    if not _driver:
        logger.success("NoneBot is initializing...")
        env = Env()
        config = Config(
            **kwargs,
            _common_config=env.dict(),
            _env_file=_env_file or f".env.{env.environment}",
        )

        default_filter.level = config.log_level
        logger.opt(colors=True).info(
            f"Current <y><b>Env: {escape_tag(env.environment)}</b></y>"
        )
        logger.opt(colors=True).debug(
            f"Loaded <y><b>Config</b></y>: {escape_tag(str(config.dict()))}"
        )

        DriverClass: Type[Driver] = _resolve_combine_expr(config.driver)
        _driver = DriverClass(env, config)
コード例 #10
0
ファイル: util.py プロジェクト: Whitesad/ChristinaQQbot
def rss_server():
    logger.success('rss进程开启!')
    time.sleep(10)
    while True:
        time.sleep(1)
        rss_list = get_all_rss()
        if (len(rss_list) >= 1):
            try:
                tasks = []
                for rss in rss_list:
                    if (rss.activate):
                        tasks.append(update_rss(rss=rss, mode='update'))
                if (len(tasks) > 0):
                    asyncio.run(update_all_rss(tasks))
                    logger.info('成功更新rss')
                    time.sleep(20)
            except Exception as e:
                logger.info('更新rss错误!info:%s' % e.args[0])
                time.sleep(1)
コード例 #11
0
ファイル: __init__.py プロジェクト: Algieba-dean/qqbot
async def animal_on_7_00_to_23_00():
    try:
        Bot_me = nonebot.get_bots()[Config.me]
        logger.success(f"{Config.me}:scheduler-animal")
        choice = ['猫猫', '狗狗']
        choice = random.choice(choice)
        if choice == '猫猫':
            img_url = await get_cat_url()
        elif choice == '狗狗':
            img_url = await get_dog_url()
        else:
            img_url = None
        msg = f'已经{datetime.datetime.now().hour}点了,来看{choice}图叭' + Message(
            f'[CQ:image,file={img_url}]')
        await Bot_me.call_api(
            'send_group_msg', **{
                'message': msg,
                'group_id': Config.test_group
            })
    except:
        logger.error("定时任务animal失败")
コード例 #12
0
ファイル: __init__.py プロジェクト: Algieba-dean/qqbot
async def live_dd_each_1_minute():
    dd_list = [77386, 34027]
    try:
        Bot_me = nonebot.get_bots()[Config.me]
        datas = await get_dd_list_status(dd_list=dd_list)
        for data in datas:
            if data['live_status']:
                if data['room_id'] not in live_dd_status or data[
                        'live_time'] != live_dd_status[data['room_id']]:
                    live_dd_status[data['room_id']] = data['live_time']
                    msg = f'''{data["name"]}开播啦!
房间号:{data["room_id"]}
标题:{data["title"]}''' + Message(f'[CQ:image,file={data["img"]}]')
                    await Bot_me.call_api(
                        'send_group_msg', **{
                            'message': msg,
                            'group_id': Config.test_group
                        })
                    logger.success(
                        f'{Config.me}:scheduler-live_dd:{data["name"]}开播啦!')
    except:
        logger.error("定时任务live_dd失败")
コード例 #13
0
ファイル: __init__.py プロジェクト: Algieba-dean/qqbot
async def pr_on_11_50():
    try:
        Bot_me = nonebot.get_bots()[Config.me]
        logger.success(f"{Config.me}:scheduler-pr")
        for rank in range(3):
            data = await p_rank(rank)
            msg = f'''rank:{rank + 1}
id:{data['id']}
title:{data['title']}
user_id:{data['user_id']}
user_name:{data['user_name']}''' + Message(f'[CQ:image,file={data["url"]}]')
            # await bot.call_api('send_private_msg', **{
            #     'message': msg,
            #     'user_id': Config.superuser
            # })
            await Bot_me.call_api(
                'send_group_msg', **{
                    'message': msg,
                    'group_id': Config.test_group
                })
    except:
        logger.error("定时任务pr失败")
コード例 #14
0
def run(*args: Any, **kwargs: Any) -> None:
    """
    :说明:

      启动 NoneBot,即运行全局 Driver 对象。

    :参数:

      * ``*args``: 传入 Driver.run 的位置参数
      * ``**kwargs``: 传入 Driver.run 的命名参数

    :返回:

      - ``None``

    :用法:

    .. code-block:: python

        nonebot.run(host="127.0.0.1", port=8080)

    """
    logger.success("Running NoneBot...")
    get_driver().run(*args, **kwargs)
コード例 #15
0
async def handle_pu(bot: Bot, event: Event, state: T_State):
    args = str(event.get_message()).strip()
    logger.success(f'puser: {event}\n')
    if args:
        state["user_id"] = args
コード例 #16
0
ファイル: __init__.py プロジェクト: Kagarise/qqbot
async def handle(bot: Bot, event: Event, state: T_State):
    state['message'] = str(event.get_message()).strip()
    logger.success(f'test: {event}\n')
    await test.send(
        f"test...{state['message']}\n test...{state['message']}\n  test...{state['message']}"
    )
コード例 #17
0
ファイル: __init__.py プロジェクト: Algieba-dean/qqbot
async def dog_handle(bot: Bot, event: Event):
    logger.success(f'dog: {event}\n')
    img_url = await get_dog_url()
    await dog.send(Message(f'[CQ:image,file={img_url}]'))
コード例 #18
0
ファイル: __init__.py プロジェクト: Algieba-dean/qqbot
async def cat_handle(bot: Bot, event: Event):
    logger.success(f'cat: {event}\n')
    img_url = await get_cat_url()
    await cat.send(Message(f'[CQ:image,file={img_url}]'))
コード例 #19
0
ファイル: util.py プロジェクト: Whitesad/ChristinaQQbot
def daily_setu():
    logger.success('daily setu进程开启!')
    time.sleep(5)
    daily_setu_time = nonebot.get_driver().config.daily_setu_time

    while True:
        try:
            now_time = get_beijing_time()
            send_time = datetime.datetime.strptime(
                str(now_time.date()) + daily_setu_time, '%Y-%m-%d%H:%M')
            prepare_time = send_time - datetime.timedelta(minutes=10)
            logger.info('daily setu | 北京时间|{beijing_time}'.format(
                beijing_time=str(now_time)))
            # 达到时间,开始准备涩图
            if (prepare_time < now_time < send_time):
                try:
                    logger.info('达到时间,开始准备涩图')
                    bots = get_bots()
                    bot = None
                    for id in bots.keys():
                        bot = bots[id]

                    setu_list = get_daily_setu()
                    if (len(setu_list) == 0):
                        # 出现任何异常则跳过准备时间的十分钟
                        time.sleep(660)
                        raise Exception('今日排行版没有符合条件的涩图')
                        # 访问涩图排行版正确,但是没有符合条件的涩图
                    logger.info('成功获取每日涩图列表!')
                    for setu in setu_list:
                        setu.pic_file = save_setu(setu.url)
                    logger.info('成功缓存每日涩图!')

                    # 获得开启日常涩图功能的群号
                    daily_setu_group = nonebot.get_driver().config.daily_setu
                    while True:
                        try:
                            now_time = get_beijing_time()
                            logger.info('每日涩图等待发送...')
                            # 达到发送时间,发送
                            if (now_time > send_time):
                                for group in daily_setu_group.keys():
                                    asyncio.run(
                                        send_daily_setu(
                                            daily_setu_group[group], bot,
                                            setu_list))
                                logger.info('每日涩图发送完成!')
                                break
                            time.sleep(30)
                        except Exception as e:
                            pass

                except Exception as e:
                    for group in daily_setu_group.keys():
                        asyncio.run(
                            bot.send_group_msg(
                                group_id=daily_setu_group[group],
                                message=str(e.args[0])))
                    logger.error(e.args[0])
                finally:
                    for setu in setu_list:
                        try:
                            os.remove(setu.pic_file)
                        except Exception:
                            pass
                    logger.info('删除每日涩图成功!')
                # delete pic
        except Exception as e:
            logger.error(e.args[0])

        time.sleep(60)
コード例 #20
0
async def handle_ps(bot: Bot, event: Event, state: T_State):
    args = str(event.get_message()).strip()
    logger.success(f'psearch: {event}\n')
    if args:
        state["key"] = args
コード例 #21
0
async def handle_pr(bot: Bot, event: Event, state: T_State):
    args = str(event.get_message()).strip()
    logger.success(f'prank: {event}\n')
    if args:
        state["rank"] = args
コード例 #22
0
ファイル: __init__.py プロジェクト: Kagarise/qqbot
async def handle(bot: Bot, event: Event):
    data = event.dict()
    logger.success(f'poke: {data}\n')
    if data['sub_type'] == 'poke':
        response = await get_poke_response()
        await poke.send(response)
コード例 #23
0
ファイル: __init__.py プロジェクト: Kagarise/qqbot
async def handle(bot: Bot, event: Event, state: T_State):
    args = str(event.get_message()).strip()
    logger.success(f'yourls: {event}\n')
    if args:
        state["yourls"] = args
コード例 #24
0
    def __init__(self) -> None:
        self.level: Union[int, str] = "DEBUG"

    def __call__(self, record):
        module_name: str = record["name"]
        module = sys.modules.get(module_name)
        if module:
            module_name = getattr(module, "__module_name__", module_name)
        record["name"] = module_name.split(".")[0]
        levelno = (logger.level(self.level).no
                   if isinstance(self.level, str) else self.level)
        nonebot_warning_level = logger.level("WARNING").no
        return (record["level"].no >= levelno if record["name"] != "nonebot"
                else record["level"].no >= nonebot_warning_level)


if plugin_config.bison_filter_log:
    logger.remove()
    default_filter = Filter()
    logger.add(
        sys.stdout,
        colorize=True,
        diagnose=False,
        filter=default_filter,
        format=default_format,
    )
    config = nonebot.get_driver().config
    logger.success("Muted info & success from nonebot")
    default_filter.level = (("DEBUG" if config.debug else "INFO")
                            if config.log_level is None else config.log_level)
コード例 #25
0
ファイル: __init__.py プロジェクト: Kagarise/qqbot
async def handle(bot: Bot, event: Event):
    logger.success(f'setu: {event}\n')
    img_url = await get_setu_url()
    await setu.send(Message(f'[CQ:image,file={img_url}]'))
コード例 #26
0
ファイル: __init__.py プロジェクト: Kagarise/qqbot
async def handle(bot: Bot, event: Event, state: T_State):
    logger.success(f'hand_painting: {event}\n')
コード例 #27
0
ファイル: util.py プロジェクト: Whitesad/ChristinaQQbot
def rss_db_init():
    if (not os.path.exists('./db')):
        os.mkdir('./db')
    # 建立数据库
    connect = sqlite3.connect('./db/rss.db')
    cursor = connect.cursor()

    tables = cursor.execute(
        'SELECT name FROM sqlite_master WHERE type="table" ORDER BY name;')
    exist_subscribe, exist_items, exist_rss = False, False, False
    for table in tables:
        if (table[0] == 'subscribe'):
            exist_subscribe = True
        elif (table[0] == 'items'):
            exist_items = True
        elif (table[0] == 'rss'):
            exist_rss = True
    if (not exist_subscribe):
        # 建立订阅信息表
        # rss_name:rss的名称,rss_url:订阅链接,subscriber:订阅者,subscriber_group_id:在哪个群里订阅
        cursor.execute('''
        CREATE TABLE subscribe(
            ID INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL ,
            subscriber INT NOT NULL,
            subscriber_group_id INT NOT NULL,
            subscribe_type VARCHAR(32) NOT NULL,
            rss_id INT NOT NULL,
            rss_name TEXT NOT NULL
            );
        ''')

        logger.success('建立subscribe表')
        connect.commit()
    if (not exist_rss):
        # 建立订阅信息表
        # rss_name:rss的名称,rss_url:订阅链接,subscriber:订阅者,subscriber_group_id:在哪个群里订阅
        cursor.execute('''
        CREATE TABLE rss(
            rss_id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL ,
            rss_url TEXT NOT NULL,
            describe TEXT NOT NULL,
            activate BOOLEAN DEFAULT 1
            );
        ''')
        logger.success('建立rss表')
        connect.commit()
    if (not exist_items):
        # 建立订阅信息items表
        # rss_name:订阅名称,items:rss的item
        cursor.execute('''
        CREATE TABLE items(
            item_id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,
            rss_id INT NOT NULL,
            title TEXT NOT NULL,
            link TEXT NOT NULL
            );
        ''')
        logger.success('建立items表')
        connect.commit()

    cursor.close()
    connect.close()