【Qbot】4.连接mysql/限制使用次数
2023-06-13 09:16:08 时间
该项目计划长期进行维护更新,欢迎star:https://github.com/zstar1003/Qbot
前言
将智能机器人引入Q群的初衷是辅助回答问题,比如有人经常会在群内问一些很基础简单的问题,此时完全可以由智能Ai代为回答。
然而,在实际过程中,发现问答方向往往走偏,无聊群友常常带着猎奇的心态来“调戏"机器人,大幅占用了资源,让正经提问的人抢不到机会。因此,解决方案就是引入mysql数据库进行管理,并对每个账号的使用次数加以限制,暂定为一天使用3次。
数据表设计
数据表设定为4个字段:
- qq_no:用户QQ号,设为主键用以区别
- TextChance:问答功能使用次数
- PicChance:图像生成功能使用次数(预留接口,图像生成后续开发)
- Message:用户发送的所有信息
主要功能
初始化
初始化,即给数据表中的每个用户给予三次文字机会
import pymysql
def init_user():
conn = pymysql.connect(host="localhost", port=3306, user="root", password="123", database="qbot")
cur = conn.cursor()
sql_order = 'UPDATE `group` SET TextChance = 3'
cur.execute(sql_order)
conn.commit()
cur.close()
conn.close()
添加新用户
添加新用户,每个用户给予三次机会
def insert_user(qq_no, message):
conn = pymysql.connect(host="localhost", port=3306, user="root", password="123", database="qbot")
cur = conn.cursor()
sql_order = 'INSERT INTO `group` (qq_no, TextChance, PicChance, Message) VALUES ("%s", 3, 3, "%s")' % (qq_no, message)
cur.execute(sql_order)
conn.commit()
cur.close()
conn.close()
用户信息更新
保存用户发送的信息,机会-1
def update_user(qq_no, message):
conn = pymysql.connect(host="localhost", port=3306, user="root", password="123", database="qbot")
cur = conn.cursor()
# 文字次数减1
sql_order = 'UPDATE `group` SET TextChance = TextChance - 1 WHERE qq_no = %s' % qq_no
cur.execute(sql_order)
conn.commit()
# 信息内容拼接
sql_order = 'UPDATE `group` SET Message = CONCAT(Message,";%s") WHERE qq_no = %s' % (message, qq_no)
cur.execute(sql_order)
conn.commit()
cur.close()
conn.close()
查询用户文字次数
查询用户剩余次数
def select_TextChance(qq_no):
conn = pymysql.connect(host="localhost", port=3306, user="root", password="123", database="qbot")
cur = conn.cursor()
sql_order = 'select TextChance from `group` WHERE qq_no = %s' % qq_no
cur.execute(sql_order)
result = cur.fetchone()
cur.close()
conn.close()
return result[0]
清空用户的文字次数
清空次数,在用户发送违规信息时调用
def clear_user(qq_no):
conn = pymysql.connect(host="localhost", port=3306, user="root", password="123", database="qbot")
cur = conn.cursor()
sql_order = 'UPDATE `group` SET TextChance = 0 WHERE qq_no = %s' % qq_no
cur.execute(sql_order)
conn.commit()
cur.close()
conn.close()
查询当前用户是否已经存在
用来作为用户发送信息之前的判断
def user_isexist(qq_no):
conn = pymysql.connect(host="localhost", port=3306, user="root", password="123", database="qbot")
cur = conn.cursor()
sql_order = 'select * from `group` where qq_no = "%s"' % qq_no
result = cur.execute(sql_order)
conn.commit()
cur.close()
conn.close()
if result == 0:
return False
else:
return True
相关文章
- MySQL命令行实现数据库创建(mysql命令行创建数据库)
- 实现64位QT环境下的MySQL使用(qt64位mysql)
- MySQL与Java互调:构建高效业务系统(mysql调用java)
- MySQL软件:简单易用的数据库管理工具(mysql软件使用)
- MySQL如何安全保存汉字(mysql保存汉字)
- MySQL与JavaWeb的无缝连接(mysql连接javaweb)
- 库MySQL:探索二进制数据库之路(mysql二进制数据)
- MySQL:使用预编译加快数据库查询(mysql的预编译)
- 如何记录和管理MySQL数据库的数据日志?(mysql数据日志)
- 从Mysql到Oracle:如何成功迁移数据库(mysql迁移oracle)
- MySQL修改Host的操作技巧(mysql 修改host)
- MySQL中Long类型的详解(mysql中long类型)
- MySQL中使用ID关联生成的方法(mysql中id关联生成)
- 使用C语言编写MySQL批处理提高数据库性能(c mysql 批处理)
- MySQL使用C语言打印结果集的实现方法(c mysql打印结果集)
- MySQL实现两表连接删除的简便方法(mysql 两表连接删除)
- 学会使用CMD和MySQL命令行,让工作效率提升一个档次(cmd mysql命令行)
- 一起调整1号店Mysql中的排序结构(1号店排序mysql)
- MySQL如何判断是否存在数据(mysql中判断是否存在)
- MySQL中的三木运算及其使用方法(mysql 三木运算)
- MySQL有哪些使用难点25种绕不过的坑(mysql不好用)
- 如何在MySQL中避免使用临时表(mysql 不写tmp)
- MYSQL收费了 了解MySQL开源版的最新政策(mysql不再免费了吗)
- MySQL如何使用不等于运算符(mysql不等于怎么打)
- 如何解决MySQL不打印结果的问题(mysql不打印结果)