加群配置使用前端指令完成,方便管理。
This commit is contained in:
@@ -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"
|
||||
|
||||
|
||||
# 主函数
|
||||
|
||||
12
robot.py
12
robot.py
@@ -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) # 闲聊
|
||||
|
||||
@@ -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
57
task/message_task_json.py
Normal 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要去游泳'))
|
||||
@@ -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()
|
||||
|
||||
Reference in New Issue
Block a user