diff options
| author | Fuwn <[email protected]> | 2024-01-06 06:05:28 -0800 |
|---|---|---|
| committer | Fuwn <[email protected]> | 2024-01-06 06:05:28 -0800 |
| commit | 9dfde0448a1da2597f8709e9d1455e4cdf98c0d1 (patch) | |
| tree | a8a79329afce98526741c913900a3131e1cec45d | |
| parent | refactor(tools): input template (diff) | |
| download | due.moe-9dfde0448a1da2597f8709e9d1455e4cdf98c0d1.tar.xz due.moe-9dfde0448a1da2597f8709e9d1455e4cdf98c0d1.zip | |
feat(tools): dump profile tool
| -rw-r--r-- | src/lib/AniList/user.ts | 44 | ||||
| -rw-r--r-- | src/lib/Tools/DumpProfile.svelte | 18 | ||||
| -rw-r--r-- | src/lib/Tools/InputTemplate.svelte | 4 | ||||
| -rw-r--r-- | src/lib/Tools/RandomFollower.svelte | 8 | ||||
| -rw-r--r-- | src/routes/tools/+page.svelte | 8 |
5 files changed, 75 insertions, 7 deletions
diff --git a/src/lib/AniList/user.ts b/src/lib/AniList/user.ts index adc00c56..93799480 100644 --- a/src/lib/AniList/user.ts +++ b/src/lib/AniList/user.ts @@ -20,6 +20,28 @@ export interface User { }; } +export interface FullUser { + id: number; + name: string; + avatar: { + large: string; + medium: string; + }; + bans: JSON; + bannerImage: string; + siteUrl: string; + donatorTier: number; + donatorBadge: string; + moderatorRoles: string[]; + createAt: number; + updatedAt: number; + previousNames: { + name: string; + createdAt: number; + updatedAt: string; + }[]; +} + export const user = async (username: string): Promise<User> => ( await ( @@ -44,3 +66,25 @@ export const user = async (username: string): Promise<User> => }) ).json() )['data']['User']; + +export const dumpUser = async (username: string): Promise<User> => + ( + await ( + await fetch('https://graphql.anilist.co', { + method: 'POST', + headers: { + 'Content-Type': 'application/json', + Accept: 'application/json' + }, + body: JSON.stringify({ + query: `{ User(name: "${username}") { + id name + avatar { large medium } + bannerImage bans siteUrl donatorTier donatorBadge moderatorRoles + createdAt updatedAt + previousNames { name createdAt updatedAt } + } }` + }) + }) + ).json() + )['data']['User']; diff --git a/src/lib/Tools/DumpProfile.svelte b/src/lib/Tools/DumpProfile.svelte new file mode 100644 index 00000000..f01814e6 --- /dev/null +++ b/src/lib/Tools/DumpProfile.svelte @@ -0,0 +1,18 @@ +<script lang="ts"> + import { dumpUser } from '$lib/AniList/user'; + import RateLimited from '$lib/Error/RateLimited.svelte'; + import InputTemplate from './InputTemplate.svelte'; + + let submission = ''; +</script> + +<!-- svelte-ignore missing-declaration --> +<InputTemplate field="Username" bind:submission event="Dump User" submitText="Dump"> + {#await dumpUser(submission)} + Loading user ... 50% + {:then dump} + <pre style="margin: 0;">{JSON.stringify(dump, null, 2)}</pre> + {:catch} + <RateLimited type="User" list={false} /> + {/await} +</InputTemplate> diff --git a/src/lib/Tools/InputTemplate.svelte b/src/lib/Tools/InputTemplate.svelte index 16b4ec8f..1b677546 100644 --- a/src/lib/Tools/InputTemplate.svelte +++ b/src/lib/Tools/InputTemplate.svelte @@ -19,6 +19,7 @@ <div class="card"> <p> + <!-- svelte-ignore missing-declaration --> <input type="text" placeholder={field} @@ -28,6 +29,9 @@ submission = input; onSubmit(); + + // eslint-disable-next-line no-undef + umami.track(event); } }} /> diff --git a/src/lib/Tools/RandomFollower.svelte b/src/lib/Tools/RandomFollower.svelte index f47a4441..d50cd7d4 100644 --- a/src/lib/Tools/RandomFollower.svelte +++ b/src/lib/Tools/RandomFollower.svelte @@ -7,18 +7,12 @@ let randomSeed = 0; </script> -<!-- svelte-ignore missing-declaration --> <InputTemplate field="Username" bind:submission event="Random Follower" submitText="Generate" - onSubmit={() => { - randomSeed = Math.random(); - - // eslint-disable-next-line no-undef - umami.track('Random Follower'); - }} + onSubmit={() => (randomSeed = Math.random())} > {#await followers(submission)} Loading followers ... 50% diff --git a/src/routes/tools/+page.svelte b/src/routes/tools/+page.svelte index 066ccd2f..e5bda954 100644 --- a/src/routes/tools/+page.svelte +++ b/src/routes/tools/+page.svelte @@ -9,6 +9,7 @@ import { closest } from '$lib/Error/path'; import HeadTitle from '$lib/HeadTitle.svelte'; import RandomFollower from '$lib/Tools/RandomFollower.svelte'; + import DumpProfile from '$lib/Tools/DumpProfile.svelte'; export let data; @@ -43,6 +44,10 @@ name: 'Random Follower Finder', description: 'Find a random follower of any given user' }, + dump_profile: { + name: 'Dump Profile', + description: "Dump a user's profile to JSON" + }, activity_history: { name: 'Activity History Analyser' } @@ -65,6 +70,7 @@ <option value="sequel_spy">Sequel Spy</option> <option value="discussions">Episode Discussion Collector</option> <option value="random_follower">Random Follower Finder</option> + <option value="dump_profile">Dump Profile</option> <option value="activity_history">Activity History Analyser</option> </select> </blockquote> @@ -121,5 +127,7 @@ <SequelSpy user={data.user} /> {:else if tool === 'random_follower'} <RandomFollower /> + {:else if tool === 'dump_profile'} + <DumpProfile /> {/if} {/if} |