加群配置使用前端指令完成,方便管理。
This commit is contained in:
@@ -1,7 +1,12 @@
|
|||||||
import redis
|
import redis
|
||||||
|
|
||||||
# 创建 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 中存储群组映射的前缀
|
# Redis 中存储群组映射的前缀
|
||||||
mapping_prefix = "group:group_mapping:"
|
mapping_prefix = "group:group_mapping:"
|
||||||
@@ -9,71 +14,93 @@ mapping_prefix = "group:group_mapping:"
|
|||||||
|
|
||||||
# 添加群组ID到指定key
|
# 添加群组ID到指定key
|
||||||
def add_mapping(key, group_id):
|
def add_mapping(key, group_id):
|
||||||
|
try:
|
||||||
if r.sismember(mapping_prefix + key, group_id):
|
if r.sismember(mapping_prefix + key, group_id):
|
||||||
print(f"Group ID {group_id} already exists for key {key}.")
|
return f"Group ID {group_id} already exists for key {key}."
|
||||||
else:
|
else:
|
||||||
r.sadd(mapping_prefix + key, group_id)
|
r.sadd(mapping_prefix + key, group_id)
|
||||||
print(f"Added: {key} -> {group_id}")
|
return f"Added: {key} -> {group_id}"
|
||||||
|
except redis.RedisError as e:
|
||||||
|
return f"操作失败: {e}"
|
||||||
|
|
||||||
|
|
||||||
# 删除指定key下的某个群组ID
|
# 删除指定key下的某个群组ID
|
||||||
def del_mapping(key, group_id):
|
def del_mapping(key, group_id):
|
||||||
|
try:
|
||||||
if r.sismember(mapping_prefix + key, group_id):
|
if r.sismember(mapping_prefix + key, group_id):
|
||||||
r.srem(mapping_prefix + key, group_id)
|
r.srem(mapping_prefix + key, group_id)
|
||||||
print(f"Deleted: {key} -> {group_id}")
|
return f"Deleted: {key} -> {group_id}"
|
||||||
else:
|
else:
|
||||||
print(f"Group ID {group_id} not found for key {key}.")
|
return f"Group ID {group_id} not found for key {key}."
|
||||||
|
except redis.RedisError as e:
|
||||||
|
return f"操作失败: {e}"
|
||||||
|
|
||||||
|
|
||||||
# 获取指定key下的所有群组ID
|
# 获取指定key下的所有群组ID
|
||||||
def get_group_ids(key):
|
def get_group_ids(key):
|
||||||
|
try:
|
||||||
group_ids = r.smembers(mapping_prefix + key)
|
group_ids = r.smembers(mapping_prefix + key)
|
||||||
if group_ids:
|
if group_ids:
|
||||||
print(f"Group IDs for {key}: {', '.join(group_ids)}")
|
return f"Group IDs for {key}: {', '.join(group_ids)}"
|
||||||
else:
|
else:
|
||||||
print(f"Key '{key}' has no associated group IDs.")
|
return f"Key '{key}' has no associated group IDs."
|
||||||
|
except redis.RedisError as e:
|
||||||
|
return f"操作失败: {e}"
|
||||||
|
|
||||||
|
|
||||||
# 获取指定key的第一个群组ID
|
# 获取指定key的第一个群组ID
|
||||||
def get_first_group_id(key):
|
def get_first_group_id(key):
|
||||||
|
try:
|
||||||
group_ids = r.smembers(mapping_prefix + key)
|
group_ids = r.smembers(mapping_prefix + key)
|
||||||
if group_ids:
|
if group_ids:
|
||||||
first_group_id = next(iter(group_ids)) # 获取集合中的第一个元素
|
first_group_id = next(iter(group_ids)) # 获取集合中的第一个元素
|
||||||
print(f"First Group ID for {key}: {first_group_id}")
|
return f"First Group ID for {key}: {first_group_id}"
|
||||||
return first_group_id
|
return first_group_id
|
||||||
else:
|
else:
|
||||||
print(f"Key '{key}' has no associated group IDs.")
|
return f"Key '{key}' has no associated group IDs."
|
||||||
|
except redis.RedisError as e:
|
||||||
|
return f"操作失败: {e}"
|
||||||
|
|
||||||
|
|
||||||
# 处理命令行输入
|
# 处理命令行输入
|
||||||
def process_command(command):
|
def process_command(command):
|
||||||
command_parts = command.split()
|
command_parts = command.split()
|
||||||
if len(command_parts) == 0:
|
if len(command_parts) == 0:
|
||||||
print("Invalid command.")
|
return "Invalid command."
|
||||||
return
|
|
||||||
|
|
||||||
cmd = command_parts[0]
|
cmd = command_parts[0]
|
||||||
|
|
||||||
if cmd == "add" and len(command_parts) == 3:
|
if cmd == "add" and len(command_parts) == 3:
|
||||||
key = command_parts[1]
|
key = command_parts[1]
|
||||||
group_id = command_parts[2]
|
group_id = command_parts[2]
|
||||||
add_mapping(key, group_id)
|
return add_mapping(key, group_id)
|
||||||
|
|
||||||
elif cmd == "del" and len(command_parts) == 3:
|
elif cmd == "del" and len(command_parts) == 3:
|
||||||
key = command_parts[1]
|
key = command_parts[1]
|
||||||
group_id = command_parts[2]
|
group_id = command_parts[2]
|
||||||
del_mapping(key, group_id)
|
return del_mapping(key, group_id)
|
||||||
|
|
||||||
elif cmd == "get" and len(command_parts) == 2:
|
elif cmd == "get" and len(command_parts) == 2:
|
||||||
key = command_parts[1]
|
key = command_parts[1]
|
||||||
get_group_ids(key)
|
return get_group_ids(key)
|
||||||
|
|
||||||
elif cmd == "get_first" and len(command_parts) == 2:
|
elif cmd == "get_first" and len(command_parts) == 2:
|
||||||
key = command_parts[1]
|
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:
|
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 base.func_claude import Claude
|
||||||
from configuration import Config
|
from configuration import Config
|
||||||
from constants import ChatType
|
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 group_auto.group_member_change import GroupMemberChange
|
||||||
from robot_cmd.robot_command import GroupBotManager
|
from robot_cmd.robot_command import GroupBotManager
|
||||||
from job_mgmt import Job
|
from job_mgmt import Job
|
||||||
@@ -267,6 +267,16 @@ class Robot(Job):
|
|||||||
self.generateSehuatangPdf()
|
self.generateSehuatangPdf()
|
||||||
if msg.content == 'GROUP_LIST':
|
if msg.content == 'GROUP_LIST':
|
||||||
self.sendTextMsg(self.gbm.get_group_list(), msg.sender)
|
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)
|
self.sendTextMsg(f"指令:{msg.content} 已执行", msg.sender)
|
||||||
else:
|
else:
|
||||||
self.toChitchat(msg) # 闲聊
|
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 pymysql
|
||||||
import dateparser
|
|
||||||
import schedule
|
import schedule
|
||||||
|
import json
|
||||||
|
from task.message_task_json import message_task_json
|
||||||
|
|
||||||
# 配置数据库连接
|
# 配置数据库连接
|
||||||
db_config = {
|
db_config = {
|
||||||
@@ -17,12 +18,6 @@ def get_db_connection():
|
|||||||
return 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):
|
def insert_task_to_db(description, reminder_time, task_type):
|
||||||
connection = get_db_connection()
|
connection = get_db_connection()
|
||||||
@@ -69,14 +64,20 @@ def schedule_recurring_task(reminder_time, task_id):
|
|||||||
|
|
||||||
# 处理用户输入
|
# 处理用户输入
|
||||||
def handle_user_input(user_input, task_type):
|
def handle_user_input(user_input, task_type):
|
||||||
parsed_time = parse_natural_language_time(user_input)
|
task_json = message_task_json(user_input)
|
||||||
print(parsed_time)
|
print(task_json)
|
||||||
if parsed_time:
|
if task_json:
|
||||||
formatted_time = parsed_time.strftime('%H:%M')
|
|
||||||
print(f"Scheduling task for {formatted_time}")
|
# 将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
|
# 获取插入的任务ID
|
||||||
connection = get_db_connection()
|
connection = get_db_connection()
|
||||||
@@ -88,9 +89,9 @@ def handle_user_input(user_input, task_type):
|
|||||||
connection.close()
|
connection.close()
|
||||||
# 根据任务类型调度任务
|
# 根据任务类型调度任务
|
||||||
if task_type == 'single':
|
if task_type == 'single':
|
||||||
schedule_single_task(formatted_time, task_id)
|
schedule_single_task(reminder_time, task_id)
|
||||||
elif task_type == 'recurring':
|
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__":
|
if __name__ == "__main__":
|
||||||
# main()
|
main()
|
||||||
parsed_time = dateparser.parse('每天上午9:00提醒我开会', settings={'TIMEZONE': 'Asia/Shanghai'},)
|
|
||||||
print(parsed_time)
|
|
||||||
|
|||||||
Reference in New Issue
Block a user