open-trivia-db
is a small and simple library for interacting with the OpenTDB API.
Documentation: https://github.com/Elitezen/open-trivia-db-wrapper/wiki/Documentation
Checkout the powerful module discord-trivia
: https://github.com/Elitezen/discord-trivia
- Added typescript as a developer depencency.
- Added safegaurd for unknown thrown exceptions from
OpenTDBError
.
import { getQuestions, CategoryNames, QuestionDifficulties } from "open-trivia-db";
const questions = await getQuestions({
amount: 10,
category: CategoryNames.Animals,
difficulty: QuestionDifficulties.Easy,
})
[
{
value: 'How many teeth does an adult rabbit have?',
category: { id: 27, name: 'Animals', getData: [Function: getData] },
type: 'multiple',
difficulty: 'easy',
correctAnswer: '28',
incorrectAnswers: [ '30', '26', '24' ],
allAnswers: [ '24', '28', '30', '26' ],
checkAnswer: [Function: checkAnswer]
}
...
]
Questions can be fetched via the getQuestions()
function by supplying options such as amount
, category
, difficulty
, type
, session
and encode
.
type
: The kind of questions, such as multiple choice ("multiple"
) or true/false ("boolean"
).
session
: A session instance or session token. Learn about sessions
encode
: The encoding of the questions such as base64
, urlLegacy
, url3968
or none
which is the default.
You can apply options via their respective enums.
The result will be an array of questions.
import {
CategoryNames,
QuestionDifficulties,
QuestionTypes,
QuestionEncodings
} from "open-trivia-db";
getQuestions({
amount: 50,
category: CategoryNames["Entertainment: Japanese Anime & Manga"],
difficulty: QuestionDifficulties.Hard,
type: QuestionTypes.Multiple,
encode: QuestionEncodings.None
})
A category resolvable can either be a category name or id. Category id's range from 9-32 inclusive, for there are 23 categories.
To jump between resolvables, use Category.idByName()
and Category.nameById()
.
import { Category, CategoryNames } from "open-trivia-db";
Category.idByName('Art'); // 25
Category.idByName(CategoryNames.Art); // 25
Category.nameById(25); // 'Art'
Use Category.getCategory()
to get a category's data such as name, id, and question counts.
import { Category, CategoryNames } from "open-trivia-db";
Category.getCategory(CategoryNames.Geography)
.then(console.log);
{
id: 22,
name: 'Geography',
questionCount: {
total: 275,
easy: 80, medium: 139, hard: 56
}
}
You can also complete a category's data through a question via Question.category.getData()
const targetQuestion = questions[0]; // from getQuestions()
targetQuestion.category.getData()
.then(console.log);
A session ensures you are not supplied a question more than once throughout it's lifetime.
Initialize a session and supply the instance into getQuestions()
. Make sure to await or resolve Session.start()
.
import { Session } from "open-trivia-db";
const mySession = new Session();
await mySession.start();
getQuestions({
session: mySession
})
getQuestions()
will return an error once your session has served every single question in OpenTDB. Don't worry, there are thousands of questions! You will likely never come accross a session's end. However, if you wish to reset your session, use Session.reset()
.
await mySession.reset();
Documentation: https://github.com/Elitezen/open-trivia-db-wrapper/wiki/Documentation