Compare commits
2 commits
0d49fb1457
...
3be1fddd93
Author | SHA1 | Date | |
---|---|---|---|
dece | 3be1fddd93 | ||
dece | 2ecec9eeb2 |
|
@ -165,7 +165,8 @@
|
||||||
"commands": ["taxref"],
|
"commands": ["taxref"],
|
||||||
"not_found_reply": "Not found!",
|
"not_found_reply": "Not found!",
|
||||||
"reply": "{sci_name}, {fr_name}, {family}, {cd_nom}, {cd_ref}",
|
"reply": "{sci_name}, {fr_name}, {family}, {cd_nom}, {cd_ref}",
|
||||||
"ambiguous_reply": "Ambiguous! It can be: "
|
"ambiguous_reply": "Ambiguous! It can be: ",
|
||||||
|
"unnamed_species": "(no name)"
|
||||||
},
|
},
|
||||||
"translate": {
|
"translate": {
|
||||||
"commands": ["translate"],
|
"commands": ["translate"],
|
||||||
|
|
|
@ -30,7 +30,7 @@ class CaptureGivePlugin(Plugin):
|
||||||
# "give" command.
|
# "give" command.
|
||||||
if self.command.ident == self.config["commands"][0]:
|
if self.command.ident == self.config["commands"][0]:
|
||||||
content = self.command.raw[len(self.command.matched):].strip()
|
content = self.command.raw[len(self.command.matched):].strip()
|
||||||
matched = self.content_re.matched(content)
|
matched = self.content_re.match(content)
|
||||||
if not matched:
|
if not matched:
|
||||||
return False
|
return False
|
||||||
groups = matched.groupdict()
|
groups = matched.groupdict()
|
||||||
|
|
|
@ -11,7 +11,8 @@ BASE_URL = "https://taxref.mnhn.fr/api"
|
||||||
class TaxrefPlugin(Plugin):
|
class TaxrefPlugin(Plugin):
|
||||||
|
|
||||||
REQUIRED_CONFIGS = [
|
REQUIRED_CONFIGS = [
|
||||||
"commands", "not_found_reply", "reply", "ambiguous_reply"
|
"commands", "not_found_reply", "reply", "ambiguous_reply",
|
||||||
|
"unnamed_species"
|
||||||
]
|
]
|
||||||
|
|
||||||
def __init__(self, bot):
|
def __init__(self, bot):
|
||||||
|
@ -26,8 +27,12 @@ class TaxrefPlugin(Plugin):
|
||||||
return True
|
return True
|
||||||
|
|
||||||
def search_by_name(self, name, target):
|
def search_by_name(self, name, target):
|
||||||
name = urllib.parse.quote(name.lower())
|
name = name.lower()
|
||||||
url = f"{BASE_URL}/taxa/search?scientificNames={name}&page=1&size=100"
|
enc_name = urllib.parse.quote(name)
|
||||||
|
url = (
|
||||||
|
f"{BASE_URL}/taxa/search?scientificNames={enc_name}"
|
||||||
|
"&page=1&size=100"
|
||||||
|
)
|
||||||
response = requests.get(url)
|
response = requests.get(url)
|
||||||
if response.status_code != 200:
|
if response.status_code != 200:
|
||||||
self.signal_failure(target)
|
self.signal_failure(target)
|
||||||
|
@ -49,32 +54,49 @@ class TaxrefPlugin(Plugin):
|
||||||
for item in items:
|
for item in items:
|
||||||
if item["rankId"] == "ES":
|
if item["rankId"] == "ES":
|
||||||
species_items.append(item)
|
species_items.append(item)
|
||||||
if len(species_items) == 1:
|
num_species = len(species_items)
|
||||||
|
self.bot.log_d(f"{num_species} species.")
|
||||||
|
if num_species == 1:
|
||||||
item_to_use = species_items[0]
|
item_to_use = species_items[0]
|
||||||
else:
|
else:
|
||||||
reply = self.config["ambiguous_reply"]
|
# If there are several species, check if one of them has the
|
||||||
append = ""
|
# exact same name; else show an ambiguous reply.
|
||||||
if len(items) > 5:
|
species_with_same_name = [
|
||||||
append = f"… (+{len(items)})"
|
item for item in species_items
|
||||||
items = items[:5]
|
if item["scientificName"].lower() == name
|
||||||
reply += ", ".join(
|
]
|
||||||
item["scientificName"] for item in items
|
if len(species_with_same_name) != 1:
|
||||||
)
|
self.show_ambiguous_reply(species_items, target)
|
||||||
if append:
|
return
|
||||||
reply += append
|
item_to_use = species_with_same_name[0]
|
||||||
self.bot.say(target, reply)
|
|
||||||
return
|
unnamed = self.config["unnamed_species"]
|
||||||
reply = self.config["reply"].format(
|
reply = self.config["reply"].format(
|
||||||
sci_name=item_to_use["scientificName"],
|
sci_name=item_to_use["scientificName"],
|
||||||
fr_name=item_to_use["frenchVernacularName"],
|
fr_name=item_to_use["frenchVernacularName"] or unnamed,
|
||||||
family=item_to_use["familyName"],
|
family=item_to_use["familyName"],
|
||||||
cd_nom=item_to_use["id"],
|
cd_nom=item_to_use["id"],
|
||||||
cd_ref=item_to_use["referenceId"],
|
cd_ref=item_to_use["referenceId"],
|
||||||
)
|
)
|
||||||
self.bot.say(target, reply)
|
self.bot.say(target, reply)
|
||||||
|
|
||||||
# If there are media available, show one!
|
self.show_images(item_to_use, target)
|
||||||
m_url = item_to_use.get("_links", {}) .get("media", {}) .get("href")
|
|
||||||
|
def show_ambiguous_reply(self, items, target):
|
||||||
|
"""Show a reply with potential species."""
|
||||||
|
reply = self.config["ambiguous_reply"]
|
||||||
|
append = ""
|
||||||
|
if len(items) > 5:
|
||||||
|
append = f"… (+{len(items)})"
|
||||||
|
items = items[:5]
|
||||||
|
reply += ", ".join(item["scientificName"] for item in items)
|
||||||
|
if append:
|
||||||
|
reply += append
|
||||||
|
self.bot.say(target, reply)
|
||||||
|
|
||||||
|
def show_images(self, item, target):
|
||||||
|
"""If there are media available, show one!"""
|
||||||
|
m_url = item.get("_links", {}) .get("media", {}) .get("href")
|
||||||
if not m_url:
|
if not m_url:
|
||||||
return
|
return
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue