Coder Social home page Coder Social logo

authms's Introduction

authMS

适用于HoshinoBot v2的授权插件, 可控制cqhttp的事件过滤器. 大部分功能以天枢授权为蓝本而开发. 本插件另有带有web服务的页面, 如果需要请按照注释开启web. 本项目主体框架由wdvxdr1123构建, 火龙添加了一些重要功能.

本授权系统的开发调试过程均以go-cqhttp进行, 请使用v0.9.24-fix2以上版本的go-cqhttp; 不支持v1.0.0以上版本的go-cqhttp.

v0.2.0及之后使用事件过滤器来进行授权控制, cqhttp-mirai暂时不支持此特性, 如果使用cqhttp-mirai请从release下载v0.1.5-fix1版本, 请使用v0.2.2.5以上版本的cqhttp-mirai, 否则Bot进群等部分功能将不可用.

本项目使用GPL-3.0协议, 您使用本插件所造成的一切财产损失或其他形式损失, 均与开发者无关, 开发者不承担任何相关责任.

相关链接: 本项目地址: https://github.com/pcrbot/authMS

HoshinoBot项目地址: https://github.com/Ice-Cirno/HoshinoBot

特点

  • 无GUI ,不依赖Native环境, 依托于nonebot架构, 对不同的操作系统友好

  • 自定义新群试用

  • 自定义到期后是否自动退群

  • 支持自定义入群发言, 退群发言

  • 自定义每日检查频率(最低为每日一次), 可手动快速检查

  • 支持无卡密操作, 直接对一个群的授权进行修改/清零

  • 支持批量操作(网页/私聊)

  • 支持手动提醒群续费(网页)

  • 可自动接受好友请求

  • 自动检查人数

  • 卡密部分自定义

  • 授权检查范围广, 支持以下情形:

    • 被拉近50人以下的群(因为默认不需要被邀请者同意)
    • 超过50人群, 需要机器人同意的群
    • 机器人掉线期间被邀请加入的群
    • 维护者手动登录机器人帐号加入的群

    以上情况加入的群聊, 均会收到授权系统的自动检测, 并可自定义退群或开启试用等操作。

指令示例

注意, 以下指令中的空格均不可省略

仅限超级管理员私聊的指令

  • 【生成卡密 31*5】生成5张31天的卡密
  • 【卡密列表】查看已有卡密的信息,后跟数字来查看对应页数
  • 【授权列表】查看所有授权群的信息,后跟数字来查看对应页数
  • 【管理员帮助】查看管理员指令
  • 【快速检查】立刻检查群的授权, 检查方式与定时任务一样
  • 【刷新事件过滤器】手动刷新事件过滤器

仅限超级管理员的指令

  • 【变更授权 123456789+5】为群123456789增加5天授权, 也可以是减
  • 【转移授权 123456*987654】将群123456的剩余时间转移至群987654
  • 【授权状态】查询此机器人授权信息的统计, 仅限超级管理员
  • 【清除授权 987654】清除群987654的全部授权, 并自动退群(如果配置了的话)
  • 【退群 987654】命令退出群聊987654, 但并不清除剩余授权时间
  • 【变更所有授权 3】为所有已有授权的群增加3天授权时间
  • 【不检查人数 987654】不检查群987654的人数是否超标, 直接在群聊中发送则不必附加群号
  • 【不检查授权 987654】不检查群987654的授权是否过期, 直接在群聊中发送则不必附加群号
  • 【添加白名单 987654】不检查群987654的授权是否过期以及人数是否超标, 直接在群聊中发送则不必附加群号
  • 【移除白名单 987654】将群987654从白名单中移出
  • 【全部白名单】查询全部白名单信息

通用指令

  • 【检验卡密 abcdefghijklemop】检查卡密的有效性
  • 【充值 abcdefghijklemop】群聊使用,为本群充值
  • 【充值 abcdefghijklemop*123456789】为群123456789充值
  • 【充值帮助】查看充值帮助内容

开始使用

  1. 在HoshinoBot的modules目录下克隆本项目:
    git clone https://github.com/pcrbot/authMS.git
    
  2. 安装依赖, 如下载过慢建议清华镜像:
    pip install -r requirements.txt
    
  3. filter.json放入go-cqhttp目录下.
  4. 在HoshinoBot统一配置目录下保存配置信息,命名为authMS.py, 已提供配置样板authMS.py.example, 按照注释修改为您需要的配置. 请注意, 必须配置事件过滤器路径.

其他

  • 日志功能并非Hoshino内置的日志记录, 而是作为单独文件记录. 默认保存位置log/authMS.log, 默认只记录卡密使用, 加群退群被踢.

  • 支持本机多个机器人数据互通, 详情参考authMS.py.example中的注释, SQLite是一个本地化的数据库, 因此不支持网络, 配置目录请注意使用斜杠/.

  • 如果您是初次使用authMS, 且希望配置为到期自动退群, 建议保持默认ENABLE_AUTH为0, 待完成全部现有群授权后, 再修改.

贡献

GitHub@wdvxdr1123

GitHub@xhl6699

GitHub@var

更新日志

v0.2.1

更新时间:2020/9/27

此版本主要进行风控规避#16

  • 配置文件新增以下参数:
    • BEGIN, 用以自定义卡密开头
  • 功能变更与调整:
    • 发言与退群之间间隔增大, 并限速调用
    • 人数检查纳入日志的记录范围
    • 卡密开始部分支持自定义, 总长度不变, 例如PCRkPTNeGFilybVn
    • 进群之后不会立刻退群, 而是等待下一次自动检查任务时退群

v0.2.0

更新时间:2020/9/15

此版本主要针对事件过滤器重构

  • 配置文件新增以下参数:
    • EVENT_FILTER, 事件过滤器配置文件目录.
  • 功能变更与调整:
    • 直接内置了编译好的vue文件
  • 指令变更:
    • 新增管理员指令【刷新事件过滤器】

v0.1.5

更新时间:2020/9/9

此版本主要新增日志、人数限制、白名单系统、以及网页授权管理

  • 配置文件新增以下参数:
    • DEBUG, 默认关闭, 开启后会详细记录所有的日志.
    • LOG, 默认开启, 记录重要日志信息, 如进群退群卡密使用
    • LEAVE_AFTER_DAYS, 在授权到期X天后再退群(仅当配置AUTO_LEAVE为True时有效)
    • MAX_GROUP_NUM, 最大允许的群人数
  • 功能变更与调整:
    • 新增人数检查功能, 在群人数超标时可以根据配置自动退群或者发送提醒
    • 新增白名单功能, 有三种类型, 不检查授权、不检查人数和全部不检查(注意查询授权出来的的结果不会变, 只是不会自动退群或停止响应消息)
    • 更新网页授权管理(by wdvxdr1123)
    • 退群统一由util.gun_group()处理, 退群时将会发送退群原因
    • 修改配置文件中一些参数的默认值
  • 指令变更:
    • 移除无效指令【帮助充值】
    • 新增管理员指令【不检查人数】【不检查授权】【添加白名单】【全部白名单】【移除白名单】
  • 错误修复:
    • 修复管理员帮助无法查看的问题
    • 修复web授权管理的漏洞, POST请求没有鉴权(by wdvxdr1123)

v0.1.4

更新时间:2020/8/26

  • 配置文件新增以下参数:
    • ENABLE_WEB, 是否同时启用web管理(之前需在__init__.py中配置)
    • PASSWORD, web管理密码(之前需在web_server.py配置)
    • REG_HELP_GROUP, 群聊充值帮助文本
    • REG_HELP_PRIVATE, 私聊充值帮助文本
    • ADMIN_HELP, 给管理员的帮助文本
    • FRIEND_APPROVE, 是否自动接受加好友的请求
  • 文件结构调整
  • 新增指令【快速检查】【充值帮助】【管理员帮助】
  • 新增特性: 处理加好友事件
  • 新增特性: 与管理后台分离的激活界面(感谢A-kirami

v0.1.3

更新时间:2020/8/22

  • 添加nonebot_plugin.py.example, 可以实现对yobot的授权控制(虽然早就有了)
  • 配置文件新增以下参数:
    • ENABLE_AUTH, 授权系统自动检查/退群总开关
    • FREQUENCY, 控制授权系统自动检查的频率
    • GROUPS_IN_PAGE, 控制每页显示的群的条数
    • CARDS_IN_PAGE, 控制每页显示的卡密条数
  • 移除配置项目:ALLOW_PRIVETE_CHECK
  • 优化获取全部授权列表时的参数, 大幅降低API调用次数(尤其是在群较多时)

v0.1.2

更新时间:2020/8/18

本次更新合并了HoshinoAuthorizeSystem的功能

  • 新增退群,广播功能
  • 现在获取已授权群的时时候,会返回群名了
  • 使用指令所需权限不足时均增加了提示
  • 精简了转移授权部分的代码

v0.1.1

更新时间:2020/8/18

  • 修正#1, 在设置新群使用天数为0时, 自动退群设置不起作用而直接退群
  • 新增指令, 为所有已有授权的群修改时间

v0.1.0

更新时间:2020/8/15

  • 初版发布

authms's People

Contributors

a-kirami avatar var-mixer avatar wdvxdr1123 avatar xhl6666 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar

authms's Issues

未识别已入群的Bug

有时会出现机器人加入群后但是auth并未识别入群,也没有出现机器人入群时的提示语。
如果继续给该群充值,群名那一行显示的是 未知(Bot未加入此群)

[严重]后端api接口没有鉴权机制

只要在自己的机子搭个授权系统,抓包获得接口数据,在将群号目标ip端口之类的一改,就能访问到后端从而篡改授权数据

作者你好

插件安装好以后,运行报错error: name 'CommandSession' is not defined
这是怎么回事呢

[建议]希望能够增加授权人与条件激活码

授权人

授权人为使用激活码激活Bot的用户

  1. 查询授权的时候,返回的信息中增加授权人一项
  2. 授权人可以私聊Bot,进行群授权转移(主人可设置转移CD时间),开关本群Bot等功能
  3. 授权人可以将自己的授权身份移交给他人

条件激活码

条件激活码即为激活码的使用增加条件

  1. 能够设置激活码的使用次数,比如一个激活码可以多个群使用,每群仅可使用一次
  2. 能够设置激活码的过期时间,过期之后自动销毁无法使用

在群充值报错

版本:v0.2.0-pre
出现频率:必现
情况描述:私聊机器人生成卡密,在群充值 卡密后,后台报错:
[2020-09-14 08:58:16,692 nonebot] ERROR: An exception occurred while running command ('充值',):
[2020-09-14 08:58:16,693 nonebot] ERROR: 'coroutine' object has no attribute 'strftime'
Traceback (most recent call last):
File "/home/qqbot/.local/lib/python3.8/site-packages/nonebot/command/init.py", line 723, in _real_run_command
await asyncio.wait_for(future, timeout)
File "/usr/local/lib/python3.8/asyncio/tasks.py", line 455, in wait_for
return await fut
File "/home/qqbot/.local/lib/python3.8/site-packages/nonebot/command/init.py", line 101, in run
await self.func(session)
File "/home/qqbot/qqbot/HoshinoBot/hoshino/modules/authMS/card.py", line 107, in reg_group_chat
msg = await util.process_group_msg(gid, result, '充值成功\n')
File "/home/qqbot/qqbot/HoshinoBot/hoshino/modules/authMS/util.py", line 214, in process_group_msg
time_format = expiration.strftime("%Y-%m-%d %H:%S:%M")
AttributeError: 'coroutine' object has no attribute 'strftime'

使用群互联功能时读取不到数据库

使用了群互联功能,将数据设置成:r'C:\Users\Administrator\Desktop\res\'
结果抛出报错 SyntaxError: EOL while scanning string literal

注释是这样写的:

    # 互通数据库的目录,例如group.sqlite位置/root/database/group.sqlite
    # 此时便填写/root/database/即可

但实际上在 python 中,如果你的字符串最后一位是斜杠字符,那么即使字符串前面加了r,也是无法通过编译的

最后我把数据库的位置写成:r'C:\Users\Administrator\Desktop\res\data_
能顺利读取,只不过数据库的名字前面加上了data_

card.py的80行报错,未定义CommandSession,影响正常使用吗?

Traceback (most recent call last):
File "/usr/local/lib/python3.9/site-packages/nonebot/plugin.py", line 274, in load_plugin
module = importlib.import_module(module_path)
File "/usr/local/lib/python3.9/importlib/init.py", line 127, in import_module
return _bootstrap._gcd_import(name[level:], package, level)
File "", line 1030, in _gcd_import
File "", line 1007, in _find_and_load
File "", line 986, in _find_and_load_unlocked
File "", line 680, in _load_unlocked
File "", line 855, in exec_module
File "", line 228, in _call_with_frames_removed
File "/admin/HoshinoBot/hoshino/modules/authMS/card.py", line 80, in
async def reg_group_chat(session: CommandSession):
NameError: name 'CommandSession' is not defined

bot为群管理时,到期后不能成功退群

如题,当bot为一个群的管理时,授权到期后有退群提示,但不能退群,且功能依然正常使用。
退群问题可能是go-cqhttp的问题,但至少希望authMS能够支持在到期后能停止服务。

优化性能

目前设计下每条消息都会读取数据库(不知道sqlitedict有没有缓存),性能有影响

解决方案一:重构数据库

解决方案二:添加命令前缀,并用eventfilter过滤不需要上报到hoshino的事件(go-cqhttp限定)

规避风控的建议

目前的授权系统是一旦加入未授权群则立即退群,这可能导致:

  • 被风控系统误判为加群发小广告后退群,以至于数日至永久都无法加入这个群

  • 被系统施以更严厉的风控措施

因此,建议:

  • 每天多个时段分批进行检查和退群

  • 限速调用退群api,使之行为接近于人类

新装插件会一件跑路

当设置NEW_GROUP_DAYS为0天时,给新Bot装上此插件会在第一次检查时判定所有群都是未授权群,而触发自动退群,无论AUTO_LEAVE如何配置。

原因应当是schedule.py的85-87行漏掉了相关判断。

私聊充值时,card.py文件101行报错

全部报错内容为:
Traceback (most recent call last):
File "/usr/local/lib/python3.9/site-packages/nonebot/command/init.py", line 881, in _real_run_command
await asyncio.wait_for(future, timeout)
File "/usr/local/lib/python3.9/asyncio/tasks.py", line 442, in wait_for
return await fut
File "/usr/local/lib/python3.9/site-packages/nonebot/command/init.py", line 173, in run
await self.func(session)
File "/HoshinoBot/hoshino/modules/authMS/card.py", line 101, in reg_group_chat
group_name = await util.get_group_name(sid, gid)
AttributeError: module 'hoshino.modules.authMS.util' has no attribute 'get_group_name'
[2021-07-22 23:02:44,256 nonebot] DEBUG: Session of command ('充值',) finished

请问如何解决

添加白名单无效?

将群添加进白名单之后再显示全部白名单却没有这个群,在群里说话机器人也没反应

[feature]希望能增加通知场景

希望能在进行以下操作的时候通知操作对象:

  • 清除一个群的授权
  • 为所有群变更授权
  • 为单个群变更授权
  • 在群之间转移授权
  • 使用退群指令

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.