Merge pull request #475 from RockChinQ/actively-delay

[Feat] 支持设置消息回复强制延迟以降低风控概率
This commit is contained in:
Rock Chin
2023-05-18 20:15:52 +08:00
committed by GitHub
3 changed files with 35 additions and 0 deletions

View File

@@ -241,6 +241,14 @@ process_message_timeout = 30
# 回复消息时是否显示[GPT]前缀
show_prefix = False
# 回复前的强制延迟时间,降低机器人被腾讯风控概率
# *此机制对命令和消息、私聊及群聊均生效
# 每次处理时从以下的范围取一个随机秒数,
# 当此次消息处理时间低于此秒数时,将会强制延迟至此秒数
# 例如:[1.5, 3]则每次处理时会随机取一个1.5-3秒的随机数若处理时间低于此随机数则强制延迟至此随机秒数
# 若您不需要此功能请将force_delay_range设置为[0, 0]
force_delay_range = [1.5, 3]
# 应用长消息处理策略的阈值
# 当回复消息长度超过此值时,将使用长消息处理策略
blob_message_threshold = 256

View File

@@ -67,6 +67,10 @@
"include_image_description": true,
"process_message_timeout": 30,
"show_prefix": false,
"force_delay_range": [
1.5,
3
],
"blob_message_threshold": 256,
"blob_message_strategy": "forward",
"wait_last_done": true,

View File

@@ -80,6 +80,10 @@ def process_message(launcher_type: str, launcher_id: int, text_message: str, mes
text_message = text_message.strip()
# 为强制消息延迟计时
start_time = time.time()
# 处理消息
try:
@@ -168,4 +172,23 @@ def process_message(launcher_type: str, launcher_id: int, text_message: str, mes
finally:
pkg.openai.session.get_session(session_name).release_response_lock()
# 检查延迟时间
if config.force_delay_range[1] == 0:
delay_time = 0
else:
import random
# 从延迟范围中随机取一个值(浮点)
rdm = random.uniform(config.force_delay_range[0], config.force_delay_range[1])
spent = time.time() - start_time
# 如果花费时间小于延迟时间,则延迟
delay_time = rdm - spent if rdm - spent > 0 else 0
# 延迟
if delay_time > 0:
logging.info("[风控] 强制延迟{:.2f}秒(如需关闭请到config.py修改force_delay_range字段)".format(delay_time))
time.sleep(delay_time)
return MessageChain(reply)