微信机器人会有几率封号,临时不开教程
1、前言
正常人每天均匀耗水量为2000-2500毫升,体内物质氧化可生水300毫升,故每日应补充水分2200毫升,包含饮食中的含水量。夏天每日补充水分在3000毫升左右,能力满足人体须要。
如果有个机器人能按时揭示咱们喝水,那该多好啊~~
2、创立一个springboot我的项目
(这个步骤是为小白提供,大佬们间接跳到第三步)
2.1. 新建我的项目
2.2. 抉择springboot我的项目
2.3. 创立实现的我的项目构造如下
3、引入simple-robot机器人依赖
3.1. 在pom.xml文件引入simple-robot依赖
<properties>
<java.version>1.8</java.version>
<simbot.version>2.0.3</simbot.version>
</properties>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>love.forte.simple-robot</groupId>
<artifactId>parent</artifactId>
<version>${simbot.version}</version>
<scope>import</scope>
<type>pom</type>
</dependency>
</dependencies>
</dependencyManagement>
<!--java机器人框架-->
<dependency>
<groupId>love.forte.simple-robot</groupId>
<artifactId>component-mirai-spring-boot-starter</artifactId>
</dependency>
3.2. 配置application.yml文件,应用ANDROID_PAD协定能够放弃手机QQ和机器人同时在线
simbot:
core:
# 机器人的QQ账号与明码(帐号:明码)
bots: 6013505:yinfeng
component:
mirai:
# mirai心跳周期. 过长会导致被服务器断开连接. 单位毫秒。
heartbeat-period-millis: 30000
# 每次心跳时期待后果的工夫.一旦心跳超时, 整个网络服务将会重启 (将耗费约 1s). 除正在进行的工作 (如图片上传) 会被中断外, 事件和插件均不受影响.
heartbeat-timeout-millis: 5000
# 心跳失败后的第一次重连前的等待时间.
first-reconnect-delay-millis: 5000
# 重连失败后, 持续尝试的每次等待时间
reconnect-period-millis: 5000
# 最多尝试多少次重连
reconnection-retry-times: 2147483647
# 应用协定类型。注,此值为枚举类 net.mamoe.mirai.utils.BotConfiguration.MiraiProtocol 的元素值,
# 可选值为:ANDROID_PHONE、ANDROID_PAD、ANDROID_WATCH
protocol: ANDROID_PAD
# 是否敞开mirai的bot logger
no-bot-log: true
# 敞开mirai网络日志
no-network-log: true
# mirai bot log切换应用simbot的log
use-simbot-bot-log: true
# mirai 网络log 切换应用simbot的log
use-simbot-network-log: true
# mirai配置自定义deviceInfoSeed的时候应用的随机种子。默认为1.
device-info-seed: 1
# mirai图片缓存策略,为枚举 love.forte.simbot.component.mirai.configuration.MiraiCacheType 的元素值,
# 可选为 FILE、 MEMORY
cache-type: MEMORY
# 如果配置项 simbot.mirai.cacheType 的值为 FILE,此处为缓存文件的保留目录。为空时默认为零碎长期文件夹。
cache-directory:
# 登录验证码处理器,当登录须要输出验证码的时候可能会用到。
login-solver-type: DEFAULT
# 如果不为空,此处代表指定一个 deviceInfo 的 json文件门路。
dispatcher:
# mirai组件中,对事件进行调度的线程池参数:最大线程数。
core-pool-size: 8
# mirai组件中,对事件进行调度的线程池参数:最大线程数。
maximum-pool-size: 8
# mirai组件中,对事件进行调度的线程池参数:线程存活工夫(毫秒)
keep-alive-time: 1000
3.3 在springboot启动类加上@EnableSimbot注解
/**
* @author yinfeng
* @description 启动类
* @since 2021/12/22 22:50
*/
@EnableSimbot
@EnableScheduling
@SpringBootApplication
@Slf4j
public class RobotApplication {
public static void main(String[] args) {
SpringApplication.run(RobotApplication.class, args);
log.info("机器人启动胜利~~~~");
}
}
3.4 simple-robot机器人官网文档
https://www.yuque.com/simpler…
4、编写定时工作
4.1. 创立一个DrinkNotify.java类
/**
* @author yinfeng
* @description 定时喝水揭示
* @since 2021/12/22 23:32
*/
@Component
@Slf4j
public class DrinkNotify {
@Resource
private BotManager botManager;
@Value("${bello.qq}")
private Set<String> qqSet;
/**
* 喝水语录
*/
static List<String> content;
/**
* 喝水图片
*/
static List<String> images;
static {
content = new ArrayList<>();
images = new ArrayList<>();
log.info("开始加载喝水语录~~~");
// 喝水语录
content.add("俗话说\"女人是水造的\",所以身为女生就要时刻喝水,这样就能够放弃短缺的水分,皮肤、头发就会更有光泽~");
content.add("喝多点水还能够保持身材哦,因为水促成了咱们身材的循环~");
content.add("该喝水了哟,喝多点水整体上也会精神抖擞~");
content.add("该喝水了哟,要多爱护本人,多喝水、多吃陈腐水果蔬菜、尽量保障短缺睡眠。加油!");
content.add("多喝水很简略的话,多喝水对身材好!只有心中牵挂着你们的人才会说你的家人也老说的话:你要多喝水呀!!~");
content.add("天气凛冽干燥。多喝水,留神保暖。少抽烟喝酒吃辣。多惦记我~");
log.info("开始加载喝水图片~~~");
// 喝水图片
images.add("https://gitee.com/yinfeng-code/study-image/raw/master/image/20211224221637.jpeg");
images.add("https://gitee.com/yinfeng-code/study-image/raw/master/image/20211224221739.jpeg");
images.add("https://gitee.com/yinfeng-code/study-image/raw/master/image/20211224221758.jpeg");
images.add("https://gitee.com/yinfeng-code/study-image/raw/master/image/20211224221815.jpeg");
images.add("https://gitee.com/yinfeng-code/study-image/raw/master/image/20211224221834.jpeg");
images.add("https://gitee.com/yinfeng-code/study-image/raw/master/image/20211224221913.jpeg");
images.add("https://gitee.com/yinfeng-code/study-image/raw/master/image/20211224221925.jpeg");
}
/**
* 每一分钟揭示一次: 0 0/1 * * * ?
* 每一小时揭示一次: 0 0 0/1 * * ?
*/
@Scheduled(cron = "0 0 0/1 * * ?")
public void handler() {
Calendar calendar = Calendar.getInstance();
// 获取以后小时
int hour = calendar.get(Calendar.HOUR_OF_DAY);
// 只在早上9点到早晨8点发送音讯揭示
if (hour < 9 || hour > 20) {
return;
}
qqSet.forEach(qq -> {
try {
final String msg = content.get(new Random().nextInt(content.size()));
final String img = String.format("[CAT:image,url=%s,flash=false]", images.get(new Random().nextInt(content.size())));
// 发送随机喝水语录
botManager.getDefaultBot().getSender().SENDER.sendPrivateMsg(qq, msg);
// 发送随机喝水图片
botManager.getDefaultBot().getSender().SENDER.sendPrivateMsg(qq, img);
log.info("正在发送喝水揭示,以后qq={}, 语录={}, img={}", qq, msg, img);
} catch (Exception e) {
log.error("发送喝水揭示异样, qq={}", qq, e);
}
});
}
}
4.2. 在yml文件中配置女神们的QQ号
#配置女神们的QQ号,多个QQ用逗号宰割
bello:
qq: 1332483344,52000012
5、退出智能聊天性能
5.1. 这里次要应用青云客的api进行聊天,官网
http://api.qingyunke.com/
5.2. 封装http工具类
/**
* @author yinfeng
* @description http工具类
* @since 2021/12/23 23:21
*/
public class HttpUtil {
/**
* 向指定URL发送GET办法的申请
*
* @param url 发送申请的URL
* @param param 申请参数,申请参数应该是 name1=value1&name2=value2 的模式。
* @return URL 所代表近程资源的响应后果
*/
public static String sendGet(String url, String param) {
StringBuilder result = new StringBuilder();
BufferedReader in = null;
try {
String urlNameString = url;
if (!StringUtils.isEmpty(param)) {
urlNameString += "?" + param;
}
URL realUrl = new URL(urlNameString);
// 关上和URL之间的连贯
URLConnection connection = realUrl.openConnection();
// 设置通用的申请属性
connection.setRequestProperty("accept", "*/*");
connection.setRequestProperty("connection", "Keep-Alive");
connection.setRequestProperty("user-agent",
"Mozilla/5.0 (iPhone; CPU iPhone OS 13_2_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.0.3 Mobile/15E148 Safari/604.1");
// 建设理论的连贯
connection.connect();
// 定义 BufferedReader输出流来读取URL的响应
in = new BufferedReader(new InputStreamReader(
connection.getInputStream()));
String line;
while ((line = in.readLine()) != null) {
result.append(line);
}
} catch (Exception e) {
System.out.println("发送GET申请出现异常!" + e);
e.printStackTrace();
}
// 应用finally块来敞开输出流
finally {
try {
if (in != null) {
in.close();
}
} catch (Exception e2) {
e2.printStackTrace();
}
}
return result.toString();
}
}
5.3. 创立音讯监听类,反对私聊音讯和群音讯的智能聊天
/**
* @author yinfeng
* @description 机器人监听
* @since 2021/11/6 20:51
*/
@Component
@Slf4j
public class MessageListener {
static final String URL = "http://api.qingyunke.com/api.php";
/**
* 监听私聊音讯
*/
@OnPrivate
public void privateMsg(PrivateMsg privateMsg, MsgSender sender) {
sendMsg(privateMsg, sender, false);
}
/**
* 监听群音讯
*/
@OnGroup
public ReplyAble groupMsg(GroupMsg groupMsg, MsgSender sender) {
// 默认敞开群聊模式,需要的话把正文去掉
// return sendMsg(groupMsg, sender, true);
return null;
}
/**
* 通过青客云封装智能聊天
*
* @param commonMsg commonMsg
* @param sender sender
*/
private ReplyAble sendMsg(MessageGet commonMsg, MsgSender sender, boolean group) {
log.info("智能聊天中~~~,接管音讯:qq={}, msg={}", commonMsg.getAccountInfo().getAccountCode(),
commonMsg.getMsgContent().getMsg());
// MsgSender中存在三大送信器,以及十分多的重载办法。
// 通过get申请调用聊天接口
final String result = HttpUtil.sendGet(URL,
"key=free&appid=0&msg=".concat(commonMsg.getMsgContent().getMsg()));
if (!StringUtils.isEmpty(result)) {
final JSONObject json = JSONObject.parseObject(result);
if (json.getInteger("result") == 0 && !StringUtils.isEmpty(json.getString("content"))) {
final String msg = json.getString("content").replace("{br}", "\n");
log.info("智能聊天中~~~,发送音讯:qq={}, msg={}", commonMsg.getAccountInfo().getAccountCode(), msg);
//发送群音讯
if (group) {
// 参数1:回复的音讯 参数2:是否at当事人
return Reply.reply(msg, true);
}
//发送私聊音讯
sender.SENDER.sendPrivateMsg(commonMsg, msg);
}
}
return null;
}
}
6、测试一下
6.1. 启动我的项目
6.2. 喝水揭示测试
能够看到两个qq都收到了揭示音讯 ,后盾日志也是没问题的
6.3. 智能聊天测试
能够看到聊天性能也是失常的 ,后盾日志也是失常的
7、源码地址
临时无奈监听==单项好友==的音讯,老铁们本人下载源码来玩吧
// 源码地址,下载运行即可
// 也可打成jar包放在服务器始终运行
https://gitee.com/yinfeng-code/java-robot.git
肝文不易,老铁们三连一波反对下吧,谢谢大家了~
下了源码的老铁麻烦点个star哈
8、常见问题解决
8.1. 明码谬误异样
Error(title=登录失败, message=帐号或明码谬误,请从新输出。, errorInfo=)
异样截图如下
解决方案:在application.yml中配置本人的qq账号和明码
8.2. 滑块验证异样
UnsupportedSliderCaptchaException: Mirai 无奈实现滑块验证. 应用协定 ANDROID_PHONE 强制要求滑块验证, 请更换协定后重试. 另请参阅
异样截图如下
解决方案:在application.yml中更换协定为PAD协定或者watch协定试试
如果还不行的话能够参考机器人框架官网文档滑块登录异样
- 尝试进行滑块验证
- 尝试切换账号
- 开启或者敞开设施锁,各种状况都试试
- 换一个网络环境,例如切换为热点
- 用电脑或者手机多挂挂你要用的账号,并养养号后再尝试
- 以上办法都不肯定胜利,或者说,大概率不会胜利。然而目前来看,一段时间过后基本上就会变失常。这段时间可能是几天,运气好可能是几个小时。
8.3 下载我的项目后idea导入异样
解决方案:降级你的IDEA到 2021 或以上版本。具体参考IDEA导包异样报错
发表回复