aiotrivia

Asynchronous API Wrapper for the OpenTDB Api. (https://opentdb.com/)


Keywords
trivia, api, trivia_api, opentdb
License
MIT
Install
pip install aiotrivia==1.2.5

Documentation

aiotrivia

Async Wrapper for the OpenTDB API

Installation

$ pip install git+https://github.com/niztg/aiotrivia

Example Usage

import asyncio
import aiotrivia

client = aiotrivia.TriviaClient()

async def main():
    data = await client.get_specific_question(category=20)
    for i in data:
        print('%s | %s' % (i.question, i.responses))
    await client.close() # after you're done with everything

asyncio.get_event_loop().run_until_complete(main())

Returns:

Which figure from Greek mythology traveled to the underworld to return his wife Eurydice to the land of the living? | ['Daedalus', 'Hercules', 'Perseus', 'Orpheus']

discord.py command usage

from aiotrivia import TriviaClient, AiotriviaException
from discord.ext import commands
import asyncio
import random

class TriviaCog(commands.Cog):
    def __init__(self, bot):
        self.bot = bot
        self.trivia = TriviaClient()
        
    @commands.command()
    async def trivia(self, ctx, difficulty):
        try:
            question = await self.trivia.get_random_question(difficulty)
        except AiotriviaException as error:
            return await ctx.send(f"{error.__class__.__name__}: {error}")
        answers = question.responses
        random.shuffle(answers)
        final_answers = '\n'.join([f"{index}. {value}" for index, value in enumerate(answers, 1)])
        message = await ctx.send(f"**{question.question}**\n{final_answers}\n{question.type.capitalize()} Question about {question.category}")
        answer = answers.index(question.answer)+1
        await self.trivia.close() # cleaning up
        try:
            while True:
                msg = await self.client.wait_for('message', timeout=15, check=lambda m: m.id != message.id)
                if str(answer) in msg.content:
                    return await ctx.send(f"{answer} was correct! ({question.answer})")
        except asyncio.TimeoutError:
            await ctx.send(f"The correct answer was {question.answer}")

def setup(bot):
    bot.add_cog(TriviaCog(bot))

For more info, read the documentation

Or join the discord server