badge(reddit): add Reddit service (#511)

pull/513/head
Dario Vladović 2021-02-20 16:02:31 +01:00 zatwierdzone przez GitHub
rodzic d859c804e8
commit 38dabbd52d
Nie znaleziono w bazie danych klucza dla tego podpisu
ID klucza GPG: 4AEE18F83AFDEB23
2 zmienionych plików z 61 dodań i 0 usunięć

60
api/reddit.ts 100644
Wyświetl plik

@ -0,0 +1,60 @@
import got from '../libs/got'
import { millify } from '../libs/utils'
import { createBadgenHandler, PathArgs } from '../libs/create-badgen-handler'
const BRAND_COLOR = 'FF4500'
const client = got.extend({ prefixUrl: 'https://www.reddit.com' })
export default createBadgenHandler({
title: 'Reddit',
examples: {
'/reddit/karma/u/spez': 'karma',
'/reddit/post-karma/u/spez': 'post karma',
'/reddit/comment-karma/u/spez': 'comment karma',
'/reddit/subscribers/r/programming': 'subreddit subscribers'
},
handlers: {
'/reddit/:topic<karma|comment-karma|post-karma>/u/:user': karmaHandler,
'/reddit/:topic<karma|comment-karma|post-karma>/:user': karmaHandler,
'/reddit/subscribers/r/:subreddit': subscribersHandler,
'/reddit/subscribers/:subreddit': subscribersHandler
}
})
async function karmaHandler ({ topic, user }: PathArgs) {
// https://www.reddit.com/dev/api/#GET_user_{username}_about
const { data } = await client.get(`user/${user}/about.json`).json<any>()
switch (topic) {
case 'karma':
return {
subject: `u/${user}`,
status: `${millify(data.total_karma)} karma`,
color: BRAND_COLOR
}
case 'comment-karma':
return {
subject: `u/${user}`,
status: `${millify(data.comment_karma)} comment karma`,
color: BRAND_COLOR
}
case 'post-karma':
return {
subject: `u/${user}`,
status: `${millify(data.link_karma)} post karma`,
color: BRAND_COLOR
}
}
}
async function subscribersHandler ({ subreddit }: PathArgs) {
subreddit = `r/${subreddit}`
// https://www.reddit.com/dev/api/#GET_r_{subreddit}_about
const { data } = await client.get(`${subreddit}/about.json`).json<any>()
return {
subject: subreddit,
status: `${millify(data.subscribers)} subscribers`,
color: BRAND_COLOR
}
}

Wyświetl plik

@ -62,6 +62,7 @@ export const liveBadgeList = [
// social
'devrant',
'peertube',
'reddit',
// chat
'discord',
'gitter',