# -*- coding: utf-8 -*- import requests from docopt import Dict from irc3.plugins.command import command from irc3.utils import IrcString from . import Plugin class Urban(Plugin): URL = 'https://api.urbandictionary.com/v0/define' @command def ud(self, mask: IrcString, target: IrcString, args: Dict): """Searches for a term on urban dictionary and returns first result %%ud ... """ # Clean, strip and split term by whitespace term = ' '.join(args.get('')).lower().strip().split() if term[-1].isdigit(): # Parse number at end as index - 1 and slice term index = int(term[-1]) - 1 term = ' '.join(term[:-1]) else: # Set index to 0 index = 0 # Fetch data for term from urban dictionary as json data = requests.get(self.URL, params=dict(term=term)).json() res_length = len(data['list']) # No results if res_length == 0: return 'Term not found' if index > res_length - 1: return f"Index out of range [1/{res_length}]" # Get result by index res = data['list'][index] # Format and return result return '[{idx}/{len}] \x02{word}\x02: {definition} - {example}'.format( idx=index + 1, len=res_length, word=res['word'], definition=res['definition'].replace('\r\n', ' '), example=res['example'].replace('\r\n', ' '), )