新增用户待办功能

This commit is contained in:
ClovertaTheTrilobita 2025-01-15 17:35:34 +08:00
parent bbb4c4f639
commit 024a1d3f76
5 changed files with 206 additions and 1 deletions

View file

@ -19,3 +19,4 @@ requests~=2.31.0
pillow
pyyaml
qrcode
lazy_object_proxy

View file

@ -0,0 +1,29 @@
import sqlite3
# 连接到数据库,如果不存在则创建
conn = sqlite3.connect('chat_bot.db')
# 创建游标
c = conn.cursor()
#
c.execute("""DROP TABLE IF EXISTS user_todo_list; """)
c.execute("""DROP TABLE IF EXISTS user_list; """)
# 创建表
c.execute("""
CREATE TABLE user_list (
user_id VARCHAR(100) PRIMARY KEY
);
""")
print("user_list created")
c.execute("""
CREATE TABLE user_todo_list (
id INTEGER PRIMARY KEY AUTOINCREMENT,
user_id VARCHAR(100),
content TEXT,
FOREIGN KEY (user_id) REFERENCES user_list(user_id)
);
""")

View file

@ -0,0 +1,116 @@
from sqlalchemy import Column, Integer, String, Date, create_engine, text
from sqlalchemy.orm import declarative_base, sessionmaker
import sqlite3
class SqliteSqlalchemy(object):
def __init__(self):
# 创建Sqlite连接引擎
engine = create_engine('sqlite:///./chat_bot.db', echo=True)
# 创建Sqlite的session连接对象
self.session = sessionmaker(bind=engine)()
def user_exists(member_openid):
"""
查询数据库中是否包括此用户
:param member_openid:
:return: 若包含用户返回True否则返回False
"""
session = SqliteSqlalchemy().session
result = session.execute(selectUserId,
{'member_openid': member_openid}).fetchone()
session.close()
if result is None:
return False
else:
return True
def insert_user_todo_list(member_openid, content):
"""
插入用户待办
:param member_openid:
:param content: 待办内容(str)
:return:
"""
session = SqliteSqlalchemy().session
if not user_exists(member_openid):
session.execute(insertUserId, {'member_openid': member_openid})
session.execute(insertUserTodo, {'member_openid': member_openid, 'content': content})
session.commit()
session.close()
def get_user_todo_list(member_openid):
"""
展示用户所有待办
:param member_openid:
:return: 数据库查询结果(Sequence)
"""
if not user_exists(member_openid):
return False
session = SqliteSqlalchemy().session
result = session.execute(selectUserTodo,
{'member_openid': member_openid}).fetchall()
session.close()
return result
def delete_user_todo(member_openid, del_line_num):
"""
删除某用户指定行数的待办
:param member_openid:
:param del_line_num: 指定的行数(int)
:return:
"""
if not user_exists(member_openid):
return -1
session = SqliteSqlalchemy().session
todo_list_len = session.execute(checkUserTodoLength, {'member_openid': member_openid}).fetchone()
max_length = int(str(todo_list_len).lstrip("(").rstrip(",)"))
if del_line_num > max_length or del_line_num < 1:
return 1
session.execute(deleteUserTodo, {'member_openid': member_openid, 'del_line_num': del_line_num})
session.commit()
session.close()
return 0
# 查找用户
selectUserId = text(
"select * from user_list where user_id = :member_openid")
# 插入数据
insertUserTodo = text(
"INSERT INTO user_todo_list (user_id, content) VALUES (:member_openid, :content)")
# 插入用户id
insertUserId = text("INSERT INTO user_list (user_id) VALUES (:member_openid)")
# 删除特定行的待办
deleteUserTodo = text(
"DELETE FROM user_todo_list WHERE id=(SELECT id FROM (SELECT *, ROW_NUMBER() OVER (ORDER BY id) AS row_number FROM (SELECT * FROM user_todo_list WHERE user_id = :member_openid)) WHERE row_number = :del_line_num)")
# 查询用户待办数
checkUserTodoLength = text(
"SELECT COUNT(*) FROM user_todo_list WHERE user_id = :member_openid")
# 查找用户待办
selectUserTodo = text(
"select content from user_todo_list where user_id = :member_openid")
if __name__ == '__main__':
print('test:')
# insert_user_todo_list('111', '123')
# print(get_user_todo_list('111'))
# del_line_num = '1'
# delete_user_todo('111', int(del_line_num))
# print(get_user_todo_list('111'))

View file

@ -5,7 +5,7 @@ from nonebot import on_message
from nonebot.adapters.qq import Message
from nonebot.adapters import Bot, Event
menu = ['/今日运势','/天气','/图','/点歌','/摸摸头','/群老婆','/今日老婆', '/待办', '/test', '我喜欢你', ""]
menu = ['/今日运势','/天气','/图','/点歌','/摸摸头','/群老婆','/今日老婆', '/待办', '/test', '我喜欢你', "", "/待办查询", "/新建待办", "/删除待办"]
async def check_value_in_menu(event: Event) -> bool:
value = event.get_plaintext().strip().split(" ")
if value[0] in menu:

59
src/qq_plugins/to_do.py Normal file
View file

@ -0,0 +1,59 @@
from pathlib import Path
from debugpy.server.cli import switches
from nonebot.rule import to_me
from nonebot.plugin import on_command
from nonebot.adapters.qq import Message, MessageEvent, MessageSegment
from src.my_sqlite.todo_by_sqlite import *
get_todo_list = on_command("待办查询", rule=to_me(), priority=10, block=True, aliases={"代办", "daiban"})
@get_todo_list.handle()
async def show_todo_list(message: MessageEvent):
"""
查询用户所有的待办
:param message:
:return:
"""
member_openid = message.get_user_id()
result = get_user_todo_list(member_openid)
if result is False:
await get_todo_list.finish("您还未创建任何待办\n尝试使用 /新建待办 创建一份吧")
todo_list = ""
count = 0
print(result)
for each_content in result:
count += 1
todo_content = "\n" + str(count) + "." + str(each_content).lstrip("('").rstrip("',)") + "\n"
todo_list = "".join([todo_list, todo_content])
await get_todo_list.finish("您的待办有如下哦:⭐\n" + todo_list)
insert_todo = on_command("新建待办", rule=to_me(), priority=10, block=True)
@insert_todo.handle()
async def insert_todo_list(message: MessageEvent):
member_openid = message.get_user_id()
content = message.get_plaintext().replace("/新建待办", "").strip(" ")
insert_user_todo_list(member_openid, content)
await insert_todo.finish("成功添加待办,今后也要加油哦(ง •_•)ง")
delete_todo = on_command("删除待办", rule=to_me(), priority=10, block=True)
@delete_todo.handle()
async def del_todo(message: MessageEvent):
member_openid = message.get_user_id()
del_line_str = message.get_plaintext().replace("/删除待办", "").strip(" ")
try:
del_line_num = int(del_line_str)
except:
await delete_todo.finish("请检查您的输入是否正确。\n请输入 /删除待办+数字 哦。")
result = delete_user_todo(member_openid, int(del_line_num))
if result == -1:
await delete_todo.finish("您还未创建过待办哦。")
elif result == 0:
await delete_todo.finish("成功删除第" + str(del_line_num) + "条待办。")
elif result == 1:
await delete_todo.finish("没有找到这条待办哦,请检查您的输入是否正确.")