技术
Toad for Oracle的安装记录。
安装前准备安装Toad需要本地有一个Oracle的客户端,所有先去下载一个Oracle客户端。下载地址我这里下载一个Light(轻量)版的32位的客户端就好了。
解压之后,在环境变量的PATH中添加你的Oracle客户端的路径。
最后在network/admin文件夹下在新建tnsnames.ora、sqlnet.ora、ldap.ora文件,内容可以为空。如果你懂的怎么配置或者已经有现成的配置,可以优先配置好。
下载Toad软件本网站暂不支持提供下载服务。建议去jb51网站中下载,点击下载地址-普通下载地址。注意甄别广告。
安装Toad软件解压下载完成的文件后,打开直接点击Setup_x86.exe开始安装引导程序。在同意条款之后,输入license。License key : CJ2PFCQ6P49Q4WHQT2D03GNTVX2AN5DG6FWD04YL4QW625KT391J9YF38VKB92SNBWNW-RU-BOARD-BDSite message : cr2384接着一路Next等待安装完成。
tips: 如果没有提前安装oracl客户端,在安装前检查时候会提 ...
博客
基于MiraiBot的开发(自定义回复图片)
MiraiBot 简介不写了
功能差异这部分属于前篇自定义消息中的拓展开发,自定义回复图片内容。之前是回复的消息都是简单的文本消息,可以从单个MessageChain中获取到完成的key和value属性,同时在发送消息的时候可以直接发送简单文本。而自定义图片的区别的在于,文本消息和图片消息在两个顺序的MessageChain中,并且在发送消息的时候需要去构建的Image类型的消息。难点构建一个完整的Image消息。
功能实现修改mgs的获取方式前篇中我们使用了message.contentToString()来简单的获取文本消息,在Message.kt的源码中写出了方法的介绍转为接近官方格式的字符串, 即 "内容".也就是说转化之后的msg,在接受到每一张图片都是“图片”文本字符。为了获取到详细的图片的信息,我们这里需要使用message.toString()来取得最原始的消息信息。Message中包含了MessageMetadata 消息元数据 和 MessageContent 含内容的消息。这里我们暂时不用消息元数据,需要过滤掉。获得完整的含内容的消息。
12 ...
博客
基于MiraiBot的简单开发(网易云点歌)
MiraiBot 简介不写了
功能构想群员可以通过发送“点歌[歌名]”指令让狼宝回复对应歌曲卡片内容。
功能实现识别指令后,获取到歌名之后,根据API构建OKHTTP3.request,一般包含[url],[param],[header]。然后创建OKHTTP3.client,来向API请求request中的请求,最后将获取OKHTTP3.response,使用alibaba.fastjson2从中提取出需要的[songName],[songId],[artisName],[albumPicUrl],最后构建音乐卡片信息发送到群内。
12345678gm=>operation: 获取歌名cr=>operation: 创建requestcc=>operation: 创建client并执行gr=>operation: 获取responsepr=>operation: 解析response获取歌曲信息cmc=>operation: 创建音乐卡片sg=>operation: 发送群内gm->cr->cc->gr->pr-> ...
技术
数据库表结构调整(带数据)
思路数据备份 -> 表删除 -> 表重建 -> 数据迁移 -> 备份删除
实现123456789101112131415161718192021222324252627282930CREATE TEMPORARY TABLE temp1 ASSELECT group_number, q_key, q_message, sender_numberFROM t_customize_message;DROP TABLE t_customize_message;CREATE TABLE t_customize_message (group_number NUMERIC,q_key NVARCHAR,q_message NVARCHAR,sender_number NUMERIC);INSERT INTO t_customize_message (group_number, q_key, q_message, sender_number)SELECT group_number, q_key, q_message, sender_numberFROM ...
技术
Oracle数据表的透视函数Pivot(行转列)
前言行转列,依照实际的业务需求,在Oracle数据库中创建相应的透视/交叉表。推荐阅读官方文档 透视和逆透视
透视(行转列)原查询语句为:
1234567SELECT p.Prod_date,p.INDEX_NAME ,p.ITEM_VALUE FROM PC_SPL_REPORT_INDEX_ITEM pWHERE 1 = 1AND p.REPORT_ID = '16673814706151363'AND p.INDEX_NAME IN ('商品量','工业产量','销售量') AND to_char(p.Prod_date,'yyyy') = to_char(sysdate,'yyyy')ORDER BY p.Prod_date,p.INDEX_NAME
查询结果为:
| Prod_date | INDEX_NAME | ITEM_VALUE || :—-: | :—-: | :—-: || 2023-01-01 | 商品量 | ...
博客
基于MiraiBot的简单开发(自定义消息)
MiraiBot 简介不写了
功能构想群员可以自定义一些关键词和消息内容,当机器人检测到该关键词时回自动回复关键词对应的消息内容。
功能实现构建一个自定义消息类,来保存关键字和消息内容等信息。监听每一条群消息并与表中关键字匹配,如匹配则查询出自定义内容,发送到对应群内。若群消息与狼宝内置关键词匹配,则优先执行狼宝对应功能,否则不予理会。
为了方便数据入库,使用的Kotlin ORM 框架是 Ktorm 使用说明 仓库链接
自定义消息实体的设计字段: group(群号),kwy(关键词),message(自定义消息),sender(发送者号码)
12345678//top.kagerou.data.CustomizeMessage.ktinterface CustomizeMessage : Entity<CustomizeMessage> { companion object : Entity.Factory<CustomizeMessage>() val group: Long val key: String val mess ...
博客
基于MiraiBot的简单开发(权限管理)
MiraiBot 简介不写了
功能构想最初简单的构想只是用来管理bot会响应那些群的消息,响应那些群员的消息,然后在赋予群内bot管理员,来管理那些群员可以被禁止和bot交互。
这部分并没有设计成 指令的管理,比如开启/关闭某个指令。根本原因是我没有想好怎么实现方便一些。
功能实现群在注册的时候获取到群的各项信息并保存起来,同时给出一个属性open来判断bot是否响应群内消息/事件。
为了方便数据入库,使用的Kotlin ORM 框架是 Ktorm 使用说明 仓库链接
QQ群实体的设计字段: name(群名),number(群号码),open(bot是否响应),registryTime(注册时间)
12345678//top.kagerou.data.Group.ktinterface Group : Entity<Group> { companion object : Entity.Factory<Group>() val number: Long val name: String val open: St ...
技术
Kotlin对于常见的properties和yaml配置文件操作
前言为了配合MiraiBot机器人,对于一些本地持久化的数据读取,本来是想依照狼宝项目使用Redis来做整体的持久化的,但是又怕有服务器迁移之类的问题,所有就摆烂直接使用本地文件IO来做了。
properties文件由于properties文件是纯键值对的关系,所有比较好处理。主要使用的也就是 java.util.Properties 类
操作properties文件prop.load(it) 和 prop.getProperty(“groupId”)
12345678910111213141516171819val file = File("src/main/resources/group.properties")val prop = Properties()//读取文件FileInputStream(file).use { prop.load(it) }//添加/修改属性prop.setProperty("group.name","abcd")//获取属性println(prop.getProperty ...
博客
基于MiraiBot的简单开发(扩展监听方式)
MiraiBot 简介不写了
监听的方式虽然StartBot.kt里面的main函数中可以直接使用 bot.eventChannel.subscribeGroupMessages 来监听到bot的消息事件,但是为了更好的开发或者说监听类型分类,我们可以自定义LintenerHost,通过bot.eventChannel.registerListenerHost方法来注册到Bot的监听频道中。
自定义ListenerHost下面的例子说明了一个简单的群消息监听和文本回复,更多可以监听的事件可以查看Mirai的原文档:事件列表一览
12345678910111213141516171819202122232425262728object BotListenerEvents : SimpleListenerHost( /* override coroutineContext here */ ) { //GroupMessageEvent 普通的群消息 //FriendMessageEvent 好友消息 //GroupRecall 群撤回 //NudgeEve ...