nxy/bot/urban.py

53 lines
1.5 KiB
Python
Raw Normal View History

2017-06-01 13:07:30 +00:00
# -*- coding: utf-8 -*-
import requests
2017-08-22 13:57:57 +00:00
from docopt import Dict
2017-06-01 13:07:30 +00:00
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
2017-08-22 13:57:57 +00:00
def ud(self, mask: IrcString, target: IrcString, args: Dict):
2020-11-20 16:14:43 +00:00
"""Searches for a term on urban dictionary and returns first result
2017-06-01 13:07:30 +00:00
2017-06-01 15:38:34 +00:00
%%ud <term>...
2017-06-01 13:07:30 +00:00
"""
# Clean, strip and split term by whitespace
2017-06-01 15:38:34 +00:00
term = ' '.join(args.get('<term>')).lower().strip().split()
2017-06-01 13:07:30 +00:00
2017-06-01 15:38:34 +00:00
if term[-1].isdigit():
# Parse number at end as index - 1 and slice term
index = int(term[-1]) - 1
2017-06-01 15:38:34 +00:00
term = ' '.join(term[:-1])
2017-06-01 13:07:30 +00:00
else:
# Set index to 0
index = 0
2017-06-01 13:07:30 +00:00
# Fetch data for term from urban dictionary as json
2017-06-01 15:38:34 +00:00
data = requests.get(self.URL, params=dict(term=term)).json()
2020-11-20 16:14:43 +00:00
res_length = len(data['list'])
# No results
2020-11-20 16:14:43 +00:00
if res_length == 0:
2017-06-01 15:38:34 +00:00
return 'Term not found'
2017-06-01 13:07:30 +00:00
2020-11-20 16:14:43 +00:00
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
2017-06-01 15:38:34 +00:00
return '[{idx}/{len}] \x02{word}\x02: {definition} - {example}'.format(
idx=index + 1,
len=res_length,
2017-06-01 15:38:34 +00:00
word=res['word'],
definition=res['definition'].replace('\r\n', ' '),
example=res['example'].replace('\r\n', ' '),
)