Telegraf/grammY Middleware to use Wikibase entities (like Wikidata ones) in your users language
This library is inspired by telegraf-i18n and was made to work with Wikidata.
HINT: wikibase-sdk went from being wikidata-sdk
to be usable for Wikibase in general.
As this process is ongoing this library only supports Wikidata currently.
General Wikibase support is wished for but not worked on currently. (Feel free to create a Pull Request.)
npm install telegraf-wikibase
import {TelegrafWikibase} from 'telegraf-wikibase';
const twb = new TelegrafWikibase()
twb.addResourceKeys({human: 'Q5', earth: 'Q2'})
bot.use(twb)
bot.command('foo', async ctx => {
const reader = await ctx.wb.r('human')
return ctx.reply(`Hey ${reader.label()}!`)
// returns 'Hey Human!'; 'Hey Mensch!'; … depending on the users language
})
The middleware adds .wb
to the Context ctx
.
bot.use(new TelegrafWikibase())
bot.use(new TelegrafWikibase(store: Store<EntitySimplified>, options))
store
to access requested resourceKeys
or entity IDs (Q-Numbers).
const options = {
contextKey: 'wd'
}
contextKey
determines the key where to reach the Context Methods.
Defaults to wb
(ctx.wb.reader
)
ctx.wb.locale(): string
Returns current languageCode
of the user.
ctx.wb.locale(languageCode: string): string
Set the languageCode
to the ctx.session
of the user.
Still returns the (newly set) languageCode
of the user.
async ctx.wb.reader(key: string): Promise<WikidataEntityReader>
Returns the WikidataEntityReader
.
Use it with .label()
, .description()
and so on…