diff options
| author | Fuwn <[email protected]> | 2024-03-28 05:08:14 -0700 |
|---|---|---|
| committer | Fuwn <[email protected]> | 2024-03-28 05:08:14 -0700 |
| commit | 1a283a0764e0870ba83c7f176d899f1f1902db45 (patch) | |
| tree | 1faa46ddf8ec6351f40183fdf2def0140ec9e009 /src/lib | |
| parent | fix(birthdays): properly fix names (diff) | |
| download | due.moe-1a283a0764e0870ba83c7f176d899f1f1902db45.tar.xz due.moe-1a283a0764e0870ba83c7f176d899f1f1902db45.zip | |
feat(tools): hololive birthdays
Diffstat (limited to 'src/lib')
| -rw-r--r-- | src/lib/Data/Static/hololiveBirthdays.json | 614 | ||||
| -rw-r--r-- | src/lib/Tools/HololiveBirthdays.svelte | 95 | ||||
| -rw-r--r-- | src/lib/Tools/tools.ts | 6 |
3 files changed, 715 insertions, 0 deletions
diff --git a/src/lib/Data/Static/hololiveBirthdays.json b/src/lib/Data/Static/hololiveBirthdays.json new file mode 100644 index 00000000..bcc1a3c9 --- /dev/null +++ b/src/lib/Data/Static/hololiveBirthdays.json @@ -0,0 +1,614 @@ +[ + { + "name": "Watson Amelia", + "month": 1, + "day": 6, + "image": "https://hololist.net/wp-content/uploads/2022/02/watson-amelia-portrait-66-300x300.jpg" + }, + { + "name": "Usada Pekora", + "month": 1, + "day": 12, + "image": "https://hololist.net/wp-content/uploads/2022/02/usada-pekora-portrait-66-300x300.jpg" + }, + { + "name": "Ayunda Risu", + "month": 1, + "day": 15, + "image": "https://hololist.net/wp-content/uploads/2022/02/ayunda-risu-portrait-66-300x300.jpg" + }, + { + "name": "Aragami Oga", + "month": 1, + "day": 15, + "image": "https://hololist.net/wp-content/uploads/2022/02/aragami-oga-portrait-66-300x300.jpg" + }, + { + "name": "Uruha Rushia", + "month": 1, + "day": 22, + "image": "https://hololist.net/wp-content/uploads/2022/02/uruha-rushia-portrait-66-300x300.jpg" + }, + { + "name": "Regis Altare", + "month": 1, + "day": 29, + "image": "https://hololist.net/wp-content/uploads/2022/07/regis-altare-portrait-66-300x300.jpg" + }, + { + "name": "Omaru Polka", + "month": 1, + "day": 30, + "image": "https://hololist.net/wp-content/uploads/2022/02/omaru-polka-portrait-66-300x300.jpg" + }, + { + "name": "Fuwawa Abyssgard", + "month": 2, + "day": 1, + "image": "https://hololist.net/wp-content/uploads/2023/07/fuwawa-abyssgard-portrait-66-300x300.jpg" + }, + { + "name": "Mococo Abyssgard", + "month": 2, + "day": 2, + "image": "https://hololist.net/wp-content/uploads/2023/07/mococo-abyssgard-portrait-66-300x300.jpg" + }, + { + "name": "Juufuutei Raden", + "month": 2, + "day": 4, + "image": "https://hololist.net/wp-content/uploads/2023/09/juufuutei-raden-portrait-66-300x300.jpg" + }, + { + "name": "Jurard T Rexford", + "month": 2, + "day": 7, + "image": "https://hololist.net/wp-content/uploads/2023/11/jurard-t-rexford-portrait-66-1-300x300.jpg" + }, + { + "name": "Hizaki Gamma", + "month": 2, + "day": 9, + "image": "https://hololist.net/wp-content/uploads/2022/03/hizaki-gamma-portrait-66-300x300.jpg" + }, + { + "name": "Noir Vesper", + "month": 2, + "day": 13, + "image": "https://hololist.net/wp-content/uploads/2022/07/noir-vesper-portrait-66-300x300.jpg" + }, + { + "name": "Yuzuki Choco", + "month": 2, + "day": 14, + "image": "https://hololist.net/wp-content/uploads/2022/02/yuzuki-choco-portrait-66-300x300.jpg" + }, + { + "name": "Moona Hoshinova", + "month": 2, + "day": 15, + "image": "https://hololist.net/wp-content/uploads/2022/02/moona-hoshinova-portrait-66-300x300.jpg" + }, + { + "name": "Aki Rosenthal", + "month": 2, + "day": 17, + "image": "https://hololist.net/wp-content/uploads/2022/02/aki-rosenthal-portrait-66-300x300.jpg" + }, + { + "name": "Nekomata Okayu", + "month": 2, + "day": 22, + "image": "https://hololist.net/wp-content/uploads/2022/02/nekomata-okayu-portrait-66-300x300.jpg" + }, + { + "name": "Kageyama Shien", + "month": 2, + "day": 25, + "image": "https://hololist.net/wp-content/uploads/2022/02/kageyama-shien-portrait-66-300x300.jpg" + }, + { + "name": "Hiodoshi Ao", + "month": 2, + "day": 27, + "image": "https://hololist.net/wp-content/uploads/2023/09/hiodoshi-ao-portrait-66-300x300.jpg" + }, + { + "name": "Hakos Baelz", + "month": 2, + "day": 29, + "image": "https://hololist.net/wp-content/uploads/2022/02/hakos-baelz-portrait-66-300x300.jpg" + }, + { + "name": "Momosuzu Nene", + "month": 3, + "day": 2, + "image": "https://hololist.net/wp-content/uploads/2022/02/momosuzu-nene-portrait-66-300x300.jpg" + }, + { + "name": "Hanasaki Miyabi", + "month": 3, + "day": 3, + "image": "https://hololist.net/wp-content/uploads/2022/02/hanasaki-miyabi-portrait-66-300x300.jpg" + }, + { + "name": "Sakura Miko", + "month": 3, + "day": 5, + "image": "https://hololist.net/wp-content/uploads/2022/02/sakura-miko-portrait-66-300x300.jpg" + }, + { + "name": "IRyS", + "month": 3, + "day": 7, + "image": "https://hololist.net/wp-content/uploads/2022/02/irys-portrait-66-300x300.jpg" + }, + { + "name": "Anya Melfissa", + "month": 3, + "day": 12, + "image": "https://hololist.net/wp-content/uploads/2022/02/anya-melfissa-portrait-66-300x300.jpg" + }, + { + "name": "Ouro Kronii", + "month": 3, + "day": 14, + "image": "https://hololist.net/wp-content/uploads/2022/02/ouro-kronii-portrait-66-300x300.jpg" + }, + { + "name": "Hakui Koyori", + "month": 3, + "day": 15, + "image": "https://hololist.net/wp-content/uploads/2022/02/hakui-koyori-portrait-66-300x300.jpg" + }, + { + "name": "Artia", + "month": 3, + "day": 15, + "image": "https://hololist.net/wp-content/uploads/2022/02/artia-portrait-66-300x300.jpg" + }, + { + "name": "Ceres Fauna", + "month": 3, + "day": 21, + "image": "https://hololist.net/wp-content/uploads/2022/02/ceres-fauna-portrait-66-300x300.jpg" + }, + { + "name": "Hoshimachi Suisei", + "month": 3, + "day": 22, + "image": "https://hololist.net/wp-content/uploads/2022/02/hoshimachi-suisei-portrait-66-300x300.jpg" + }, + { + "name": "Yakushiji Suzaku", + "month": 3, + "day": 24, + "image": "https://hololist.net/wp-content/uploads/2022/02/yakushiji-suzaku-portrait-66-300x300.jpg" + }, + { + "name": "Yogiri", + "month": 4, + "day": 1, + "image": "https://hololist.net/wp-content/uploads/2022/02/yogiri-portrait-66-300x300.jpg" + }, + { + "name": "Shiranui Flare", + "month": 4, + "day": 2, + "image": "https://hololist.net/wp-content/uploads/2022/02/shiranui-flare-portrait-66-300x300.jpg" + }, + { + "name": "Mori Calliope", + "month": 4, + "day": 4, + "image": "https://hololist.net/wp-content/uploads/2022/02/mori-calliope-portrait-66-300x300.jpg" + }, + { + "name": "Octavio", + "month": 4, + "day": 8, + "image": "https://hololist.net/wp-content/uploads/2023/11/octavio-portrait-66-300x300.jpg" + }, + { + "name": "Koseki Bijou", + "month": 4, + "day": 14, + "image": "https://hololist.net/wp-content/uploads/2023/07/koseki-bijou-portrait-66-300x300.jpg" + }, + { + "name": "Rikka", + "month": 4, + "day": 15, + "image": "https://hololist.net/wp-content/uploads/2022/02/rikka-portrait-66-300x300.jpg" + }, + { + "name": "Kishido Temma", + "month": 4, + "day": 18, + "image": "https://hololist.net/wp-content/uploads/2022/02/kishido-temma-portrait-66-300x300.jpg" + }, + { + "name": "Otonose Kanade", + "month": 4, + "day": 20, + "image": "https://hololist.net/wp-content/uploads/2023/09/otonose-kanade-portrait-66-300x300.jpg" + }, + { + "name": "Banzoin Hakka", + "month": 4, + "day": 21, + "image": "https://hololist.net/wp-content/uploads/2023/01/banzoin-hakka-portrait-66-300x300.jpg" + }, + { + "name": "Amane Kanata", + "month": 4, + "day": 22, + "image": "https://hololist.net/wp-content/uploads/2022/02/amane-kanata-portrait-66-300x300.jpg" + }, + { + "name": "Shiori Novella", + "month": 5, + "day": 2, + "image": "https://hololist.net/wp-content/uploads/2023/07/shiori-novella-portrait-66-300x300.jpg" + }, + { + "name": "Utsugi Uyu", + "month": 5, + "day": 10, + "image": "https://hololist.net/wp-content/uploads/2022/03/utsugi-uyu-portrait-66-300x300.jpg" + }, + { + "name": "Ichijou Ririka", + "month": 5, + "day": 12, + "image": "https://hololist.net/wp-content/uploads/2023/09/ichijou-ririka-portrait-66-300x300.jpg" + }, + { + "name": "Tokino Sora", + "month": 5, + "day": 15, + "image": "https://hololist.net/wp-content/uploads/2022/02/tokino-sora-portrait-66_-300x300.jpg" + }, + { + "name": "Gavis Bettel", + "month": 5, + "day": 17, + "image": "https://hololist.net/wp-content/uploads/2023/01/gavis-bettel-portrait-66-300x300.jpg" + }, + { + "name": "Sakamata Chloe", + "month": 5, + "day": 18, + "image": "https://hololist.net/wp-content/uploads/2022/02/sakamata-chloe-portrait-66-300x300.jpg" + }, + { + "name": "Ninomae Ina'nis", + "month": 5, + "day": 20, + "image": "https://hololist.net/wp-content/uploads/2022/02/ninomae-inanis-portrait-66-300x300.jpg" + }, + { + "name": "Roboco", + "month": 5, + "day": 23, + "image": "https://hololist.net/wp-content/uploads/2022/02/roboco-portrait-66-300x300.jpg" + }, + { + "name": "La+ Darknesss", + "month": 5, + "day": 25, + "image": "https://hololist.net/wp-content/uploads/2022/02/laplus-darknesss-portrait-66-1-300x300.jpg" + }, + { + "name": "Spade Echo", + "month": 5, + "day": 30, + "image": "https://hololist.net/wp-content/uploads/2022/02/spade-echo-portrait-66-300x300.jpg" + }, + { + "name": "Doris", + "month": 6, + "day": 1, + "image": "https://hololist.net/wp-content/uploads/2022/02/doris-portrait-66_-300x300.jpg" + }, + { + "name": "Machina X Flayon", + "month": 6, + "day": 5, + "image": "https://hololist.net/wp-content/uploads/2023/01/machina-x-flayon-portrait-66-300x300.jpg" + }, + { + "name": "Tsunomaki Watame", + "month": 6, + "day": 6, + "image": "https://hololist.net/wp-content/uploads/2022/02/tsunomaki-watame-portrait-66-300x300.jpg" + }, + { + "name": "Astel Leda", + "month": 6, + "day": 6, + "image": "https://hololist.net/wp-content/uploads/2022/02/astel-leda-portrait-66-300x300.jpg" + }, + { + "name": "Todoroki Hajime", + "month": 6, + "day": 7, + "image": "https://hololist.net/wp-content/uploads/2023/09/todoroki-hajime-portrait-66-300x300.jpg" + }, + { + "name": "Tsukumo Sana", + "month": 6, + "day": 10, + "image": "https://hololist.net/wp-content/uploads/2022/02/tsukumo-sana-portrait-66-300x300.jpg" + }, + { + "name": "Takane Lui", + "month": 6, + "day": 11, + "image": "https://hololist.net/wp-content/uploads/2022/02/takane-lui-portrait-66-300x300.jpg" + }, + { + "name": "Kiryu Coco", + "month": 6, + "day": 17, + "image": "https://hololist.net/wp-content/uploads/2022/02/kiryu-coco-portrait-66-300x300.jpg" + }, + { + "name": "Kazama Iroha", + "month": 6, + "day": 18, + "image": "https://hololist.net/wp-content/uploads/2022/02/kazama-iroha-portrait-66-300x300.jpg" + }, + { + "name": "Gawr Gura", + "month": 6, + "day": 20, + "image": "https://hololist.net/wp-content/uploads/2022/02/gawr-gura-portrait-66-300x300.jpg" + }, + { + "name": "Josuiji Shinri", + "month": 6, + "day": 23, + "image": "https://hololist.net/wp-content/uploads/2023/01/josuiji-shinri-portrait-66-300x300.jpg" + }, + { + "name": "Goldbullet", + "month": 6, + "day": 30, + "image": "https://hololist.net/wp-content/uploads/2023/11/goldbullet-portrait-66-300x300.jpg" + }, + { + "name": "AZKi", + "month": 7, + "day": 1, + "image": "https://hololist.net/wp-content/uploads/2022/02/azki-portrait-66-300x300.jpg" + }, + { + "name": "Oozora Subaru", + "month": 7, + "day": 2, + "image": "https://hololist.net/wp-content/uploads/2022/02/oozora-subaru-portrait-66-300x300.jpg" + }, + { + "name": "Takanashi Kiara", + "month": 7, + "day": 6, + "image": "https://hololist.net/wp-content/uploads/2022/02/takanashi-kiara-portrait-66-300x300.jpg" + }, + { + "name": "Yatogami Fuma", + "month": 7, + "day": 13, + "image": "https://hololist.net/wp-content/uploads/2022/03/yatogami-fuma-portrait-66-300x300.jpg" + }, + { + "name": "Airani Iofifteen", + "month": 7, + "day": 15, + "image": "https://hololist.net/wp-content/uploads/2022/02/airani-iofifteen-portrait-66-300x300.jpg" + }, + { + "name": "Natsuiro Matsuri", + "month": 7, + "day": 22, + "image": "https://hololist.net/wp-content/uploads/2022/02/natsuiro-matsuri-portrait-66-300x300.jpg" + }, + { + "name": "Minase Rio", + "month": 7, + "day": 26, + "image": "https://hololist.net/wp-content/uploads/2022/03/minase-rio-portrait-66-300x300.jpg" + }, + { + "name": "Houshou Marine", + "month": 7, + "day": 30, + "image": "https://hololist.net/wp-content/uploads/2022/02/houshou-marine-portrait-66-300x300.jpg" + }, + { + "name": "Nanashi Mumei", + "month": 8, + "day": 4, + "image": "https://hololist.net/wp-content/uploads/2022/02/nanashi-mumei-portrait-66-300x300.jpg" + }, + { + "name": "Tokoyami Towa", + "month": 8, + "day": 8, + "image": "https://hololist.net/wp-content/uploads/2022/02/tokoyami-towa-portrait-66-300x300.jpg" + }, + { + "name": "Akai Haato", + "month": 8, + "day": 10, + "image": "https://hololist.net/wp-content/uploads/2022/02/akai-haato-portrait-66-300x300.jpg" + }, + { + "name": "Kanade Izuru", + "month": 8, + "day": 12, + "image": "https://hololist.net/wp-content/uploads/2022/02/kanade-izuru-portrait-66-300x300.jpg" + }, + { + "name": "Ookami Mio", + "month": 8, + "day": 20, + "image": "https://hololist.net/wp-content/uploads/2022/02/ookami-mio-portrait-66-300x300.jpg" + }, + { + "name": "Tsukishita Kaoru", + "month": 8, + "day": 29, + "image": "https://hololist.net/wp-content/uploads/2022/02/tsukishita-kaoru-portrait-66-300x300.jpg" + }, + { + "name": "Kaela Kovalskia", + "month": 8, + "day": 30, + "image": "https://hololist.net/wp-content/uploads/2022/03/kaela-kovalskia-portrait-66-300x300.jpg" + }, + { + "name": "Shishiro Botan", + "month": 9, + "day": 8, + "image": "https://hololist.net/wp-content/uploads/2022/02/shishiro-botan-portrait-66-300x300.jpg" + }, + { + "name": "Pavolia Reine", + "month": 9, + "day": 9, + "image": "https://hololist.net/wp-content/uploads/2022/02/pavolia-reine-portrait-66-300x300.jpg" + }, + { + "name": "Yukoku Roberu", + "month": 9, + "day": 26, + "image": "https://hololist.net/wp-content/uploads/2022/02/yukoku-roberu-portrait-66-300x300.jpg" + }, + { + "name": "Crimzon Ruze", + "month": 9, + "day": 30, + "image": "https://hololist.net/wp-content/uploads/2023/11/crimzon-ruze-portrait-66-300x300.jpg" + }, + { + "name": "Inugami Korone", + "month": 10, + "day": 1, + "image": "https://hololist.net/wp-content/uploads/2022/02/inugami-korone-portrait-66-300x300.jpg" + }, + { + "name": "Shirakami Fubuki", + "month": 10, + "day": 5, + "image": "https://hololist.net/wp-content/uploads/2022/02/shirakami-fubuki-portrait-66-300x300.jpg" + }, + { + "name": "Himemori Luna", + "month": 10, + "day": 10, + "image": "https://hololist.net/wp-content/uploads/2022/02/himemori-luna-portrait-66_-300x300.jpg" + }, + { + "name": "Kureiji Ollie", + "month": 10, + "day": 13, + "image": "https://hololist.net/wp-content/uploads/2022/02/kureiji-ollie-portrait-66-300x300.jpg" + }, + { + "name": "Magni Dezmond", + "month": 10, + "day": 21, + "image": "https://hololist.net/wp-content/uploads/2022/07/magni-dezmond-portrait-66-300x300.jpg" + }, + { + "name": "Kagami Kira", + "month": 10, + "day": 26, + "image": "https://hololist.net/wp-content/uploads/2022/02/kagami-kira-portrait-66-300x300.jpg" + }, + { + "name": "Mano Aloe", + "month": 10, + "day": 28, + "image": "https://hololist.net/wp-content/uploads/2022/02/mano-aloe-portrait-66-300x300.jpg" + }, + { + "name": "Yozora Mel", + "month": 10, + "day": 31, + "image": "https://hololist.net/wp-content/uploads/2022/02/yozora-mel-portrait-66-300x300.jpg" + }, + { + "name": "Axel Syrios", + "month": 11, + "day": 1, + "image": "https://hololist.net/wp-content/uploads/2022/07/axel-syrios-portrait-66-300x300.jpg" + }, + { + "name": "Vestia Zeta", + "month": 11, + "day": 7, + "image": "https://hololist.net/wp-content/uploads/2022/03/vestia-zeta-portrait-66-300x300.jpg" + }, + { + "name": "Arurandeisu", + "month": 11, + "day": 11, + "image": "https://hololist.net/wp-content/uploads/2022/02/arurandeisu-portrait-66-300x300.jpg" + }, + { + "name": "Yukihana Lamy", + "month": 11, + "day": 15, + "image": "https://hololist.net/wp-content/uploads/2022/02/yukihana-lamy-portrait-66-300x300.jpg" + }, + { + "name": "Civia", + "month": 11, + "day": 18, + "image": "https://hololist.net/wp-content/uploads/2022/02/civia-portrait-66-1-300x300.jpg" + }, + { + "name": "Nerissa Ravencroft", + "month": 11, + "day": 21, + "image": "https://hololist.net/wp-content/uploads/2023/07/nerissa-ravencroft-portrait-66-300x300.jpg" + }, + { + "name": "Shirogane Noel", + "month": 11, + "day": 24, + "image": "https://hololist.net/wp-content/uploads/2022/02/shirogane-noel-portrait-66-300x300.jpg" + }, + { + "name": "Minato Aqua", + "month": 12, + "day": 1, + "image": "https://hololist.net/wp-content/uploads/2022/02/minato-aqua-portrait-66-300x300.jpg" + }, + { + "name": "Murasaki Shion", + "month": 12, + "day": 8, + "image": "https://hololist.net/wp-content/uploads/2022/02/murasaki-shion-portrait-66-300x300.jpg" + }, + { + "name": "Rosalyn", + "month": 12, + "day": 10, + "image": "https://hololist.net/wp-content/uploads/2022/02/rosalyn-portrait-66-300x300.jpg" + }, + { + "name": "Kobo Kanaeru", + "month": 12, + "day": 12, + "image": "https://hololist.net/wp-content/uploads/2022/03/kobo-kanaeru-portrait-66-300x300.jpg" + }, + { + "name": "Nakiri Ayame", + "month": 12, + "day": 13, + "image": "https://hololist.net/wp-content/uploads/2022/02/nakiri-ayame-portrait-66_-300x300.jpg" + } +] diff --git a/src/lib/Tools/HololiveBirthdays.svelte b/src/lib/Tools/HololiveBirthdays.svelte new file mode 100644 index 00000000..059a1f91 --- /dev/null +++ b/src/lib/Tools/HololiveBirthdays.svelte @@ -0,0 +1,95 @@ +<script lang="ts"> + import { browser } from '$app/environment'; + import { page } from '$app/stores'; + import { onMount } from 'svelte'; + import { clearAllParameters, parseOrDefault } from '../Utility/parameters'; + import Message from '$lib/Loading/Message.svelte'; + import locale from '$stores/locale'; + import birthdays from '$lib/Data/Static/hololiveBirthdays.json'; + + const urlParameters = browser ? new URLSearchParams(window.location.search) : null; + let date = new Date(); + let month = parseOrDefault(urlParameters, 'month', date.getMonth() + 1); + let day = parseOrDefault(urlParameters, 'day', date.getDate()); + + $: todaysBirthdays = birthdays.filter( + (birthday) => birthday.month === month && birthday.day === day + ); + + $: { + month = Math.min(month, 12); + month = Math.max(month, 1); + day = Math.min(day, new Date(new Date().getFullYear(), month, 0).getDate()); + day = Math.max(day, 1); + + if (browser) { + $page.url.searchParams.set('month', month.toString()); + $page.url.searchParams.set('day', day.toString()); + clearAllParameters(['month', 'day']); + history.replaceState(null, '', `?${$page.url.searchParams.toString()}`); + } + } + + onMount(() => clearAllParameters(['month', 'day'])); +</script> + +<p> + <select bind:value={month}> + {#each Array.from({ length: 12 }, (_, i) => i + 1) as month} + <option value={month}> + {new Date(0, month - 1).toLocaleString('default', { month: 'long' })} + </option> + {/each} + </select> + + <select bind:value={day}> + {#each Array.from({ length: new Date(new Date().getFullYear(), month, 0).getDate() }, (_, i) => i + 1) as day} + <option value={day}>{day}</option> + {/each} + </select> +</p> + +{#if todaysBirthdays.length === 0} + <Message + message={`No birthdays for ${$locale().dayFormatter( + new Date(new Date().getFullYear(), month - 1, day) + )}.`} + fullscreen={false} + loader="ripple" + /> +{:else} + <div class="characters"> + {#each todaysBirthdays as birthday} + <div class="card card-small"> + <a + href={`https://anilist.co/search/characters?search=${encodeURIComponent( + birthday.name + ).replace(/%20/g, '+')}`} + target="_blank" + > + {birthday.name} + <img src={birthday.image} alt="Character" class="character-image" /> + </a> + </div> + {/each} + </div> +{/if} + +<style lang="scss"> + .characters { + display: grid; + grid-template-columns: repeat(auto-fill, minmax(9rem, 1fr)); + gap: 1rem; + grid-row-gap: 1rem; + align-items: start; + + img { + width: 100%; + height: auto; + object-fit: cover; + border-radius: 8px; + margin-top: 0.5rem; + box-shadow: 0 4px 30px var(--base01); + } + } +</style> diff --git a/src/lib/Tools/tools.ts b/src/lib/Tools/tools.ts index 2ddbc337..3feaf9e0 100644 --- a/src/lib/Tools/tools.ts +++ b/src/lib/Tools/tools.ts @@ -43,6 +43,12 @@ export const tools: { 'Find and display the birthdays of all Uma Musume characters for today, or any other day of the year', id: 'uma_musume_birthdays' }, + hololive_birthdays: { + name: () => 'hololive Birthdays', + description: () => + 'Find and display the birthdays of all hololive talents for today, or any other day of the year', + id: 'hololive_birthdays' + }, hayai: { name: () => '早い', description: () => 'Read light novels at 1.5x speed!', |