Qbot4.连接mysql/限制使用次数

Posted zstar-_

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Qbot4.连接mysql/限制使用次数相关的知识,希望对你有一定的参考价值。

该项目计划长期进行维护更新,欢迎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

以上是关于Qbot4.连接mysql/限制使用次数的主要内容,如果未能解决你的问题,请参考以下文章

Qbot4.连接mysql/限制使用次数

mysql 8.0 Druid连接时调用getServerCharset报空指针异常解决方法

MySQL 资源限制

MySQL 资源限制

Nginx限制每秒请求次数,限制每秒连接次数,下载速度限制

Nginx限制每秒请求次数,限制每秒连接次数,下载速度限制