加群配置使用前端指令完成,方便管理。

This commit is contained in:
liuwei
2025-02-19 14:51:52 +08:00
parent 5019d86af3
commit 3083ed948f
5 changed files with 142 additions and 69 deletions

View File

@@ -1,7 +1,12 @@
import redis
# 创建 Redis 连接
r = redis.StrictRedis(host='192.168.2.32', port=6379, db=0, decode_responses=True)
try:
r = redis.StrictRedis(host='192.168.2.32', port=6379, db=0, decode_responses=True)
r.ping() # 检查连接是否正常
except redis.ConnectionError as e:
print(f"Redis连接失败: {e}")
exit(1)
# Redis 中存储群组映射的前缀
mapping_prefix = "group:group_mapping:"
@@ -9,71 +14,93 @@ mapping_prefix = "group:group_mapping:"
# 添加群组ID到指定key
def add_mapping(key, group_id):
if r.sismember(mapping_prefix + key, group_id):
print(f"Group ID {group_id} already exists for key {key}.")
else:
r.sadd(mapping_prefix + key, group_id)
print(f"Added: {key} -> {group_id}")
try:
if r.sismember(mapping_prefix + key, group_id):
return f"Group ID {group_id} already exists for key {key}."
else:
r.sadd(mapping_prefix + key, group_id)
return f"Added: {key} -> {group_id}"
except redis.RedisError as e:
return f"操作失败: {e}"
# 删除指定key下的某个群组ID
def del_mapping(key, group_id):
if r.sismember(mapping_prefix + key, group_id):
r.srem(mapping_prefix + key, group_id)
print(f"Deleted: {key} -> {group_id}")
else:
print(f"Group ID {group_id} not found for key {key}.")
try:
if r.sismember(mapping_prefix + key, group_id):
r.srem(mapping_prefix + key, group_id)
return f"Deleted: {key} -> {group_id}"
else:
return f"Group ID {group_id} not found for key {key}."
except redis.RedisError as e:
return f"操作失败: {e}"
# 获取指定key下的所有群组ID
def get_group_ids(key):
group_ids = r.smembers(mapping_prefix + key)
if group_ids:
print(f"Group IDs for {key}: {', '.join(group_ids)}")
else:
print(f"Key '{key}' has no associated group IDs.")
try:
group_ids = r.smembers(mapping_prefix + key)
if group_ids:
return f"Group IDs for {key}: {', '.join(group_ids)}"
else:
return f"Key '{key}' has no associated group IDs."
except redis.RedisError as e:
return f"操作失败: {e}"
# 获取指定key的第一个群组ID
def get_first_group_id(key):
group_ids = r.smembers(mapping_prefix + key)
if group_ids:
first_group_id = next(iter(group_ids)) # 获取集合中的第一个元素
print(f"First Group ID for {key}: {first_group_id}")
return first_group_id
else:
print(f"Key '{key}' has no associated group IDs.")
try:
group_ids = r.smembers(mapping_prefix + key)
if group_ids:
first_group_id = next(iter(group_ids)) # 获取集合中的第一个元素
return f"First Group ID for {key}: {first_group_id}"
return first_group_id
else:
return f"Key '{key}' has no associated group IDs."
except redis.RedisError as e:
return f"操作失败: {e}"
# 处理命令行输入
def process_command(command):
command_parts = command.split()
if len(command_parts) == 0:
print("Invalid command.")
return
return "Invalid command."
cmd = command_parts[0]
if cmd == "add" and len(command_parts) == 3:
key = command_parts[1]
group_id = command_parts[2]
add_mapping(key, group_id)
return add_mapping(key, group_id)
elif cmd == "del" and len(command_parts) == 3:
key = command_parts[1]
group_id = command_parts[2]
del_mapping(key, group_id)
return del_mapping(key, group_id)
elif cmd == "get" and len(command_parts) == 2:
key = command_parts[1]
get_group_ids(key)
return get_group_ids(key)
elif cmd == "get_first" and len(command_parts) == 2:
key = command_parts[1]
get_first_group_id(key)
return get_first_group_id(key)
elif cmd == "help":
commands = (
"命令列表:\n"
"'add key group_id' - 添加群组ID\n"
"'del key group_id' - 删除群组ID\n"
"'get key' - 获取所有群组ID\n"
"'get_first key' - 获取第一个群组ID\n"
"'exit' - 退出系统"
)
return commands
else:
print("Unknown command or wrong number of arguments.")
return "Unknown command or wrong number of arguments. please enter : #加群配置|help"
# 主函数

View File

@@ -24,7 +24,7 @@ from base.func_xinghuo_web import XinghuoWeb
from base.func_claude import Claude
from configuration import Config
from constants import ChatType
from group_auto.group_auto_invite import get_first_group_id
from group_auto.group_auto_invite import get_first_group_id, process_command
from group_auto.group_member_change import GroupMemberChange
from robot_cmd.robot_command import GroupBotManager
from job_mgmt import Job
@@ -267,6 +267,16 @@ class Robot(Job):
self.generateSehuatangPdf()
if msg.content == 'GROUP_LIST':
self.sendTextMsg(self.gbm.get_group_list(), msg.sender)
if msg.content.startswith('#加群配置'):
# msg_content = "# 加群配置|add 原生鱼 xxx@room"
parts = msg.content.split('|')
resp = ""
if len(parts) > 1:
after_pipe = parts[1]
resp = process_command(after_pipe)
else:
resp = process_command("help")
self.sendTextMsg(resp, msg.sender)
self.sendTextMsg(f"指令:{msg.content} 已执行", msg.sender)
else:
self.toChitchat(msg) # 闲聊

View File

@@ -1,20 +0,0 @@
import parsedatetime as pdt
from datetime import datetime
# 初始化 Calendar 对象
cal = pdt.Calendar()
def parse_natural_language_time(text):
time_struct, parse_status = cal.parse(text)
if parse_status == 1:
# 将解析后的时间结构转换为 datetime 对象
parsed_time = datetime(*time_struct[:6])
print(f"Parsed time: {parsed_time}")
return parsed_time
else:
print(f"Could not parse time for: {text}")
return None
# 示例输入
test_input = "明天上午9点开会"
parsed_time = parse_natural_language_time(test_input)

57
task/message_task_json.py Normal file
View File

@@ -0,0 +1,57 @@
import requests
import json
# 解析JSON
def extract_content(data_string):
try:
data = json.loads(data_string)
# 提取content字段
content = data["choices"][0]["message"].get("content", "")
return content
except json.JSONDecodeError:
print("Invalid JSON")
return None
def message_task_json(content):
# 设置Authorization和URL
authorization = "46a5674a-e978-491b-a810-5d54605f2c36" # 请替换为真实的Authorization token
url = 'http://127.0.0.1:8080/v1/chat/completions'
prompt = ('你是一个个人助理请根据用户给的任务要求及时安排日程。需要你理解用户的自然语言并即时反馈在什么时候加入了日程提醒。提醒时间为什么时候。请只返回json格式的内容用于提取数据。格式如下{\"task\": \"洗澡\", \"reminder_time\":\"00 20 * * *\", \"reason\": \"用户今天晚上八点要洗澡\"}')
# 设置请求的payload
data = {
# "stream": True,
"model": "windsurf/gpt4o",
"messages": [
{
"role": "system",
"content": f"{prompt}"
},
{
"role": "user",
"content": f"{content}"
}
]
}
# 设置请求头
headers = {
"Content-Type": "application/json; charset=utf-8",
"Authorization": authorization
}
# 发送POST请求
response = requests.post(url, headers=headers, data=json.dumps(data), )
response.encoding = 'utf-8'
# 输出响应内容
print(response.status_code)
print(response.text)
return extract_content(response.text)
if __name__ == '__main__':
print(message_task_json('提醒我明天晚上9点20要去游泳'))

View File

@@ -1,6 +1,7 @@
import pymysql
import dateparser
import schedule
import json
from task.message_task_json import message_task_json
# 配置数据库连接
db_config = {
@@ -17,12 +18,6 @@ def get_db_connection():
return connection
# 解析自然语言时间
def parse_natural_language_time(text):
parsed_time = dateparser.parse(text)
return parsed_time
# 插入任务到数据库
def insert_task_to_db(description, reminder_time, task_type):
connection = get_db_connection()
@@ -69,14 +64,20 @@ def schedule_recurring_task(reminder_time, task_id):
# 处理用户输入
def handle_user_input(user_input, task_type):
parsed_time = parse_natural_language_time(user_input)
print(parsed_time)
if parsed_time:
formatted_time = parsed_time.strftime('%H:%M')
print(f"Scheduling task for {formatted_time}")
task_json = message_task_json(user_input)
print(task_json)
if task_json:
# 将JSON字符串解析为字典
data = json.loads(task_json)
# 提取内容
task = data["task"]
reminder_time = data["reminder_time"]
reason = data["reason"]
# 将任务存入数据库
insert_task_to_db(user_input, formatted_time, task_type)
insert_task_to_db(user_input, reminder_time, task_type)
# 获取插入的任务ID
connection = get_db_connection()
@@ -88,9 +89,9 @@ def handle_user_input(user_input, task_type):
connection.close()
# 根据任务类型调度任务
if task_type == 'single':
schedule_single_task(formatted_time, task_id)
schedule_single_task(reminder_time, task_id)
elif task_type == 'recurring':
schedule_recurring_task(formatted_time, task_id)
schedule_recurring_task(reminder_time, task_id)
# 查询指定类型的任务
@@ -152,6 +153,4 @@ def main():
if __name__ == "__main__":
# main()
parsed_time = dateparser.parse('每天上午9:00提醒我开会', settings={'TIMEZONE': 'Asia/Shanghai'},)
print(parsed_time)
main()