{"id":19153504,"url":"https://github.com/elitezen/open-trivia-db-wrapper","last_synced_at":"2025-08-22T08:02:54.271Z","repository":{"id":40327290,"uuid":"492074400","full_name":"Elitezen/open-trivia-db-wrapper","owner":"Elitezen","description":"A wrapper for the Open Trivia Database API. Built with TypeScript, works with VanillaJS.","archived":false,"fork":false,"pushed_at":"2024-06-05T17:42:58.000Z","size":624,"stargazers_count":6,"open_issues_count":0,"forks_count":3,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-04-16T02:03:33.667Z","etag":null,"topics":["api-wrapper","game","javascript","library","nodejs","npm","npm-module","npm-package","open-trivia-database","opentdb","opentdb-api","quiz","trivia","trivia-api","typescript"],"latest_commit_sha":null,"homepage":"https://opentdb.com","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Elitezen.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2022-05-14T00:28:49.000Z","updated_at":"2024-09-09T00:37:25.000Z","dependencies_parsed_at":"2024-03-26T22:28:09.680Z","dependency_job_id":"fd8ba238-7035-4516-9331-996427bca617","html_url":"https://github.com/Elitezen/open-trivia-db-wrapper","commit_stats":{"total_commits":73,"total_committers":4,"mean_commits":18.25,"dds":0.3013698630136986,"last_synced_commit":"7688db5226942a4cc7ce0acd34f7c3ab019bdf85"},"previous_names":[],"tags_count":3,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Elitezen%2Fopen-trivia-db-wrapper","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Elitezen%2Fopen-trivia-db-wrapper/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Elitezen%2Fopen-trivia-db-wrapper/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Elitezen%2Fopen-trivia-db-wrapper/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Elitezen","download_url":"https://codeload.github.com/Elitezen/open-trivia-db-wrapper/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":252826230,"owners_count":21810081,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["api-wrapper","game","javascript","library","nodejs","npm","npm-module","npm-package","open-trivia-database","opentdb","opentdb-api","quiz","trivia","trivia-api","typescript"],"created_at":"2024-11-09T08:23:18.267Z","updated_at":"2025-05-07T06:27:37.284Z","avatar_url":"https://github.com/Elitezen.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"![OpenTriviaDB](https://i.imgur.com/QBhF5aY.png)\n\n![version](https://img.shields.io/npm/v/open-trivia-db)\n![downloads](https://img.shields.io/npm/dm/open-trivia-db)\n![minisize](https://img.shields.io/bundlephobia/min/open-trivia-db)\n![types](https://img.shields.io/npm/types/open-trivia-db)\n\n`open-trivia-db` is a small and simple library for interacting with the [OpenTDB](https://opentdb.com/) API.\n\n**Documentation**: https://github.com/Elitezen/open-trivia-db-wrapper/wiki/Documentation\n\n## Discord.JS Add On\n\nCheckout the powerful module `discord-trivia`: https://github.com/Elitezen/discord-trivia\n\n# 2.1.6\n- Added typescript as a developer depencency.\n- Added safegaurd for unknown thrown exceptions from `OpenTDBError`.\n\n## Example Code\n```js\nimport { getQuestions, CategoryNames, QuestionDifficulties } from \"open-trivia-db\";\n\nconst questions = await getQuestions({\n  amount: 10,\n  category: CategoryNames.Animals,\n  difficulty: QuestionDifficulties.Easy,\n})\n```\n\n## Result\n```js\n[\n  {\n    value: 'How many teeth does an adult rabbit have?',\n    category: { id: 27, name: 'Animals', getData: [Function: getData] },\n    type: 'multiple',\n    difficulty: 'easy',\n    correctAnswer: '28',\n    incorrectAnswers: [ '30', '26', '24' ],\n    allAnswers: [ '24', '28', '30', '26' ],\n    checkAnswer: [Function: checkAnswer]\n  }\n  ...\n]\n```\n\n# Guide\n## Getting Questions\n\nQuestions can be fetched via the `getQuestions()` function by supplying options such as `amount`, `category`, `difficulty`, `type`, `session` and `encode`.\n\n`type`: The kind of questions, such as multiple choice (`\"multiple\"`) or true/false (`\"boolean\"`).\n\n`session`: A session instance or session token. [Learn about sessions](#sessions)\n\n`encode`: The encoding of the questions such as `base64`, `urlLegacy`, `url3968` or `none` which is the default.\n\nYou can apply options via their respective enums.\n\nThe result will be an array of questions.\n\n```js\nimport { \n  CategoryNames, \n  QuestionDifficulties, \n  QuestionTypes, \n  QuestionEncodings \n} from \"open-trivia-db\";\n\ngetQuestions({\n  amount: 50,\n  category: CategoryNames[\"Entertainment: Japanese Anime \u0026 Manga\"],\n  difficulty: QuestionDifficulties.Hard,\n  type: QuestionTypes.Multiple,\n  encode: QuestionEncodings.None\n})\n```\n\n## Getting Categories and Category Data\n\u003chr\u003e\n\nA category resolvable can either be a category name or id. Category id's range from 9-32 inclusive, for there are 23 categories.\n\nTo jump between resolvables, use `Category.idByName()` and `Category.nameById()`.\n\n```js\nimport { Category, CategoryNames } from \"open-trivia-db\";\n\nCategory.idByName('Art');              // 25\nCategory.idByName(CategoryNames.Art);  // 25\n\nCategory.nameById(25);                 // 'Art'\n```\n\n### Getting a Category's Data\nUse `Category.getCategory()` to get a category's data such as name, id, and question counts.\n\n```js\nimport { Category, CategoryNames } from \"open-trivia-db\";\n\nCategory.getCategory(CategoryNames.Geography)\n  .then(console.log);\n```\n\n```js\n{\n  id: 22,\n  name: 'Geography',\n  questionCount: { \n    total: 275, \n    easy: 80, medium: 139, hard: 56 \n  }\n}\n```\n\nYou can also complete a category's data through a question via `Question.category.getData()`\n\n```js\nconst targetQuestion = questions[0]; // from getQuestions()\n\ntargetQuestion.category.getData()\n  .then(console.log);\n```\n\n## Sessions\nA session ensures you are not supplied a question more than once throughout it's lifetime.\n\nInitialize a session and supply the instance into `getQuestions()`. Make sure to await or resolve `Session.start()`.\n```js\nimport { Session } from \"open-trivia-db\";\n\nconst mySession = new Session();\nawait mySession.start();\n\ngetQuestions({\n  session: mySession\n})\n```\n\n`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()`.\n\n```js\nawait mySession.reset();\n```\n\n\u003chr\u003e\n\n**Documentation**: https://github.com/Elitezen/open-trivia-db-wrapper/wiki/Documentation\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Felitezen%2Fopen-trivia-db-wrapper","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Felitezen%2Fopen-trivia-db-wrapper","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Felitezen%2Fopen-trivia-db-wrapper/lists"}