被夸啦哈哈哈
不要一直报错或者跑不起来就放弃,真的,慢慢问,用心想,会有结果的!
不要嫌麻烦,尽量清晰的描述你的诉求,用什么语言,在哪里用,要通过实现什么,
比如我我是看了一个现成的检测ip重启的机器人脚本,但是并不适用宽带多拨的环境,所以这就我最终想要的,ip检测重启(多拨版)
而且,gpt的特性就是,你给它越多,他给你越准确,于是我就给他了本来的脚本。如果你不需要在机器人特定环境中运行就完全忽略这一点,我之前已经问了一些关于ip检测重启的基础知识,已经写出了可以跑在终端的代码,这个看个人需求。
这样,GPT就给我了一个接近答案90%的结果了,剩下就是修bug的过程。运行报错直接复制粘贴给它。
不要一直报错就一直复制粘贴给GPT看,很多时候,它的逻辑本身就有问题,这个时候,就需要你自己去发现问题去寻找一个新的突破点,比如我这里就遇到了一个检测ip误删除的问题,原本代码如下
/**
* @author muzi
* @name ip变动重启bncr以及docker
* @origin muzi
* @version 1.0.5
* @description ip变动重启for双拨
* @rule ^ip$
* @priority 1000
* @admin true
* @public false
* @disable false
* @cron 0 *\/5 * * * *
*/
const axios = require('axios');
const AmTool = require('./mod/AmTool');
const sysDB = new BncrDB('system');
const { exec } = require('child_process');
async function getPublicIp() {
try {
const response = await axios.get('https://ip.useragentinfo.com/json', { timeout: 10000 }); // 设置 10 秒超时
const data = response.data;
return data.ip;
} catch (error) {
console.error('获取公共IP地址时发生错误:', error);
return null;
}
}
function restartContainer(containerNameOrId) {
exec(`docker restart ${containerNameOrId}`, (error, stdout, stderr) => {
if (error) {
console.error(`Error restarting container: ${error}`);
} else {
console.log(`Container restarted: ${stdout}`);
}
});
}
module.exports = async s => {
const v4DB = (await sysDB.get('publicIpv4')) || [];
const lastCheckedIp = (await sysDB.get('lastCheckedIp')) || '';
const nowV4ip = await getPublicIp();
if (nowV4ip === null) {
// 获取 IP 失败,不执行后续操作
return;
}
let logs = `上次ip:${(lastCheckedIp && AmTool.Masking(lastCheckedIp, 5, 6)) || '空'}\n`;
logs += `本次ip:${(nowV4ip && AmTool.Masking(nowV4ip, 5, 6)) || '空'}\n`;
let open = false;
if (!v4DB.includes(nowV4ip)) {
if (v4DB.length >= 2) {
logs += '进行bncr与docker重启...';
open = true;
// 删除旧的 IP 地址
v4DB.shift();
// 重启指定的 Docker 容器,旨在解决ws反向链接假死
restartContainer('go-cqhttp');
}
// 保存新的 IP 地址
v4DB.push(nowV4ip);
await sysDB.set('publicIpv4', v4DB);
await sysDB.set('lastCheckedIp', nowV4ip);
}
await s.reply(logs);
open && (s.getFrom() === 'cron' ? sysMethod.inline('重启') : s.inlineSugar('重启'));
};
在这里有一个bug就是,
一次ip变动导致两次重启,在双拨环境中,存在两个ip,如果脚本已经通过ip检测获取两个ip,a,b,a在前b在后,当ip变化时,比如b变成了c,脚本便会执行数据库内数据变为b,c,并执行重启,但是,c由b变化而来,所以脚本再次检测到没有变化的a时,又会判断为ip变化而执行重启,数据库才变为正常的c,a。
于是我就问他咯
这个回答给我弄蒙了,这是什么什么,额外的判断,没关系吧,我不懂这个if循环所以继续问
在我思考之后,这真的不可行,我觉得不可行,我想不通。我就质问它!
这里始终没有解决bug的源因,就是在这,我开窍了,bug产生的原因就是误删除的ip,ip被误删除了所以才会再次被判断为新ip并导致代码成立并运行,这个时候我就组织语言告诉了它我的看法,并且让他翻译成代码,在这种情况下,百分百成立!
最后,他还嘴硬!明明是我解决了问题,一句道歉都没有!
自然编程,100%可实现,现在只是缺乏成熟的交互,直接快进到脑机!
祝愿大家都能实现想实现的东西。