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)
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)
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"]}]' ))
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)
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)
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)
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失败")
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失败")
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)
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)
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失败")
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失败")
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失败")
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)
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
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']}" )
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}]'))
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}]'))
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)
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
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
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)
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
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)
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}]'))
async def handle(bot: Bot, event: Event, state: T_State): logger.success(f'hand_painting: {event}\n')
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()