mu_cat

mu_cat

github

零基礎GPTスクリプトの記録

被夸啦哈哈哈

image-20230412152758657

部分スクリーンショット#

image-20230412152741284

image-20230413233141284

コーディングの経験に関する要求(ゼロベース)#

1. 忍耐力#

エラーが続いたり、実行できなかったりしても諦めないでください。本当に、ゆっくりと質問し、真剣に考えれば結果が出ます!

2. 自分が何をしたいのかを明確にする必要があります#

手間をかけることを嫌わず、要求をできるだけ明確に説明し、どの言語を使用するか、どこで使用するか、何を実現するかを明確にする必要があります。

例えば、私は既存の IP 検出と再起動のボットスクリプトを見ましたが、ブロードバンドのマルチダイヤル環境には適用されませんでした。したがって、私が最終的に望んでいるのは、**IP 検出と再起動(マルチダイヤル版)** です。

そして、GPT の特徴は、与えれば与えるほど正確になることです。したがって、元のスクリプトを与えました。もし、ロボット特定の環境で実行する必要がない場合は、これを完全に無視してください。以前に IP 検出と再起動に関する基本的な知識についていくつか質問し、ターミナルで実行できるコードを書いていますが、これは個人の要求によります。

image-20230413233744033

これにより、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 に変更されます。

そこで、私は彼に尋ねました。

image-20230413234553770

この回答により、私は混乱しました。これは何ですか、何か余分な判断ですか、大丈夫ですか、私はこの if ループを理解していないので、続けて尋ねました。

image-20230413234700816

考えた後、これは本当に実現不可能だと思いました。理解できないので、私は彼に問い詰めました!

image-20230413234749703

ここで、バグの原因が解決されませんでした。それはここにあります。私は気づきました、バグの原因は誤って削除された IP です。IP が誤って削除されたため、新しい IP として判断され、コードが成立して実行されます。この場合、私は彼に私の意見を伝え、それをコードに翻訳するように頼みました。この状況では、完全に成立します!

image-20230413235038874

最後に、彼はまだ頑固です!明らかに私が問題を解決したのに、謝罪の一言もありません!

最後に#

自然なプログラミング、100%実現可能、今は成熟したインタラクションが不足しているだけです。脳との直接的な接続に進んでください!

皆さんが実現したいことが実現できることを願っています。

読み込み中...
文章は、創作者によって署名され、ブロックチェーンに安全に保存されています。