gamble.js
https://gyazo.com/a0f11c76764fa9820a3fafd7c424e60b
まだ未完成cFQ2f7LRuLYP.icon
一日一回起動&参照できるような形にしたい
外部に変数の値を格納する場所を求めないといけない気がする
そして聞いた
code:script.js
// コードを実行する関数
const callback = () => {
// 現在の日時を取得
const now = new Date();
// 現在の日付を取得
const currentDay = now.getDate();
// localStorageから保存したランダムな開始時刻を取得
const storedRandomStartHour = localStorage.getItem('randomStartHour');
// もしランダムな開始時刻が保存されているなら
if (storedRandomStartHour !== null) {
// 保存した日付とランダムな開始時刻を取得
const savedDay = parseInt(localStorage.getItem('savedDay'), 10);
const randomStartHour = parseInt(storedRandomStartHour, 10);
// 翌日になったら新しいランダムな開始時刻を生成して保存
if (currentDay !== savedDay) {
const newRandomStartHour = Math.floor(Math.random() * 24);
localStorage.setItem('randomStartHour', newRandomStartHour);
localStorage.setItem('savedDay', currentDay);
}
// 特定の条件をチェックしてメッセージを表示
if (scrapbox.Project.name !== "villagepump") return;
if (randomStartHour <= now.getHours() && now.getHours() < randomStartHour + 1) return;
const message = 井戸端に入れるのは${randomStartHour} 時から60分間となります。;
document.body.textContent = message;
}
// もしランダムな開始時刻が保存されていないなら
else {
// 新しいランダムな開始時刻を生成して保存
const randomStartHour = Math.floor(Math.random() * 24);
localStorage.setItem('randomStartHour', randomStartHour);
localStorage.setItem('savedDay', currentDay);
}
};
// 初回実行
callback();
// 1分ごとに処理を実行
setInterval(callback, 60 * 1000);
課題
よくないcFQ2f7LRuLYP.icon
いずれ一回参照にしたい
1d20で20の目が出たら花火が打ち上がるとか
1を出したらひどい目に合うとか(例:プロジェクト全消し)
使用者の意思が介在しない点も面白くない
半丁決めて当たったら井戸端に入れる、という方がよっぽどギャンブル
一日一回半丁決定して判定、当たらば1時間許可、外れたらログイン不可というのが良さそう
作製難易度としても
localstorage内にフラグを立てれば良い
参照
必要そうな処理
✅ランダムな日時を出す関数
✅そのランダムな日時がいつなのか表示する機能
Javascriptの知識
ひたすらGPT先生に教えを乞うた
たたき台
code:random.js
const callback = () => {
const now = new Date();
const randomStartHour = Math.floor(Math.random() * 24); // 0から23のランダムな時刻
if (scrapbox.Project.name !== "villagepump") return;
if (randomStartHour <= now.getHours() && now.getHours() < randomStartHour + 1) return;
const message = 井戸端に入れるのは${randomStartHour} 時から60分間となります。; // 現在の時刻をメッセージに組み込む
document.body.textContent = message;
};
callback();
// 1分ごとに時刻を確認
setInterval(callback, 60 * 1000);
問題点
何回でもチャレンジできる→開くまでリロードし続ければいい→ガチャ!!!!!
一日日時を保持しておければよい
聞いたcFQ2f7LRuLYP.icon
GPT-3.5.icon新しいスクリプトを作成し、ランダムな時刻を保持しておく方法を以下に示します。このスクリプトは、特定のサイトへのアクセスを制御するために使用されます。スクリプトは初心者でも理解しやすいようにコメントで説明を追加しています。
code:random2.js
// 保持するランダムな時刻
let randomStartHour = null;
// ランダムな時刻を初期化する関数
const initializeRandomStartHour = () => {
randomStartHour = Math.floor(Math.random() * 24); // 0から23のランダムな時刻
};
// コールバック関数
const callback = () => {
const now = new Date();
// 初回実行時にランダムな時刻を初期化
if (randomStartHour === null) {
initializeRandomStartHour();
}
if (scrapbox.Project.name !== "villagepump") return;
// 保持しているランダムな時刻を使用して制御
if (randomStartHour <= now.getHours() && now.getHours() < randomStartHour + 1) return;
const message = 井戸端に入れるのは${randomStartHour} 時から60分間となります。;
document.body.textContent = message;
const remainingTime = 5000; // 5秒の遅延時間
let countdown = remainingTime / 1000; // ミリ秒を秒に変換
document.body.textContent += ${countdown}秒後に遷移します...
// カウントダウン表示と遷移
const countdownInterval = setInterval(() => {
countdown--;
document.body.textContent = 井戸端に入れるのは${randomStartHour} 時から60分間となります。${countdown}秒後に遷移します...;
if (countdown === 0) {
clearInterval(countdownInterval);
}
}, 1000); // 1秒ごとに更新
};
// 初回実行
callback();
// 1分ごとに時刻を確認
setInterval(callback, 60 * 1000);
この改良されたスクリプトでは、最初にランダムな時刻を保持するための変数 randomStartHour を導入しました。initializeRandomStartHour 関数は初回に1度だけ呼び出され、ランダムな時刻を初期化します。その後、コールバック関数内でこの保持されたランダムな時刻を使用して制御を行います。
こうすることで、毎回スクリプトを実行するたびに新しいランダムな時刻が生成されることはなくなります。初回実行時に1度だけランダムな時刻が生成され、その後はその時刻を使用してアクセス制御を行うようになります。
とはいえ起動するたびにランダムな時刻が入れ替わるのは変わらなかったcFQ2f7LRuLYP.icon
userscript.icon