QQ自动发送消息——维持群聊炽焰

作者的初衷很简单:因为有一天维持很久的群聊炽焰突然没了……于是就下定决心整个能自动发送消息的脚本程序

实现思路目前有三种:

手机端(Qnotified&其他支持java脚本的模块)
Linux端(cq机器人)
windows端(python脚本)
Qnotified&其他框架实现思路
通过直接调用Qn提供的api接口发送消息

丑话先说到前头

这种方法的缺点:

开启脚本后无法进入QQ(解决办法:必须清除QQ和Qn的应用数据。至少在我测试的时候出现了这种情况,并且我采用的方法对我来说有效,框架不同,版本不同,模块不同,环境不同等都可能影响)
因此在意聊天记录等数据慎用,并且清除数据后Qn将恢复默认设置

代码

//InfoStart
//@author: Xiang
//@name: 自动发送群聊消息,维持群聊炽焰
//@version: 0.2
//@label: beta
//@decs: 如题
//InfoEnd

import cc.ioctl.script.QNClient;
import java.util.concurrent.TimeUnit;
import java.text.SimpleDateFormat;
import java.util.Date;

public void onLoad(){
while(true){
SimpleDateFormat sdf = new SimpleDateFormat();
sdf.applyPattern(“yyyy-MM-dd HH:mm:ss a”);
Date date = new Date();// 获取当前时间
QNClient.send(“752099815”,”Qnotified 定时发送消息,维持群聊炽焰”+sdf.format(date),1); //752099815是群号,修改成你想要发送消息的群号
TimeUnit.SECONDS.sleep( 60 ); //等待60秒,即1分钟
}

}

复制保存导入Qn即可

Linux cq机器人
顾名思义,在Linux上安装cq机器人实现自动发送消息

丑话再次说到前头
需要电脑并且需要长时间开机,若没有的话可以使用vps,挂机宝(大概5块钱)或阿里云腾讯云之类的免费学生服务器

推荐一个我自己也在用的挂机宝平台
3.5元一个月

我采用的是go-cqhttp

GitHub项目地址

realease下载地址

按系统需求下载

我部署在树莓派上

wget https://github.com/Mrs4s/go-cqhttp/releases/download/v1.0.0-beta2/go-cqhttp_1.0.0-beta2_linux_arm64.deb

下载完毕后sudo dpkg -i go-cqhttp_1.0.0-beta2_linux_arm64.deb

安装完毕后直接go-cqhttp

*次用会报错缺少配置文件,等它自动生成完毕后按ctrl+c
再去编辑config.yml

vim config.yml

填写你的QQ账号和密码

按i进入编辑模式

编辑完毕先按esc 再输入英文冒号 再输入wq即可保存并退出

此时再使用go-cqhttp
若需要登录验证按提示操作即可

cq api官方文档

我写了个python脚本

import requests,time,os,datetime

while True:
now=str(datetime.datetime.now())
print(now)
os.system(“curl ‘127.0.0.1:5700/send_group_msg?&group_id=428686902&message=go-cqhttp\u5b9a\u65f6\u53d1\u9001\u6d88\u606f\uff08\u7ef4\u6301\u7fa4\u804a\u70bd\u7130)'”)
time.sleep(3600)

每1小时发送一次消息

PS:若使用ssh启动go-cqhttp,请记得使用screen或nohup命令避免关闭ssh后程序被杀

windows python脚本
这个稍微有些复杂

同样需要电脑长时间开机,挂机宝网址(不是很推荐买windows挂机宝,因为性能过于羸弱体验很糟糕)

#依赖于pywin32库,请记得pip install pywin32

import time
import win32clipboard as w
import win32gui,win32con

def setText(aString):
”’将要发送的文字复制”’
w.OpenClipboard()
w.EmptyClipboard()
w.SetClipboardData(win32con.CF_UNICODETEXT, aString)
w.CloseClipboard()

def send_Mess(hwnd):
”’粘贴并回车发送”’
win32gui.PostMessage(hwnd,win32con.WM_PASTE, 0, 0)
time.sleep(0.3)
win32gui.PostMessage(hwnd,win32con.WM_KEYDOWN,win32con.VK_RETURN,0)
win32gui.PostMessage(hwnd,win32con.WM_KEYUP,win32con.VK_RETURN,0)

windowtitle = ‘巷子的神秘测试群’ #窗口标题,修改成你QQ群聊的名字(注意!!!打开多个聊天窗口时标题会变成xx等x个会话)
hwnd = win32gui.FindWindow(None, windowtitle) #按窗口标题寻找窗口句柄
while True:
if hwnd>0:
print(‘找到%s’%windowtitle)
now= time.strftime(‘%Y-%m-%d %H:%M:%S’,time.localtime(time.time())) #此条信息发送的时间
setText(‘Python定时发送信息,维持群聊炽焰 :’+now)
send_Mess(hwnd)
time.sleep(10) #等待600秒,即10分钟
else:
print(‘没找到%s’%windowtitle)

”’
hwnd_title = dict()
def get_all_hwnd(hwnd,mouse):
if win32gui.IsWindow(hwnd) and win32gui.IsWindowEnabled(hwnd) and win32gui.IsWindowVisible(hwnd):
hwnd_title.update({hwnd:win32gui.GetWindowText(hwnd)})
win32gui.EnumWindows(get_all_hwnd, 0)

for h,t in hwnd_title.items():
if t is not “”:
print(h, t)
”’
#如果你仍然没有成功获得窗口句柄,可以使用此段代码打印出当前所有窗口标题名与句柄