diff --git a/filter.py b/filter.py index 05e8443b..fc9045b2 100644 --- a/filter.py +++ b/filter.py @@ -10,5 +10,13 @@ def apply_filters(ctx_msg): return True -def add_filter(func, priority=0): +def add_filter(func, priority=10): _filters.append((priority, func)) + + +def as_filter(priority=10): + def decorator(func): + add_filter(func, priority) + return func + + return decorator diff --git a/filters/command_dispatcher_0.py b/filters/command_dispatcher_0.py index d89bf8d5..26bddac8 100644 --- a/filters/command_dispatcher_0.py +++ b/filters/command_dispatcher_0.py @@ -4,7 +4,7 @@ import importlib import interactive from config import config -from filter import add_filter +from filter import as_filter from command import CommandNotExistsError, CommandScopeError, CommandPermissionError from little_shit import * from commands import core @@ -29,8 +29,8 @@ def _load_commands(): print('Failed to load command module "' + mod_name + '.py".', file=sys.stderr) +@as_filter(priority=0) def _dispatch_command(ctx_msg): - # noinspection PyBroadException try: text = ctx_msg.get('text', '').lstrip() if not text: @@ -78,4 +78,3 @@ def _dispatch_command(ctx_msg): _load_commands() -add_filter(_dispatch_command, 0) diff --git a/filters/how_to_use_1.py b/filters/how_to_use_1.py index 887dae24..43e18acc 100644 --- a/filters/how_to_use_1.py +++ b/filters/how_to_use_1.py @@ -1,7 +1,8 @@ -from filter import add_filter +from filter import as_filter from commands import core +@as_filter(priority=1) def _print_help_message(ctx_msg): a = ['help', '怎么用', '怎么用啊', '你好', '你好啊', '帮助', '用法', '使用帮助', '使用指南', '使用说明', '使用方法', @@ -11,6 +12,3 @@ def _print_help_message(ctx_msg): core.help('', ctx_msg) return False return True - - -add_filter(_print_help_message, priority=1) diff --git a/filters/intercept_some_message_formats_100.py b/filters/intercept_some_message_formats_100.py index d9699b5c..0f165644 100644 --- a/filters/intercept_some_message_formats_100.py +++ b/filters/intercept_some_message_formats_100.py @@ -2,9 +2,10 @@ This filter intercepts messages that contains content not allowed and move text content to 'text' field. """ -from filter import add_filter +from filter import as_filter +@as_filter(priority=100) def _filter(ctx_msg): if ctx_msg.get('via') == 'wx': msg_format = ctx_msg.get('format') @@ -17,6 +18,3 @@ def _filter(ctx_msg): elif ctx_msg.get('via') == 'qq': ctx_msg['text'] = ctx_msg.get('content') return True - - -add_filter(_filter, 100) diff --git a/filters/message_logger_1000.py b/filters/message_logger_1000.py index 4c678156..642dfd26 100644 --- a/filters/message_logger_1000.py +++ b/filters/message_logger_1000.py @@ -2,14 +2,12 @@ This filter just log message to stdout. """ -from filter import add_filter +from filter import as_filter +@as_filter(priority=1000) def _log_message(ctx_msg): print(ctx_msg.get('sender', '') + (('@' + ctx_msg.get('group')) if ctx_msg.get('type') == 'group_message' else '') + (('@' + ctx_msg.get('discuss')) if ctx_msg.get('type') == 'discuss_message' else '') + ': ' + ctx_msg.get('content')) - - -add_filter(_log_message, 1000) diff --git a/filters/speech_recognition_90.py b/filters/speech_recognition_90.py index 8c6b0761..9b45423c 100644 --- a/filters/speech_recognition_90.py +++ b/filters/speech_recognition_90.py @@ -10,7 +10,7 @@ import requests from pydub import AudioSegment import speech_recognition as sr -from filter import add_filter +from filter import as_filter from commands import core @@ -55,6 +55,7 @@ def _recognize_bing(wav_path, api_key, language='zh-CN'): return None +@as_filter(priority=90) def _filter(ctx_msg): if ctx_msg.get('via') == 'wx' and ctx_msg.get('format') == 'media' and ctx_msg.get('media_type') == 'voice': m = re.match('\[语音\]\(([/_A-Za-z0-9]+\.mp3)\)', ctx_msg.get('content')) @@ -83,6 +84,3 @@ def _filter(ctx_msg): reply = '抱歉哦,没有识别出你说的是什么' core.echo(reply, ctx_msg) os.remove(wav_path) - - -add_filter(_filter, 90) diff --git a/filters/split_at_xiaokai_50.py b/filters/split_at_xiaokai_50.py index 37085e7b..395af040 100644 --- a/filters/split_at_xiaokai_50.py +++ b/filters/split_at_xiaokai_50.py @@ -2,9 +2,10 @@ This filter intercepts messages not intended to the bot and removes the beginning "@xxx". """ -from filter import add_filter +from filter import as_filter +@as_filter(priority=50) def _split_at_xiaokai(ctx_msg): if ctx_msg.get('type') == 'group_message' or ctx_msg.get('type') == 'discuss_message': text = ctx_msg.get('text', '') @@ -21,6 +22,3 @@ def _split_at_xiaokai(ctx_msg): return False ctx_msg['text'] = text.lstrip() return True - - -add_filter(_split_at_xiaokai, priority=50)