MiraiForum

    • 注册
    • 登录
    • 搜索
    • 热门
    • 最新
    • 未解决
    • 标签
    • 群组
    • 友情链接
    1. 主页
    2. Mitr-yuzr
    3. 主题
    • 资料
    • 关注 1
    • 粉丝 2
    • 主题 6
    • 帖子 73
    • 最佳 15
    • 有争议的 0
    • 群组 2

    Mitr-yuzr 创建的主题

    • Mitr-yuzr

      [Mirai-NLP] GPT2-Chinese模型训练教程
      技术交流板块 • • Mitr-yuzr

      22
      0
      赞同
      22
      帖子
      2944
      浏览

      Mitr-yuzr

      Mirai-NLP > GPT2-Chinese

      Mirai-NLP Github Project

      前言

      作为Mirai-NLP系列教程的第一章,本教程将会手把手教你从头开始训练一个基于GPT2-Chinese语言模型并进行文本生成。

      本系列教程以及衍生插件均起源于 关于将QQ机器人与深度学习NLP结合的可能性 一帖,在这里对参与讨论和关注后续的各位表示感谢。没有你们的支持,我的寒假和国庆假期就不会这么充实。

      本帖全部内容已经过作者验证,笔记本的内容也经过了封装,用户不需要接触到代码,只需输入参数即可进行训练和生成。

      训练过程中如果出现问题可以回复或私聊,同时也非常欢迎各位在帖子下方分享自己的训练成果。

      声明

      仅供学习用途,禁止用于任何违反法律法规和社区规定的行为,禁止用于商业行为。

      需要 一台可以科学上网的电脑 可以使用Google Drive的Google账号 一个可以用于收集训练数据的QQBot 一点点动手能力 教程 数据准备

      请为你的QQBot安装用于收集数据的NLP插件:

      NLPHelper - 自然语言处理模型训练数据采集专用插件

      或者如果你已经在使用Mirai Hibernate Plugin,则可以使用此插件:

      Mirai Hibernate NLP,用于将聊天记录导出为 NLP 所需数据的插件

      相关插件的使用方法均在对应帖内有说明,本教程中不再介绍。

      使用Python对Json格式的数据进行二次处理为GPT2所需格式 ...

      使用插件内置的导出数据有时无法满足我们想要的功能,这时可以导出Json格式的数据,并使用Python对数据进行二次处理为GPT2所需格式。

      本教程中只介绍此方法的可行性,不详细讲解,下面给出一个例子,可用于针对 123456 的内容过滤。

      import json import ijson if __name__ == "__main__": with open('data.json', 'r', encoding='utf-8') as f: objects = ijson.items(f, 'item') new = [] while True: try: i = objects.__next__() if i['size'] <= 100 and (i['sender']!=123456 or not "*龙门粗口*" in i['content']) : new.append(i['content']) except StopIteration as e: print("数据过滤完成, 共" + str(len(new)) + "条符合要求的数据") break with open('train.json', 'w', encoding='utf-8') as f: json.dump(new, f, ensure_ascii=False) 初始化笔记本 打开本项目的Colab笔记本 在右上角登录你的 Google 账号 首先点击右上角的连接,等待分配完成和初始化 在上方菜单栏中选择代码执行程序,在倒数第三项找到更改运行时类型,在硬件加速器中选择 GPU,等待分配完成
      1.png
      2.png 按照笔记本提示进行初始化、训练和生成
      目录.png 初始化源码、模型等 在全局变量单元格输入模型的名字,然后点击旁边的运行按钮
      2-1 如果弹出安全提示则选择仍然运行
      baea6992-85c0-42a7-9ea8-f492850d0518-image.png 依次运行初始化单元格下的单元格

      挂载Google Drive
      2-2-1
      选择你的 Google 账号
      2-2-2
      滑到最下方,允许
      2-2-3
      挂载成功后,可以看到左侧目录里已经出现了我们的GDrive文件夹
      2-2-3

      下载源代码
      耗时可能比较久,我这里测试的是约五十秒。下载好后大约如下:
      2-3

      下载预训练模型
      这里使用的是hhou435大佬提供的通用中文小模型。
      你可以前往此处下载其他模型 (散文、诗词、对联、歌词、文言文等),并自行上传到drive/MyDrive/your_model_name/文件夹下。
      若为二次训练 (即已经在GDrive中有训练过的模型),则无需运行此单元格。
      下载好后可以看到在我们的GDrive挂载目录下出现了预训练模型(共三个文件)
      2-4

      上传数据
      运行后会在日志出现选择文件按钮,点击并选择导出的数据会自动上传到正确位置并重命名。
      若文件较大则速度会比较慢,耐心等待即可。
      2-5-1

      至此,程序初始化已经完成。

      开始训练

      依照笔记本内容仔细填写参数后,点击运行按钮进行训练。

      关于参数的含义,笔记本中已经介绍的十分详细了。

      3-1-1

      开始训练后会持续输出进度以及误差 (误差可能在0.5-0.1左右效果比较好,依数据量和内容也会发生变化)。

      3-1-2

      如何进行二次训练 ...

      有时,我们训练完后可能觉得训练轮数不够或是被Colab强制停机了,亦或是增加了新数据,想接着训练先前的模型。

      这时,我们需要修改以下参数。

      3-2-1
      3-2-2

      之后点击运行按钮,就可以接着上次的进度继续训练了。

      生成文本

      等待训练完成后,我们就可以进行文本生成了。

      在下方生成参数中填写生成参数 (不能为空,修改后会自动运行,必须运行一次才可以进行生成)。

      如果填写完后没有自动运行,可以自己手动运行一次。

      3-3-1

      参数填写完成并允许后,在下方可以看到两个代码块:

      直接生成 生成并保存至本地

      前者只会输出到日志,后者输出完成后会自动保存并下载。

      两者效果一样,选择其中一个运行即可。

      3-3-2

      结尾

      本教程至此已完成全部内容,由于部署对于一般用户而言太过困难且代价较高,因此本教程中不做介绍,可自行百度。

      目前Mirai-NLP以及衍生插件只支持gpt2一种模型,未来预计还会支持更多其他模型,届时也会发布笔记本和教程,可以在Mitr-yuzr/Mirai-NLP-Notebook 仓库中查看。

      由于数据集和预训练模型等问题,效果不理想是很正常的,但你已经踏入了机器学习领域的大门,并亲身体验了训练的全过程,这毫无疑问是一次难得的经验。

      在如今的智能时代,NLP其实很近,并没有我们想的那么遥远。你打字时的自动联想,语音输入和识别、你的Siri、小爱,这些平日里见惯的内容,其实背后都有NLP辅助。

      或许在未来的某一天,NLP真的发展到足以通过图灵测试的程度。你可能会想起在曾经启蒙的时代,你也曾有过一个属于自己的独一无二的AI,它可以水群,可以玩梗,会模仿你和你的朋友们说话。

      内容大致就到这里了。如果教程有问题或是有困难可以回复或者私聊,也可以在github上提issue。

      你也可以将你的训练成果分享到帖子下方,鼓励那些想试而迟迟未动手的用户去大胆尝试。

      另外,在最后祝各位国庆节快乐。

    • Mitr-yuzr

      NLPHelper - 自然语言处理模型训练数据采集专用插件
      插件发布 • • Mitr-yuzr

      33
      2
      赞同
      33
      帖子
      4383
      浏览

      Mitr-yuzr

      NLP Helper

      适用于 Mirai 的用于收集NLP语言训练数据的插件。

      Github Project Release 介绍 什么是NLP?

      以下内容摘自百度百科

      自然语言处理( Natural Language Processing, NLP)是计算机科学领域与人工智能领域中的一个重要方向。它研究能实现人与计算机之间用自然语言进行有效通信的各种理论和方法。自然语言处理是一门融语言学、计算机科学、数学于一体的科学。因此,这一领域的研究将涉及自然语言,即人们日常使用的语言,所以它与语言学的研究有着密切的联系,但又有重要的区别。自然语言处理并不是一般地研究自然语言,而在于研制能有效地实现自然语言通信的计算机系统,特别是其中的软件系统。因而它是计算机科学的一部分 [1] 。
      自然语言处理主要应用于机器翻译、舆情监测、自动摘要、观点提取、文本分类、问题回答、文本语义对比、语音识别、中文OCR等方面 [2] 。

      起因

      我前一段时间发布的帖子: 关于将QQ机器人与深度学习NLP结合的可能性

      目的

      制作一个专用于收集NLP语言模型训练数据、方便查询和导出数据的插件。

      功能 收集指定群里的聊天数据 (仅支持 PlainText) 自动过滤emoji,并支持在配置中通过正则表达式进行简单过滤 支持导出JSON格式的数据 支持直接导出模型需要的训练数据的格式 (目前暂时仅支持 GPT2-Chinese 模型) 完全隐蔽式收集数据,聊天环境下所有命令均无回应 数据库安全,相关命令仅限控制台 声明

      本插件开发目的为学习,在开始采集数据前请先告知群成员,采集所得数据必须保证只在机器学习上使用。严禁用于任何侵犯他人隐私和过度滥用的行为,若因此出现问题本人概不负责。

      快速使用 从 Release 下载本插件并放置于mcl的plugins目录下 登录机器人后,在控制台输入以下命令开始采集数据/NLPHelper addGroup 你需要采集数据的群 采集数据 (这通常需要花上数周甚至数月) 在控制台输入以下命令导出gpt2数据/NLPHelper export gpt2 前往 mcl根目录\NLPH\out\ 找到刚才导出的数据 进行模型训练 (这一部分的教程会在之后补充) 命令

      注意:
      为避免其他插件的功能引发的对话文本污染样本池,请避免在同一个群里同时使用本插件和其他插件。
      如果同时使用 Chat-Command 等其他插件,请注意在过滤词中确保过滤了触发命令的前缀 (如/或#)

      命令均为 /NLPHelper <子命令> [参数...]或使用缩写别名 /nlph <子命令> [参数...] 。

      配置修改命令 命令 描述 /NLPHelper addGroup <group> 添加收集数据的群 /NLPHelper removeGroup <group> 移除群 /NLPHelper outDir <path> 修改默认输出位置 /NLPHelper defaultFileName <fileName> 修改默认输出文件名 /NLPHelper addFilter <filter> 添加过滤词 /NLPHelper removeFilter <filter> 移除过滤词 /NLPHelper addConfig <name> <sql> [type] 新建导出配置 /NLPHelper removeConfig <name> 删除导出配置 参数 类型 描述 备注 group Long 启用或移除的群号 path String 默认导出数据的位置 mcl根目录,默认为./NLPH/out/ fileName String 默认导出的文件名 默认为NLPHExport_{model}_{count}.json filter String 需要过滤的字符 支持正则表达式 name String 导出配置的名字 大小写敏感,自带三个导出配置 default、json和gpt2 fileName 文件名变量 变量 描述 {model} 选择导出的方式,如: json {count} 导出数据数量,如: 114514 {date} 导出的日期 (yyyyMMdd),如: 20220910 {time} 导出的时间 (HHmm),如:0930 {datetime} 导出的日期和时间 (yyyyMMddHHmm),如: 202209100930

      注意:
      若要在聊天环境中使用,需要授予相关权限。

      filter 的过滤是在收集数据时进行的,生效后当检测到消息内容包含过滤词时就不会收集该消息,导出时不会进行过滤!

      请在开始收集前配置好过滤词,否则后续添加的过滤词对此前已经收集的内容不生效,届时可能需要借助辅助程序将导出内容再次过滤。

      数据库相关命令 命令 描述 /NLPHelper query [sql] 查询 /NLPHelper execute <sql> 执行sql语句 /NLPHelper export [config] [outDir] [fileName] 使用导出配置进行导出 /NLPHelper exportByConfig [config] [outDir] [fileName] 使用导出配置进行导出 /NLPHelper exportBySQL [sql] [type] [outDir] [fileName] 使用sql语句进行导出 参数 类型 描述 备注 sql String SQL语句 默认为SELECT * FROM NLPH; config String 导出配置的名字 默认为default,即导出json type String 导出类型 默认为json,目前仅支持json和gpt2

      注意:
      本命令仅支持控制台使用。
      所有sql输入均未作判断和处理直接执行,如有语法问题会catch并报错。其余指令存在sql注入风险,但没必要,因为你可以直接使用execute。

      导出样例

      __

      json

      demo_json.png

      gpt2

      demo_gpt2.png

      注意:
      若追求更好的效果,仍需再进一步过滤噪声

      数据表

      表名为 NLPH

      参数 类型 描述 sender Long 发送者QQ号 group Long 消息所在群QQ号 bot Long 相关机器人QQ号 content String 消息内容 size Int 消息长度 date LocalDate 消息发送日期 用例 #查询 123456 发送的消息 /NLPHelper query "SELECT * FROM NLPH WHERE sender=123456;" #以json格式导出群 456789 的消息 /NLPHelper exportBySQL "SELECT * FROM NLPH WHERE group=456789;" json #以gpt2格式导出 100 字以内的消息 /NLPHelper exportBySQL "SELECT * FROM NLPH WHERE size<=100;" gpt2 #以gpt2格式导出比较文明的消息 /NLPHelper exportBySQL "SELECT * FROM NLPH WHERE content NOT LIKE '%妈%';" gpt2 #以json格式导出最新的 100 条消息 /NLPHelper exportBySQL "SELECT * FROM NLPH ORDER BY date DESC LIMIT 100;" json #以json格式导出日期在 2022年8月1日-2022年9月1日 且属于机器人 114514 的消息,且仅导出发送人和消息内容 #/NLPHelper exportBySQL "SELECT sender,content FROM NLPH WHERE (date BETWEEN 20220801 AND 20220901) AND bot=114514;" json #经测试发现date实际上仍是时间戳,所以此用例的日期部分不可用,其余部分可以参考

      更多高级的使用方法请自行去学习 SQLite

      插件配置

      位于\config\net.reincarnatey.NLPHelper\NLPHConfig.yml

      # 要开启记录消息的群 group: - 123456 # 当检测到以下内容时不记录该消息,支持正则表达式 filter: - '/' - '#' - http # sql查询语句的配置,数据表详细与简单的sql教程在README.md config: default: sql: 'SELECT * FROM NLPH;' type: json json: sql: 'SELECT * FROM NLPH;' type: json gpt2: sql: 'SELECT * FROM NLPH;' type: gpt2 # 默认导出数据的位置 outDir: './NLPH/out/' # 存放数据库的位置,更改后记得移动NLPH.db至新的位置,重启生效 dbDir: './NLPH/data/' # 默认文件名,模板参数请读README.md defaultFileName: 'NLPHExport_{model}_{count}.json' 再次声明

      本开源插件仅为个人使用而编写,遵循Apache Licence2.0开源协议,发布至 MiraiForum ,禁止用于任何违法法律法规、社区规定、网站规则的行为,若出现问题本人概不负责。

      qwq

      后续如果有空大概会发布如何使用导出来的数据训练。

      下一个支持直接导出的模型可能是 GPT2-chitchat
      有需要的话也可以自行修改源码实现 (不过这一部分源码的方法并不友好,本来想尝试使用泛型接口但以失败告终)

      如果有bug的话可以回复或者提issue

    • Mitr-yuzr

      关于将QQ机器人与深度学习NLP结合的可能性
      技术交流板块 • • Mitr-yuzr

      23
      0
      赞同
      23
      帖子
      2563
      浏览

      Mitr-yuzr

      自动记录群友的消息,并在预训练语言模型的基础上迁移学习群友的聊天记录,训练语言模型并进行简单的文本生成

      上面提到的只是个想法。

      想法来源是最近在阅读NLP相关书籍的时候想到,群里每天聊天记录那么多,用QQ机器人可以很方便的收集信息,既然有那么多法典优质语料,有没有办法让两者结合起来,训练一个模仿群友说话风格的AI呢?

      其实我第一反应是想到之前在论坛里见到过的Chat-Learning插件,结果我打开才发现并不是真正的机器学习。

      大致了解了一下,之前也有大佬做过mirai的py的简单api项目myrai,正好功能完全足够了。

      考虑到如果放在某偶像粉丝群或者虚拟主播粉丝群之类的地方,说话风格比较统一 (都载着理发店) ,一天也能有1000-2000条消息,过滤掉图片和一些不适合训练的消息的话,一段时间下来的数量也是可观的,模型可能大概15天~1个月就可以收敛了。

      大致需要实现的功能就是记录群友说话,然后定时同步到云端算力平台进行预处理和训练。如果数据量不大的话也可能可以直接用myrai写插件,然后插件定时直接在本地训练,因为是每天都训练一次,一次大概就两三个epoch,时间十分充裕,对算力要求也就没那么高。

      个人感觉还是有可能实现的,但是由于数据量其实还是太少,模型也不可能多复杂,效果估计一般,假如能训练出来,模型生成的文本能正常对偶像和主播示爱就已经够逆天了,也不指望训练seq2seq之类的聊天机器人了

    • Mitr-yuzr

      WhoIsSpy - 谁是卧底小游戏插件
      插件发布 • • Mitr-yuzr

      17
      1
      赞同
      17
      帖子
      3068
      浏览

      Mitr-yuzr

      谁是卧底

      适用于 Mirai 的谁是卧底小游戏插件

      Github Project Release 说明

      虽然其他大佬做过谁是卧底的插件了,但是问题实在太多,且游玩不便,因此自己重写了一个,已经测试过了能正常游玩。

      本插件目的是为了方便发词条、流程控制、统计投票与判断输赢,具体游戏内容仍需玩家自己进行和维护。

      进行游戏最少需要四名玩家,不需要权限和调用命令,请注意设置的命令不要重复或是与其他插件重复。

      添加词库请自行在\data\net.reincarnatey.spy\SpyData.yml中追加。

      使用方法 使用前

      请确保SpyData.yml词库内存在词条,否则无法正常开始游戏。

      可下载 Release 中附带的data.zip(从网络中收集的约500个词的词库),并将其解压到mcl根目录下。

      游戏规则

      标准模式下,每个玩家会拿到自己的词条,其中卧底的词条与其他人的不一样!每个玩家需要轮流描述自己的词,描述不能重复,若出现自己的词则直接判输。之后进行投票选出卧底。票数最多的玩家将会被淘汰。一直重复下去,直到卧底被淘汰或卧底的人数占剩余玩家总数大于等于三分之一。

      胜利目标

      普通玩家: 将所有卧底淘汰
      卧底: 存活到最后
      白板: 存活到最后

      创建游戏

      在聊天内发送创建谁是卧底即可,接下来进入准备流程。

      也可发送谁是卧底规则查看游戏规则,或发送结束谁是卧底来强制结束游戏。

      准备流程

      发送加入即可加入游戏中,可发送当前玩家可查看已加入的玩家。

      发送模式 编号可以切换至对应的模式

      默认为标准模式,可通过"模式 1/2/3"切换至其他模式
      1.标准模式: 仅有1个卧底
      2.多卧底模式: 适用于人较多的情况,四分之一玩家为卧底
      3.随机白板模式: 将随机一部分玩家为白板(不超过四分之一)

      特殊模式: 所有玩家均为白板。可输入114514切换至该模式,也会随机强制进入该模式(不提醒)。可通过设置配置项的specialModeOdds来修改概率,概率为0时为不启用该模式。

      当 玩家人数 ≥ 4 时,可发送开始以开始游戏。

      词条分发

      将会自动私聊每一位玩家发送该玩家的词条 (若为白板则无词条内容,但是会发送私聊提醒)。
      为避免收不到消息的特殊情况,推荐所有玩家开始游戏前先添加好友。

      描述阶段

      未被淘汰的每名玩家需要轮流用一句话描述自己的词语。

      插件只会记录是否所有人都发言过了,需要玩家自觉按序描述,不推荐该阶段进行交流。
      如果描述中包含有该玩家的词语,则会直接判为违反规则并立即结束游戏。

      当剩余所有玩家都描述后,由其中一名玩家发送结束以结束描述阶段。

      投票阶段

      未被淘汰的每名玩家需要发送投票 编号进行投票。

      该阶段可进行交流分析和推理。
      淘汰的玩家不可投票,玩家不可投给淘汰的玩家,玩家可以投给自己,当玩家投给编号0时表示弃票。

      最后获得票数最多的被淘汰,平票时不淘汰,剩余玩家回到描述阶段继续进行游戏,直到满足游戏结束条件。

      剩余3名玩家、卧底被淘汰、卧底人数大于等于剩余玩家总数的三分之一

      游戏结束

      结束时会公开普通词条与卧底词条,并公开所有参与玩家的身份。
      之后可再次通过创建谁是卧底重新开始游戏。

      插件配置

      位于\config\net.reincarnatey.spy\SpyConfig.yml

      # 创建触发器 createTriggers: - 创建谁是卧底 # 加入触发器 joinTriggers: - 加入 - 加入谁是卧底 # 当前玩家触发器 showTriggers: - 当前玩家 - 玩家列表 # 切换模式触发器 modeTriggers: - 模式 - 切换模式 # 开始触发器 startTriggers: - 开 - 开始 - go # 描述结束触发器 nextTriggers: - 结束 # 投票触发器 voteTriggers: - 投票 - vote - 投 # 强制结束触发器 stopTriggers: - 结束谁是卧底 # 规则触发器 ruleTriggers: - 谁是卧底规则 # 创建消息 createMessage: "创建成功~\n请输入\"加入\"加入游戏!\n人数大于三人后可输入\"开始\"开始游戏!" # 重复创建消息 alreadyCreateMessage: "游戏已存在!当前玩家{num}人,可\n请输入\"加入\"加入游戏!输入\"谁是卧底规则\"查看规则,\n人数大于三人后可输入\"开始\"开始游戏!" # 加入消息 joinMessage: "加入成功~\n当前玩家{num}人" # 重复加入消息 alreadyJoinMessage: "你已经加入过了!\n当前玩家{num}人" # 游戏进行中消息 inGamingMessage: 游戏正在进行中! # 当前玩家消息 showMessage: '当前玩家: {player_list}' # 词条消息 wordMessage: '你的词条: {word}' # 白板消息 whiteMessage: 你的词条——欸?!你没有词条呢,多观察一下他人的发言并模仿吧! # 强制结束消息 stopMessage: 游戏已结束! # 模式提醒消息 modeMessage: "默认为标准模式,可通过\"模式 1/2/3\"切换至其他模式\n1.标准模式: 仅有1个卧底\n2.多卧底模式: 适用于人较多的情况,四分之一玩家为卧底\n3.随机白板模式: 将随机一部分玩家为白板(不超过四分之一)" # 切换模式消息 switchModeMessage: '已切换至{mode}!' # 模式不存在消息 noModeMessage: 该模式不存在! # 特殊模式消息 specialModeMessage: 游戏模式好像变得奇怪了! # 卧底胜利消息 spyWinMessage: 游戏结束啦!卧底获得胜利! # 卧底失败消息 spyLostMessage: 游戏结束啦!卧底输了! # 特殊模式结束消息 specialModeEndMessage: 游戏结束啦!本轮没有玩家获胜,因为本轮为【特殊模式】,全部玩家都是白板! # 不知道谁赢消息 normalEndMessage: "游戏结束啦!以下玩家获得胜利:\n{win_list}" # 描述阶段消息 descriptionMessage: "描述阶段!请按照以下顺序轮流用一句话描述自己的词语(但不可以包含自己的词语),所有人均描述完毕后发送\"{nextTriggers}\"进入下一阶段。\n{player_list}" # 投票消息 voteMessage: "投票阶段!请输入\"投票 编号\"进行投票,所有人均描述完毕后自动进入下一回合。\n0. 弃票\n{player_list}" # 规则 rule: 标准模式下,每个玩家会拿到自己的词条,其中卧底的词条与其他人的不一样!每个玩家需要轮流描述自己的词,描述不能重复,若出现自己的词则直接判输。之后进行投票选出卧底。票数最多的玩家将会被淘汰。一直重复下去,直到卧底被淘汰或卧底的人数占剩余玩家总数大于等于三分之一。 # 强制进入特殊模式(不通知)的概率,可填0-100,对应0%-100%的概率,为0时就是禁用特殊模式 。特殊模式: 所有玩家均为白板,只剩下3名玩家时结束。该模式也可通过"切换模式 114514"进入。 specialModeOdds: 5 # 私聊发送消息间隔时间 (防被封) delay: 1000 声明

      本开源插件仅为个人使用而编写,遵循Apache Licence2.0开源协议,发布至 MiraiForum ,禁止用于任何违法法律法规、社区规定、网站规则的行为,若出现问题本人概不负责。

      qwq

      本项目开源,需要功能建议自行修改并编译
      如果有bug的话可以回复或者提issue

    • Mitr-yuzr

      TimerRequestor - 用于每日签到、打卡等功能的定时自动GET请求插件
      插件发布 • • Mitr-yuzr

      8
      0
      赞同
      8
      帖子
      2314
      浏览

      Mitr-yuzr

      Timer Requester

      适用于 Mirai 的用于签到、打卡等功能的定时GET请求插件

      Github Project Release 功能 目前实现的功能 每天定时自动进行GET请求并通知 允许私聊Bot进行增加、查询、删除、停用、启用请求 适配多Bot账号功能,可多人使用 管理员命令,可查询、停用、启用所有人的全部或指定请求 聊天命令触发器以及内容均可在Config中修改 尚未实现且懒得做但很实用的功能 支持其他类型的请求(POST、PUT、DELETE等) 允许在添加请求时设定正则表达式判断是否请求成功 将请求改为有序,并允许设定正则表达式匹配变量,并将前一个请求获取结果中的变量作为下一个请求的参数(用于带有token的签到) 在请求完毕后会根据响应的内容自动更新Cookie 每个请求单独设定请求时间、间隔 更精细的时间设定 一般使用方法

      添加请求:

      add

      查询请求:

      query

      停用&启用请求:

      stop&start

      删除请求:

      remove

      命令

      注意:
      若想在聊天环境中使用管命令,请确保安装了Chat-Command 插件

      命令均应以 /timerRequester <子命令> [参数...]或使用缩写别名 /tr <子命令> [参数...] 。

      大部分命令均有两个及以上别名 (包括中文别名),以下只介绍一种,更多可以通过 /tr 查看命令列表

      管理员命令 命令 描述 /timerRequester addAdmin <user> 添加管理员 /timerRequester removeAdmin <user> 移除管理员 参数 类型 描述 备注 user Long 要修改的管理员对应的QQ号 无

      注意: 本命令仅供控制台使用

      配置修改命令 命令 描述 /timerRequester sendMessage <enable> 修改自动请求后是否发送通知 /timerRequester callWhenAdd <enable> 修改是否在添加和启用后立即进行一次请求 /timerRequester whitelist [enable] 启用/停用白名单,若不带参数则为查询白名单 /timerRequester addWhitelist <user> 添加白名单 /timerRequester requestTime <time> 修改定时请求的时间 /timerRequester requestLimit <limit> 修改请求上限 /timerRequester requestDelay <delay> 修改请求间隔 参数 类型 描述 备注 enable Boolean 是否启用对应项目 为true或false user Long 对应的QQ号 无 time Int 定时修改的时间 单位为小时,应为0-23的整数 limit Int 请求上限数量 小于等于0则为不设上限 delay Long 请求间隔时间 最低为50,建议500 管理请求命令 命令 描述 /timerRequester list [user] [name] 列出请求 /timerRequester delete <user> [name] [sendMessage] 删除请求 /timerRequester start <user> [name] [sendMessage] 启用请求 /timerRequester stop <user> [name] [sendMessage] 停用请求 参数 类型 描述 备注 user Long 要修改的对应的QQ号 作为可选时,若为空则代表全部 name String 请求的名字 作为可选时,若为空则代表全部 sendMessage Boolean 是否通知该用户 默认为true

      注意:
      除不带任何参数的list命令外,其余命令均无法在控制台使用。
      []的参数表示可选,<>的参数表示必选
      admin

      插件配置

      位于\config\net.reincarnatey.timer-requester\RequesterConfig.yml

      # 每日自动请求的时间,目前只能统一进行请求且一天一次,范围为0~23 requestTime: 7 # 是否启用白名单 enableWhitelist: false # 白名单,启用后不在白名单上不会回应 whitelist: [] # 是否在用户添加和启用后立即调用一次(管理员启用时不调用)并通知结果 callWhenAdd: true # 可添加请求数量上限,小于等于0则为无限 requestLimit: 0 # 请求间隔时间,单位为毫秒,不建议间隔太短,最低50 requestDelay: 500 # 到达添加上限时的回应消息 limitedMessage: '哎呀,你已经达到上限 {limit} 个了,不可以继续添加了!' # 在自动请求后是否会私聊通知对应用户 sendMessage: true # 请求状态码为200时发送的通知 successMessage: '{name} 请求已发送成功!' # 请求状态码异常时发送的通知 errorMessage: '诶呀,{name} 请求返回了 {code} 呢……' # 成功添加新请求时的回应消息 addMessage: '{name} 请求添加成功!' # 停用请求时的回应消息 disableMessage: '{name} 请求已停用!' # 启用请求时的回应消息 enableMessage: '{name} 请求已重新启用!' # 删除请求时的回应消息 deleteMessage: '{name} 请求已删除!' # 管理员停用请求时的通知 adminDisableMessage: '你的 {name} 请求已被管理员 @{adminId} 禁用!' # 管理员启用请求时的通知 adminEnableMessage: '你的 {name} 请求已被管理员 @{adminId} 重新启用!' # 管理员删除请求时的通知 adminDeleteMessage: '你的 {name} 请求已被管理员 @{adminId} 删除!' # 添加请求的命令 addTriggers: - 添加请求 - 增加请求 # 查看自己请求的命令 viewTriggers: - 查看请求 - 我的请求 - 查看我的请求 # 查看自己请求的输入 viewInput: '请输入"{allTriggers}" 或 要查看的请求的名称:' # 查看自己请求的命令 allTriggers: - 全部 - 全部请求 - 所有 # 查询不到的提示 noDataTip: 数据不存在?! # 停用请求的命令 disableTriggers: - 停用请求 - 关闭请求 - 禁用请求 - 停止请求 # 查看自己请求的输入 disableInput: '请输入"{allTriggers}" 或 要禁用的请求的名称:' # 启用请求的命令 enableTriggers: - 启用请求 - 开启请求 # 查看自己请求的输入 enableInput: '请输入"{allTriggers}" 或 要启用的请求的名称:' # 删除请求的命令 deleteTriggers: - 删除请求 - 移除请求 # 查看自己请求的输入 deleteInput: '请输入"{allTriggers}" 或 要删除的请求的名称:' # 开始添加请求时的提示 addTip: '开始添加请求,你可以随时输入"{cancelTriggers}"来取消本次添加' # 重复开始添加请求时的提示 inAddTip: '已经开始添加了哦!你可以随时输入"{cancelTriggers}"来取消本次添加' # 添加请求时的名称输入 nameInput: '请输入名字:' # 添加请求时的非法输入的提示 errorInputTips: 非法输入,请修改并重新发送 # 添加请求时的目标输入 urlInput: '请输入(完整的带参数的)目标URL:' # 添加请求时添加请求头提示 headerTip: '添加成功!请输入"{headerTriggers}"继续添加请求头(如Cookie),或是输入"{finishTriggers}"完成添加' # 添加请求时添加请求头输入 headerTriggers: - 添加 - 添加请求头 # 添加请求头时的键提示 headerKeyInput: '请输入请求头的键:' # 添加请求头时的值提示 headerValueInput: '请输入请求头的值:' # 添加请求时完成命令 finishTriggers: - 完成 - 完成添加 # 添加请求时取消命令 cancelTriggers: - 取消 - 停止添加 # 取消添加请求时的回应消息 cancelMessage: 已取消本次添加! 声明

      本开源插件仅为个人使用而编写,遵循Apache Licence2.0开源协议,发布至 MiraiForum ,禁止用于任何违法法律法规、社区规定、网站规则的行为,若出现问题本人概不负责。

      qwq

      本项目的实现参考了其他大佬的插件的代码(比如定时器和匹配触发器之类的)
      如果有bug的话可以回复或者提issue

    • 1 / 1