{"id":15920507,"url":"https://github.com/cutls/newdere","last_synced_at":"2026-06-15T02:34:40.774Z","repository":{"id":92292702,"uuid":"545470465","full_name":"cutls/newdere","owner":"cutls","description":null,"archived":false,"fork":false,"pushed_at":"2023-09-01T00:45:39.000Z","size":24081,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-02-22T23:42:19.855Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"https://twitter.com/nita_minami","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/cutls.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2022-10-04T12:33:32.000Z","updated_at":"2023-02-14T15:47:05.000Z","dependencies_parsed_at":null,"dependency_job_id":"776f6603-0c51-470f-b62a-f18d28b28e4b","html_url":"https://github.com/cutls/newdere","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/cutls/newdere","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cutls%2Fnewdere","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cutls%2Fnewdere/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cutls%2Fnewdere/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cutls%2Fnewdere/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/cutls","download_url":"https://codeload.github.com/cutls/newdere/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cutls%2Fnewdere/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34345577,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-15T02:00:07.085Z","response_time":63,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-10-06T19:40:27.726Z","updated_at":"2026-06-15T02:34:40.760Z","avatar_url":"https://github.com/cutls.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# newdere\n\n[@nita_minami](https://twitter.com/nita_minami)\n\n![2023-02-04-cv](/res/2023-02-04-cv.png)  \n↑2023年2月4日現在 **ボイス実装済み** | [ボイス未実装(2023/2/15)](https://github.com/cutls/newdere/blob/main/res/2023-02-15-nocv.png) | [限定スキル秒数対応表(2023/2)](https://github.com/cutls/newdere/blob/main/res/2023-02-04-limited.png) | [ブランスキル秒数対応表(2023/1/30)](https://github.com/cutls/newdere/blob/main/res/2023-01-30-blane.png)\n\nスキル対応表が必要ない恒常やノワールでは寂しいので新規カードの画像を投稿します。\n\n![剥きだしのココロ 小日向美穂](/res/chara.png)  \n\n\n\n## これなに\n\nデレステのガシャ更新をお知らせするbot [参考: @nihatadumi1](https://twitter.com/nihatadumi1)\n\n## みんな向け\n\n* いつ投稿されますか？  \n更新日の15:06頃に設定しています。公式のTwitterの情報を参考するのですが、大抵公式のガシャ更新通知は15:05過ぎくらいに投稿されます。よって、余裕を持って15:10投稿としています。手動では無いため、15:00ぴったりの投稿はできません。ご了承ください。\n* Twitterでの画質が悪い  \n画像の右上の「…」を押して「4Kを読み込む」を押すと、原寸大のものを読み込もうとします。\n特にAndroidの場合だとほとんど差を感じないことがあるので、素直に「高画質版」のURLを開いた方が良いです。(高画質版: 約2MB/枚のPNG画像)\n* ボイス実装済みと未実装が同時に来た場合はどうなりますか？  \nもし仮にそういうことがあった場合、投稿される画像はすべて**ボイス実装済み**のものになります。ただ、ツイートされるテキストには全員が表記されます。\n* 表記に誤りがあります  \n[@nita_minami](https://twitter.com/nita_minami)にリプかDMしてください。\n* 新スキルが来たら？  \nオーバードライブの時は盛大に動作不能状態を作り出しました。現在(2023/2/15)利用APIではオーバードライブに対応していないので、未定義のスキルがあった場合は自動的にオーバードライブ扱いになるような処理をしています。なお、キャラクター画像はスキル表が用いられる限定ガシャでは投稿されないため、もしキャラクター画像作成時に未定義のスキルがあった場合は、スキルの説明を画像に挿入します。\n\n\nこのソフトウェア、botは「アイドルマスター シンデレラガールズ スターライトステージ」(デレステ)公式、公認のものではありません。利用しているデータの権利は\"BANDAI NAMCO Entertainment Inc.\"に所属します。\n\nこのbotが提供するデータの信頼性を開発者は保証できません。このbotを利用したことによる不都合の責を開発者が負うことはできません。\n\n## オタク向け\n\n### Setup\n\nNode.js 14.16.0/16.13.1 で動作確認\n\n```\ngit clone https://github.com/cutls/newdere\ncd newdere\n\nyarn\n```\n\n[canvasのREADME](https://github.com/Automattic/node-canvas#readme)を読んで、環境に合わせて依存ライブラリをインストールします。newdereではGIFやSVGは扱いませんので、giflibやlibgifといった一部ライブラリは不要です。JPEGやPNGに関連するものはインストールしてください。\n\n### Prepare\n\nこんな感じのGoogleスプレッドシートを用意します。\n\n![Google SpreadSheet](/res/spreadsheet.png)\n\n必須項目は左から順に、ID, (Cu|Co|Pa), 名前, CV, 恒常数, 限定数, フェス数, 最終更新日です。[サンプルCSV 2022/10/30現在](https://github.com/cutls/newdere/blob/main/res/samplesheet-20221030.csv)\n\nCVは今の所ボイス実装済みかどうかの判定だけにしか使いませんので、実装済みのアイドルだけ`1`とでも入力しておけば十分です。IDは厳密な連番ではなく、一部に抜けがあります。ただし、このIDはサードパーティAPI由来のもので、このbotに使用するものでは無いので、連番でもすべて同じ数字でもおそらく動きます。\n\n経過日数は、H3に`=IF(H2, DATEDIF(H2,TODAY(),\"D\"),\"\")`と入れて出しています。J列は空列にしておくことをおすすめします。(依存ライブラリの制限 [google-spreadsheet#367](https://github.com/theoephraim/node-google-spreadsheet/issues/367))\n\nGoogle Cloud Platformで[サービスアカウント](https://console.cloud.google.com/iam-admin/serviceaccounts)を作って、そのメアド`USER@PROJECT.iam.gserviceaccount.com`にこのスプレッドシートを共有します。\n\nまた、同じプロジェクト内において、GCS(Google Cloud Storage)で新しいバケットを作り「Storage オブジェクト作成者」「Storage オブジェクト管理者」をこのメールアドレスに与えておきます。そして、このバケットを公開します。\n\n### Env\n\n`.env.sample`を埋めて`.env`にリネームします。\n\n```\nSHEET_ID='' # GoogleシートのID\nGOOGLE_SERVICE_ACCOUNT_EMAIL='USER@PROJECT.iam.gserviceaccount.com'\nGOOGLE_PRIVATE_KEY='-----BEGIN PRIVATE KEY-----\\n...\\n-----END PRIVATE KEY-----\\n' # 長いやつ\nTW_CONSUMER_KEY='' # Twitterのコンシューマーキー\nTW_CONSUMER_SECRET='' # Twitterのコンシューマーシークレット\nTW_ACCESS_TOKEN='' # Twitterのアクセストークン\nTW_ACCESS_TOKEN_SECRET='' # Twitterのアクセストークンシークレット\nSTORAGE='https://storage.googleapis.com/BACKET_NAME/'\n```\n\nGoogleシートのIDはURLを見ればわかります。`https://docs.google.com/spreadsheets/d/GOOGLE_SPREADSHEET_ID/edit`\n\nTwitter APIの認証情報は頑張って作文してゲットしてください。\n\n### Done\n\n```\nnpx tsc\nnode dist/src/init.js\n```\n\nこれで基準となるデータを取得できます。ルートディレクトリに`allCharaIdData.json`が作成されます。\n\nスキル秒数対応表のデータは、`node dist/src/skill/init.limited.js`で取得できますが、対象スキルや対象アイドルに変更がある場合があるため、抜けが生じる場合があります。(2022/11/30時点の最新です)\nまた、APIに多くのリクエストを送信するため、繰り返し実行するのはおやめください。現在限定アイドルとブランフェスアイドルの諸スキルに対応しており、それぞれ`limited.json`、`blane.json`が作成されます。\n\n\n試しに画像を取得してみる場合、\n\n```\nnode dist/src/getImage.js\n```\n\n`src/getImage.ts`の9行目, 10行目付近に記載されている変数をいじることで、設定を変更できます。変更後は`npx tsc`を忘れずに。(または依存関係の`ts-node`を利用して、`npx ts-node src/getImage.ts`としても構いません。)\n\nスキル対応表は`node dist/src/skill/image.js`で`image.png`に保存されます。\n\n毎日15:10に実行するタスクは以下の通りです。cronなどに記載します。\n```\nnode dist/src/task.js\n```\n\ntask.jsは以下の作業を行います。\n\n1. starlight.kirara.caのAPIを用いて、新しいカードがあるかどうかを取得します。(ない場合はここで終了)\n1. APIの結果を整形した上で`allCharaIdData.json`に保存します。\n1. 更新されたカードの種類(恒常, 限定, フェス)を確認するために、公式Twitterの情報を取得します。\n1. スプレッドシートに書き込みます。\n1. (これより先はgetImage.tsでも行われます)スプレッドシートを読み込みます。\n1. `allCharaIdData.json`とスプレッドシートの情報から、画像を作成します。アイドルのカード画像はstarlight.kirara.caのAPIを用いて取得しています。\n1. GCSにアップロードします。(getImage.tsでツイートがオフの場合は、ルートディレクトリにimage.pngを作成し、ここで終了します)\n1. (限定/ブランの場合)スキル秒数対応表を作成します。`limited.json`または`blane.json`を以上の操作から得た更新情報を元に書き足します。\n1. (恒常/ノワールの場合)キャラ画像を作成します。\n1. 画像をツイートします。\n\n### Tips\n\n* 解像度が足りません  \nTwitterにアップロードできる最大解像度だとこれくらいが限界です。ただし、`src/create.ts`の9行目の`scale`の値を大きくすると、巨大な画像を生成できるため解像度を上げることができます。\n* フォントを変えたい  \n一番手っ取り早いのは、好きなフォントを`noto.otf`に改名してルートディレクトリにある`noto.otf`と入れ替えることです。ただ、Noto Sans Serifに準拠してピクセルを決定しているため、他のフォントにすると結構な確率でズレると思います。名前を変えるのが嫌だったり、そもそもOTFでは無い場合、適当な場所に置いて`src/create.ts`の`registerFont`(20行目あたり)のところなどを変えると良いでしょう。TTFでも動きます。","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcutls%2Fnewdere","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fcutls%2Fnewdere","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcutls%2Fnewdere/lists"}