mirror of
https://github.com/ClovertaTheTrilobita/SanYeCao-Nonebot.git
synced 2026-04-01 22:04:51 +00:00
新增用户待办功能
This commit is contained in:
parent
bbb4c4f639
commit
024a1d3f76
5 changed files with 206 additions and 1 deletions
|
|
@ -19,3 +19,4 @@ requests~=2.31.0
|
|||
pillow
|
||||
pyyaml
|
||||
qrcode
|
||||
lazy_object_proxy
|
||||
|
|
|
|||
29
src/my_sqlite/data_init/todo_init.py
Normal file
29
src/my_sqlite/data_init/todo_init.py
Normal 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)
|
||||
);
|
||||
""")
|
||||
|
||||
116
src/my_sqlite/todo_by_sqlite.py
Normal file
116
src/my_sqlite/todo_by_sqlite.py
Normal 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'))
|
||||
|
|
@ -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
59
src/qq_plugins/to_do.py
Normal 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("没有找到这条待办哦,请检查您的输入是否正确.")
|
||||
Loading…
Reference in a new issue