GithubHelp home page GithubHelp logo

ikabu's Introduction

Contribution Stats

ikabu's People

Contributors

dependabot[bot] avatar koi3man avatar komacha avatar root-lump avatar shngmsw avatar yumaito avatar

Stargazers

 avatar  avatar  avatar

Watchers

 avatar

Forkers

yumaito

ikabu's Issues

フェスのロールカラーのデータ取得について

  • currentFestにチームごとのカラーコードがあるからそこから自動化するかどうかを要検討
  • 次のフェスも同じidで特定できるようなら検討する
  • フェス開始1日前からしかデータ取れないことが懸念点
"currentFest": {
"id": "RmVzdC1VUzpKVUVBLTAwMDAx",
"title": "What would you bring to a deserted island?",
"startTime": "2022-09-24T00:00:00Z",
"endTime": "2022-09-26T00:00:00Z",
"midtermTime": "2022-09-25T00:00:00Z",
"state": "SCHEDULED",
"teams": [
{
"id": "RmVzdFRlYW0tVVM6SlVFQS0wMDAwMTpBbHBoYQ==",
"color": {
"a": 1,
"b": 0.972549021,
"g": 0.0980392173,
"r": 0.541176498
},
"myVoteState": null,
"role": null
},
{
"id": "RmVzdFRlYW0tVVM6SlVFQS0wMDAwMTpCcmF2bw==",
"color": {
"a": 1,
"b": 0.0941176489,
"g": 0.443137288,
"r": 0.749019623
},
"myVoteState": null,
"role": null
},
{
"id": "RmVzdFRlYW0tVVM6SlVFQS0wMDAwMTpDaGFybGll",
"color": {
"a": 1,
"b": 0.368627489,
"g": 0.752941191,
"r": 0.160784304
},
"myVoteState": null,
"role": null
}
],
"tricolorStage": {
"name": "Hammerhead Bridge",
"image": {
"url": "https://splatoon3.ink/assets/splatnet/stage_img/icon/low_resolution/1db8ab338b64b464df50e7f9e270e59423ff8caac6f09679a24f1b7acf3a82f3_1.png"
},
"id": "VnNTdGFnZS0xMA=="
}
},
"currentPlayer": {},
"vsStages": {
"nodes": [
{
"stageId": 1,
"id": "VnNTdGFnZS0x",
"originalImage": {
"url": "https://splatoon3.ink/assets/splatnet/stage_img/icon/high_resolution/35f9ca08ccc2bf759774ab2cb886567c117b9287875ca92fb590c1294ddcdc1e_0.png"
},
"name": "Scorch Gorge",
"stats": null
},
{
"stageId": 2,
"id": "VnNTdGFnZS0y",
"originalImage": {
"url": "https://splatoon3.ink/assets/splatnet/stage_img/icon/high_resolution/898e1ae6c737a9d44552c7c81f9b710676492681525c514eadc68a6780aa52af_0.png"
},
"name": "Eeltail Alley",
"stats": null
},
{
"stageId": 3,
"id": "VnNTdGFnZS0z",
"originalImage": {
"url": "https://splatoon3.ink/assets/splatnet/stage_img/icon/high_resolution/8dc2f16d39c630bab40cead5b2485ca3559e829d0d3de0c2232c7a62fefb5fa9_0.png"
},
"name": "Hagglefish Market",
"stats": null
},
{
"stageId": 4,
"id": "VnNTdGFnZS00",
"originalImage": {
"url": "https://splatoon3.ink/assets/splatnet/stage_img/icon/high_resolution/9b1c17b2075479d0397d2fb96efbc6fa3a28900712920e5fe1e9dfc59c6abc5c_0.png"
},
"name": "Undertow Spillway",
"stats": null
},
{
"stageId": 6,
"id": "VnNTdGFnZS02",
"originalImage": {
"url": "https://splatoon3.ink/assets/splatnet/stage_img/icon/high_resolution/de1f212e9ff0648f36cd3b8e0917ef36b3bd51445159297dcb948f34a09f2f05_0.png"
},
"name": "Mincemeat Metalworks",
"stats": null
},
{
"stageId": 10,
"id": "VnNTdGFnZS0xMA==",
"originalImage": {
"url": "https://splatoon3.ink/assets/splatnet/stage_img/icon/high_resolution/1db8ab338b64b464df50e7f9e270e59423ff8caac6f09679a24f1b7acf3a82f3_0.png"
},
"name": "Hammerhead Bridge",
"stats": null
},
{
"stageId": 11,
"id": "VnNTdGFnZS0xMQ==",
"originalImage": {
"url": "https://splatoon3.ink/assets/splatnet/stage_img/icon/high_resolution/b9d8cfa186d197a27e075600a107c99d9e21646d116730f0843e0fff0aaba7dd_0.png"
},
"name": "Museum d'Alfonsino",
"stats": null
},
{
"stageId": 12,
"id": "VnNTdGFnZS0xMg==",
"originalImage": {
"url": "https://splatoon3.ink/assets/splatnet/stage_img/icon/high_resolution/8273118c1ffe1bf6fe031c7d8c9795dab52632c9b76e8e9f01f644ac5ae0ccc0_0.png"
},
"name": "Mahi-Mahi Resort",
"stats": null
},
{
"stageId": 13,
"id": "VnNTdGFnZS0xMw==",
"originalImage": {
"url": "https://splatoon3.ink/assets/splatnet/stage_img/icon/high_resolution/40aba8b36a9439e2d670fde5b3478819ea8a94f9e503b9d783248a5716786f35_0.png"
},
"name": "Inkblot Art Academy",
"stats": null
},
{
"stageId": 14,
"id": "VnNTdGFnZS0xNA==",
"originalImage": {
"url": "https://splatoon3.ink/assets/splatnet/stage_img/icon/high_resolution/48684c69d5c5a4ffaf16b712a4895545a8d01196115d514fc878ce99863bb3e9_0.png"
},
"name": "Sturgeon Shipyard",
"stats": null
},
{
"stageId": 15,
"id": "VnNTdGFnZS0xNQ==",
"originalImage": {
"url": "https://splatoon3.ink/assets/splatnet/stage_img/icon/high_resolution/a8ba96c3dbd015b7bc6ea4fa067245c4e9aee62b6696cb41e02d35139dd21fe7_0.png"
},
"name": "MakoMart",
"stats": null
},
{
"stageId": 16,
"id": "VnNTdGFnZS0xNg==",
"originalImage": {
"url": "https://splatoon3.ink/assets/splatnet/stage_img/icon/high_resolution/61ea801fa4ed32360dcaf83986222ded46a72dbf56194acc6d0cf4659a92ba85_0.png"
},
"name": "Wahoo World",
"stats": null
}
]
}

募集のホストへの通知

ホストがVCに接続している場合はtext in voiceにメンション付きで通知
VCに接続していない場合は募集チャンネルへ通知

ランダムマッチングの募集中にherokuの再起動が入るとタイマーが消える問題

DBで管理するようにする
random_matching_messageテーブル

  • botの募集メッセージidを管理

random_matching_reactionsテーブル

  • 募集メッセージにリアクションしたときにuser_idを記録

GASトリガー

  • 毎時30分
    • 募集コマンドをwebhookで投稿
    • 処理終了時に全データ削除
  • 毎時55分
    • 募集の〆コマンドをwebhookで投稿
    • random_matching_messageを検索し、1件もない=タイマーでうまくいってたらメッセージが削除されているはずなので何もしない
    • random_matching_messageにデータがあった場合は、random_matching_reactionsにあるuser_idを使ってチーム分けを投稿
    • 処理終了時に全データ削除

リアクション追加イベント

  • index.jsでイベントを拾って実施
     - random_matching_reactionsにメッセージidとuseridをinsert

リアクション削除イベント

  • index.jsでイベントを拾って実施
     - random_matching_reactionsからメッセージidとuseridをdelete

roleManagerのユーザーIDとユーザータグの判定に不具合あり

roleManager.js

        if (memberId.length == 18) {
            member = await guild.members.cache.get(memberId);
        } else {
            member = await guild.members.cache.find((member) => member.user.tag === memberId);
        }
  • snowflakeの桁数が19桁になったので対応必要
  • そもそもユーザータグ形式でちょうど18桁の場合もtrueになるので数字のみかどうかを判定する必要あり

AbortError:member missingをwarningログとして出力

errorだと通知が飛ぶのでcatchしてwarningにラップしてログ出力する

[[WARN] MemberManager] member missing
2022-12-15 00:49:33.889 JST
node:events:842
 reject(new AbortError());
 ^
AbortError: The operation was aborted
 at abortListener (node:events:842:14)
 at EventTarget.<anonymous> (node:events:878:47)
 at EventTarget.[nodejs.internal.kHybridDispatch] (node:internal/event_target:559:20)
 at EventTarget.dispatchEvent (node:internal/event_target:504:26)
 at abortSignal (node:internal/abort_controller:97:10)
 at AbortController.abort (node:internal/abort_controller:122:5)
 at Timeout.<anonymous> (/home/bukichi/main/ikabu/node_modules/@discordjs/voice/dist/index.js:1931:39)
 at listOnTimeout (node:internal/timers:557:17)
 at processTimers (node:internal/timers:500:7) {
 code: 'ABORT_ERR'
}

フェス期間を含むstageinfoでエラー

let league_data = await getLeagueData(data, i);

getLeagueDataを呼び出す前にcheckFesしないとvsRuleが取れなくて落ちる

async function getLeagueEmbed(data) {
    const stageEmbed = new Discord.EmbedBuilder().setTitle('ステージ情報');
    const num = getLeagueList(data.schedule).length;
    for (let i = 0; i < num; i++) {
        let league_data = await getLeagueData(data, i);
        let stage;
        let rule;
        if (checkFes(data.schedule, i)) {
            rule = 'フェス期間中';
            stage = 'フェス期間中はお休みでし';
        } else {
            rule = league_data.rule;
            stage = league_data.stage1 + '/' + league_data.stage2;
        }

        const league_start_date = formatDatetime(league_data.startTime, dateformat.ymdwhm);
        const league_end_date = formatDatetime(league_data.endTime, dateformat.hm);
        let name = league_start_date + '-' + league_end_date + ' 【' + rule + '】';
        stageEmbed.addFields([{ name: name, value: stage }]);
    }
    stageEmbed.setTimestamp();
    stageEmbed.setFooter({ text: 'StageInfo by splatoon3.ink' });
    return stageEmbed;
}

フォーラム内でdispandarが動くとエラーが発生する

2022-09-15T03:29:24.680536+00:00 app[worker.1]: if (msg.member.permissions.has('ADMINISTRATOR') && suggestionChannelParentId == msg.channel.parent.id && msg.content === '!close') {
2022-09-15T03:29:24.680537+00:00 app[worker.1]: ^
2022-09-15T03:29:24.680538+00:00 app[worker.1]:
2022-09-15T03:29:24.680538+00:00 app[worker.1]: TypeError: Cannot read properties of null (reading 'id')
2022-09-15T03:29:24.680539+00:00 app[worker.1]: at Object.suggestionBoxArchive [as archive] (/app/app/reaction/suggestion-box.js:35:108)
2022-09-15T03:29:24.680540+00:00 app[worker.1]: at Client.<anonymous> (/app/app/index.js:77:19)
2022-09-15T03:29:24.680540+00:00 app[worker.1]: at Client.emit (node:events:394:28)
2022-09-15T03:29:24.680540+00:00 app[worker.1]: at MessageCreateAction.handle (/app/node_modules/discord.js/src/client/actions/MessageCreate.js:26:14)
2022-09-15T03:29:24.680541+00:00 app[worker.1]: at Object.module.exports [as MESSAGE_CREATE] (/app/node_modules/discord.js/src/client/websocket/handlers/MESSAGE_CREATE.js:4:32)
2022-09-15T03:29:24.680542+00:00 app[worker.1]: at WebSocketManager.handlePacket (/app/node_modules/discord.js/src/client/websocket/WebSocketManager.js:346:31)
2022-09-15T03:29:24.680542+00:00 app[worker.1]: at WebSocketShard.onPacket (/app/node_modules/discord.js/src/client/websocket/WebSocketShard.js:478:22)
2022-09-15T03:29:24.680542+00:00 app[worker.1]: at WebSocketShard.onMessage (/app/node_modules/discord.js/src/client/websocket/WebSocketShard.js:317:10)
2022-09-15T03:29:24.680543+00:00 app[worker.1]: at WebSocket.onMessage (/app/node_modules/ws/lib/event-target.js:199:18)
2022-09-15T03:29:24.680544+00:00 app[worker.1]: at WebSocket.emit (node:events:394:28)
2022-09-15T03:29:24.680544+00:00 app[worker.1]: at Receiver.receiverOnMessage (/app/node_modules/ws/lib/websocket.js:1169:20)
2022-09-15T03:29:24.680544+00:00 app[worker.1]: at Receiver.emit (node:events:394:28)
2022-09-15T03:29:24.680545+00:00 app[worker.1]: at Receiver.dataMessage (/app/node_modules/ws/lib/receiver.js:528:14)
2022-09-15T03:29:24.680545+00:00 app[worker.1]: at Receiver.getData (/app/node_modules/ws/lib/receiver.js:446:17)
2022-09-15T03:29:24.680545+00:00 app[worker.1]: at Receiver.startLoop (/app/node_modules/ws/lib/receiver.js:148:22)
2022-09-15T03:29:24.680546+00:00 app[worker.1]: at Receiver._write (/app/node_modules/ws/lib/receiver.js:83:10)
2022-09-15T03:29:24.805382+00:00 heroku[worker.1]: Process exited with status 1
2022-09-15T03:29:24.867381+00:00 heroku[worker.1]: State changed from up to crashed
2022-09-15T03:29:34.435057+00:00 heroku[worker.1]: State changed from crashed to down
2022-09-15T03:29:34.286712+00:00 app[api]: Scaled to web@0:Free worker@0:Free by user [email protected]

kansenコマンド使うと落ちる

Jun 09 06:40:23 [discordbot-ikabu][app/worker.1] /app/node_modules/js-combinatorics/commonjs/combinatorics.js:37
Jun 09 06:40:23 [discordbot-ikabu][app/worker.1]     [n, k] = [_BI(n), _BI(k)];
Jun 09 06:40:23 [discordbot-ikabu][app/worker.1]               ^
Jun 09 06:40:23 [discordbot-ikabu][app/worker.1] SyntaxError: Cannot convert 1,2,3,4,5,6,7,8,9,10 to a BigInt
Jun 09 06:40:23 [discordbot-ikabu][app/worker.1]     at BigInt (<anonymous>)
Jun 09 06:40:23 [discordbot-ikabu][app/worker.1]     at permutation (/app/node_modules/js-combinatorics/commonjs/combinatorics.js:37:15)
Jun 09 06:40:23 [discordbot-ikabu][app/worker.1]     at Object.combination (/app/node_modules/js-combinatorics/commonjs/combinatorics.js:57:19)
Jun 09 06:40:23 [discordbot-ikabu][app/worker.1]     at handleKansen (/app/app/cmd/kansen.js:8:29)
Jun 09 06:40:23 [discordbot-ikabu][app/worker.1]     at Object.call (/app/app/handler.js:37:13)
Jun 09 06:40:23 [discordbot-ikabu][app/worker.1]     at Client.<anonymous> (/app/app/index.js:54:13)
Jun 09 06:40:23 [discordbot-ikabu][app/worker.1]     at Client.emit (node:events:394:28)
Jun 09 06:40:23 [discordbot-ikabu][app/worker.1]     at MessageCreateAction.handle (/app/node_modules/discord.js/src/client/actions/MessageCreate.js:26:14)
Jun 09 06:40:23 [discordbot-ikabu][app/worker.1]     at Object.module.exports [as MESSAGE_CREATE] (/app/node_modules/discord.js/src/client/websocket/handlers/MESSAGE_CREATE.js:4:32)
Jun 09 06:40:23 [discordbot-ikabu][app/worker.1]     at WebSocketManager.handlePacket (/app/node_modules/discord.js/src/client/websocket/WebSocketManager.js:346:31)
Jun 09 06:40:23 [discordbot-ikabu][app/worker.1]     at WebSocketShard.onPacket (/app/node_modules/discord.js/src/client/websocket/WebSocketShard.js:478:22)
Jun 09 06:40:23 [discordbot-ikabu][app/worker.1]     at WebSocketShard.onMessage (/app/node_modules/discord.js/src/client/websocket/WebSocketShard.js:317:10)
Jun 09 06:40:23 [discordbot-ikabu][app/worker.1]     at WebSocket.onMessage (/app/node_modules/ws/lib/event-target.js:199:18)
Jun 09 06:40:23 [discordbot-ikabu][app/worker.1]     at WebSocket.emit (node:events:394:28)
Jun 09 06:40:23 [discordbot-ikabu][app/worker.1]     at Receiver.receiverOnMessage (/app/node_modules/ws/lib/websocket.js:1169:20)
Jun 09 06:40:23 [discordbot-ikabu][app/worker.1]     at Receiver.emit (node:events:394:28)

イカ部歴をプロフィールに進化

データベースからフレンドコード引っ張ってくる
ロールアイコンをバッジとして表示
チャットカウンターを設置(or チャットカウントからレベリング)
なんかDB使えたら好きな武器とか入れても良い
サポーターはバッジに加えてなんか枠とかつける

snowflakeの桁数増えた影響でdispandarがエラー

URL展開するときにエラー発生

2022-07-27T07:34:25.277342+00:00 app[worker.1]: DiscordAPIError: Unknown Message
2022-07-27T07:34:25.277343+00:00 app[worker.1]: at RequestHandler.execute (/app/node_modules/discord.js/src/rest/RequestHandler.js:350:13)
2022-07-27T07:34:25.277344+00:00 app[worker.1]: at processTicksAndRejections (node:internal/process/task_queues:96:5)
2022-07-27T07:34:25.277345+00:00 app[worker.1]: at async RequestHandler.push (/app/node_modules/discord.js/src/rest/RequestHandler.js:51:14)
2022-07-27T07:34:25.277346+00:00 app[worker.1]: at async MessageManager._fetchId (/app/node_modules/discord.js/src/managers/MessageManager.js:221:18)
2022-07-27T07:34:25.277346+00:00 app[worker.1]: at async extractMessages (/app/app/event/dispandar.js:38:22)
2022-07-27T07:34:25.277346+00:00 app[worker.1]: at async Object.dispand (/app/app/event/dispandar.js:10:20) {
2022-07-27T07:34:25.277347+00:00 app[worker.1]: method: 'get',
2022-07-27T07:34:25.277348+00:00 app[worker.1]: path: '/channels/561939130645479434/messages/100175348215763767',
2022-07-27T07:34:25.277348+00:00 app[worker.1]: code: 10008,
2022-07-27T07:34:25.277348+00:00 app[worker.1]: httpStatus: 404,
2022-07-27T07:34:25.277349+00:00 app[worker.1]: requestData: { json: undefined, files: [] }
2022-07-27T07:34:25.277349+00:00 app[worker.1]: }
2022-07-27T07:34:25.407660+00:00 heroku[worker.1]: Process exited with status 1
2022-07-27T07:34:25.554864+00:00 heroku[worker.1]: State changed from up to crashed

環境変数設定関連バグ

  • 環境変数削除コマンドを使った後にisNotEmptyで判定かけるとそのまますり抜ける。
  • 一度環境変数設定コマンドを使用した後、環境変数の設定ファイルに追記すると改行される(ファイル末尾だけ改行しないようにする必要あり)

DiscordAPIError: Unknown Memberが発生する

2022-09-25T02:00:51.918041+00:00 app[worker.1]: DiscordAPIError: Unknown Member
2022-09-25T02:00:51.918050+00:00 app[worker.1]: at RequestHandler.execute (/app/node_modules/discord.js/src/rest/RequestHandler.js:350:13)
2022-09-25T02:00:51.918051+00:00 app[worker.1]: at runMicrotasks (<anonymous>)
2022-09-25T02:00:51.918051+00:00 app[worker.1]: at processTicksAndRejections (node:internal/process/task_queues:96:5)
2022-09-25T02:00:51.918052+00:00 app[worker.1]: at async RequestHandler.push (/app/node_modules/discord.js/src/rest/RequestHandler.js:51:14)
2022-09-25T02:00:51.918052+00:00 app[worker.1]: at async GuildMemberManager.edit (/app/node_modules/discord.js/src/managers/GuildMemberManager.js:279:15) {
2022-09-25T02:00:51.918053+00:00 app[worker.1]: method: 'patch',
2022-09-25T02:00:51.918053+00:00 app[worker.1]: path: '/guilds/414095683222765609/members/847869773940785182',
2022-09-25T02:00:51.918054+00:00 app[worker.1]: code: 10007,
2022-09-25T02:00:51.918054+00:00 app[worker.1]: httpStatus: 404,
2022-09-25T02:00:51.918054+00:00 app[worker.1]: requestData: {
2022-09-25T02:00:51.918055+00:00 app[worker.1]: json: { roles: [Array], communication_disabled_until: undefined },
2022-09-25T02:00:51.918055+00:00 app[worker.1]: files: []
2022-09-25T02:00:51.918055+00:00 app[worker.1]: }
2022-09-25T02:00:51.918055+00:00 app[worker.1]: }

カテゴリー削除でエラーが発生する

2022-09-26T18:05:18.000000+00:00 app[api]: Build succeeded
2022-09-27T03:50:55.836491+00:00 app[worker.1]: TypeError: Cannot read properties of null (reading 'id')
2022-09-27T03:50:55.836499+00:00 app[worker.1]: at /app/app/manager/channelManager.js:69:38
2022-09-27T03:50:55.836500+00:00 app[worker.1]: at Map.find (/app/node_modules/@discordjs/collection/dist/index.js:122:11)
2022-09-27T03:50:55.836501+00:00 app[worker.1]: at searchChannelById (/app/app/manager/channelManager.js:69:24)
2022-09-27T03:50:55.836501+00:00 app[worker.1]: at runMicrotasks (<anonymous>)
2022-09-27T03:50:55.836501+00:00 app[worker.1]: at processTicksAndRejections (node:internal/process/task_queues:96:5)
2022-09-27T03:50:55.836501+00:00 app[worker.1]: at async deleteCategory (/app/app/cmd/admin-cmd/deleteCategory.js:76:18)

サポートセンターの自動タグ付け

  • 新規スレッドが立ったら自動で「対応中」タグをつける
  • 新規スレッドが立ったらスレッドクローズボタンを投稿
  • スレッドクローズボタンが押されたら「対応中」→「解決済み」にタグを変更し、
    スレッドをロックしてクローズ

参考リンク
discord.js Documents: ThreadChannel

ヘルプの更新

  • イカ部歴コマンドの追加
  • help voiceのspeed,pitchを削除
  • フェスコマンドの削除

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.