被夸啦哈哈哈
部分スクリーンショット#
コーディングの経験に関する要求(ゼロベース)#
1. 忍耐力#
エラーが続いたり、実行できなかったりしても諦めないでください。本当に、ゆっくりと質問し、真剣に考えれば結果が出ます!
2. 自分が何をしたいのかを明確にする必要があります#
手間をかけることを嫌わず、要求をできるだけ明確に説明し、どの言語を使用するか、どこで使用するか、何を実現するかを明確にする必要があります。
例えば、私は既存の IP 検出と再起動のボットスクリプトを見ましたが、ブロードバンドのマルチダイヤル環境には適用されませんでした。したがって、私が最終的に望んでいるのは、**IP 検出と再起動(マルチダイヤル版)** です。
そして、GPT の特徴は、与えれば与えるほど正確になることです。したがって、元のスクリプトを与えました。もし、ロボット特定の環境で実行する必要がない場合は、これを完全に無視してください。以前に IP 検出と再起動に関する基本的な知識についていくつか質問し、ターミナルで実行できるコードを書いていますが、これは個人の要求によります。
これにより、GPT は私に 90%近い答えを提供しましたが、残りはバグ修正のプロセスです。実行時にエラーが発生した場合は、そのままコピーして貼り付けます。
3. 自分の考えを失わないでください#
エラーが発生するたびにコピーして GPT に貼り付けるだけでなく、多くの場合、そのロジック自体に問題があることに気付く必要があります。その場合は、新しい突破口を見つけるために自分自身で問題を発見し、探す必要があります。私の場合、IP の誤削除の問題に遭遇しました。元のコードは次のようになります。
/**
* @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('重启'));
};
ここでのバグは次のとおりです。
1 つの IP の変更により 2 回の再起動が発生します。マルチダイヤル環境では、2 つの IP が存在します。スクリプトが 2 つの IP(a、b)を取得した場合、a が前にあり、b が後にあるとします。IP が変化した場合、例えば b が c に変わった場合、スクリプトはデータベース内のデータを b、c に変更し、再起動を実行します。しかし、c は b から変化してきたので、スクリプトは再び変化していない a を検出し、IP が変化したと判断して再起動を実行します。データベースが正常な c、a に変更されます。
そこで、私は彼に尋ねました。
この回答により、私は混乱しました。これは何ですか、何か余分な判断ですか、大丈夫ですか、私はこの if ループを理解していないので、続けて尋ねました。
考えた後、これは本当に実現不可能だと思いました。理解できないので、私は彼に問い詰めました!
ここで、バグの原因が解決されませんでした。それはここにあります。私は気づきました、バグの原因は誤って削除された IP です。IP が誤って削除されたため、新しい IP として判断され、コードが成立して実行されます。この場合、私は彼に私の意見を伝え、それをコードに翻訳するように頼みました。この状況では、完全に成立します!
最後に、彼はまだ頑固です!明らかに私が問題を解決したのに、謝罪の一言もありません!
最後に#
自然なプログラミング、100%実現可能、今は成熟したインタラクションが不足しているだけです。脳との直接的な接続に進んでください!
皆さんが実現したいことが実現できることを願っています。