From cd2958ab16c5d0f1f1437ed7b1d315d3c9c0b455 Mon Sep 17 00:00:00 2001 From: Eivind Teig Date: Fri, 23 Mar 2018 09:35:31 +0100 Subject: [PATCH 01/38] testfile for testing commiting inside my text editor. can be used for more testing but not code. --- testfile.py | 1 + 1 file changed, 1 insertion(+) create mode 100644 testfile.py diff --git a/testfile.py b/testfile.py new file mode 100644 index 00000000..0abb0dd2 --- /dev/null +++ b/testfile.py @@ -0,0 +1 @@ +# just for testing some GitHub integration in my editor From ed789169533411a9d13cf1d91675b1ce1256e437 Mon Sep 17 00:00:00 2001 From: TildeBeta Date: Fri, 23 Mar 2018 23:08:10 +0200 Subject: [PATCH 02/38] Naive input handling --- Pipfile | 2 + Pipfile.lock | 17 +- bot/cogs/snakes.py | 78 ++++++- data.json | 565 +++++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 659 insertions(+), 3 deletions(-) create mode 100644 data.json diff --git a/Pipfile b/Pipfile index 096fb9b3..dadfcac7 100644 --- a/Pipfile +++ b/Pipfile @@ -8,6 +8,8 @@ name = "pypi" aiodns = "*" aiohttp = "<2.3.0,>=2.0.0" websockets = ">=4.0,<5.0" +fuzzywuzzy = "*" +python-levenshtein = "*" [dev-packages] "flake8" = "*" diff --git a/Pipfile.lock b/Pipfile.lock index 4e5214bb..52f937f0 100644 --- a/Pipfile.lock +++ b/Pipfile.lock @@ -1,7 +1,7 @@ { "_meta": { "hash": { - "sha256": "d797e580ddcddc99bf058109ab0306ad584c2902752a3d4076ba713fdc580fb7" + "sha256": "97cdb19ecbfa6c1537186dff53c41fb23bd61538e796d0e184d5b31ddae9f864" }, "pipfile-spec": 6, "requires": { @@ -60,6 +60,14 @@ ], "version": "==3.0.4" }, + "fuzzywuzzy": { + "hashes": [ + "sha256:d40c22d2744dff84885b30bbfc07fab7875f641d070374331777a4d1808b8d4e", + "sha256:ecf490216fb4d76b558a03042ff8f45a8782f17326caca1384d834cbaa2c7e6f" + ], + "index": "pypi", + "version": "==0.16.0" + }, "idna": { "hashes": [ "sha256:2c6a5de3089009e3da7c5dde64a141dbc8551d5b7f6cf4ed7c2568d0cc520a8f", @@ -120,6 +128,13 @@ ], "version": "==2.3.0" }, + "python-levenshtein": { + "hashes": [ + "sha256:033a11de5e3d19ea25c9302d11224e1a1898fe5abd23c61c7c360c25195e3eb1" + ], + "index": "pypi", + "version": "==0.12.0" + }, "websockets": { "hashes": [ "sha256:0c31bc832d529dc7583d324eb6c836a4f362032a1902723c112cf57883488d8c", diff --git a/bot/cogs/snakes.py b/bot/cogs/snakes.py index c9ed8042..239aeb87 100644 --- a/bot/cogs/snakes.py +++ b/bot/cogs/snakes.py @@ -1,8 +1,12 @@ # coding=utf-8 +import asyncio +import json import logging -from typing import Any, Dict +import random +from typing import Any, Dict, List -from discord.ext.commands import AutoShardedBot, Context, command +from fuzzywuzzy import fuzz +from discord.ext.commands import AutoShardedBot, Context, command, BadArgument log = logging.getLogger(__name__) @@ -15,6 +19,66 @@ class Snakes: def __init__(self, bot: AutoShardedBot): self.bot = bot + # Not final data + with open('data.json', 'r') as f: + self.data = json.load(f) + + async def disambiguate(self, ctx: Context, entries: List[str], timeout: int = 30): + """ + Has the user choose between multiple entries in case one could not be chosen automatically. + + :param ctx: Context object from discord.py + :param entries: List of items for user to choose from + :param timeout: Number of seconds to wait before canceling disambiguation + :return: Users choice for correct entry. + """ + # allow names too and not only numbers? + if len(entries) == 0: + raise BadArgument('No matches found.') + + if len(entries) == 1: + return entries[0] + + choices = '\n'.join('{0}: {1}'.format(index, entry) for index, entry in enumerate(entries, start=1)) + await ctx.send('Found multiple entries. Please choose the correct one.\n```' + choices + '```') + + def check(message): + return (message.content.isdigit() and + message.author == ctx.author and + message.channel == ctx.channel) + + try: + message = await self.bot.wait_for('message', check=check, timeout=timeout) + except asyncio.TimeoutError: + raise BadArgument('Timed out.') + + # Guaranteed to not error because of isdigit() in check + index = int(message.content) + + try: + return entries[index - 1] + except IndexError: + raise BadArgument('Invalid choice.') + + def get_potential_matches(self, name): + # TODO + # - make this a converter instead + # - nested disambiguation? + # - convert to scientific name in converter for an easier time + # - custom Context object hoo boy + + if name is None: + # Need list cast because choice() uses indexing internally + return [random.choice(list(self.data.values()))] + + def predicate(item): + nonlocal name + item, name = item.lower(), name.lower() + return fuzz.partial_ratio(item, name) > 80 or fuzz.ratio(item, name) > 80 + + # Maybe they should be separate + return [item for item in self.data.keys() | self.data.values() if predicate(item)] + async def get_snek(self, name: str = None) -> Dict[str, Any]: """ Go online and fetch information about a snake @@ -40,6 +104,16 @@ async def get(self, ctx: Context, name: str = None): :param ctx: Context object passed from discord.py :param name: Optional, the name of the snake to get information for - omit for a random snake """ + items = self.get_potential_matches(name) + result = await self.disambiguate(ctx, items) + await ctx.send(result) + + async def on_command_error(self, ctx, error): + # Temporary + if not isinstance(error, BadArgument): + return + + await ctx.send(str(error)) # Any additional commands can be placed here. Be creative, but keep it to a reasonable amount! diff --git a/data.json b/data.json new file mode 100644 index 00000000..79255601 --- /dev/null +++ b/data.json @@ -0,0 +1,565 @@ +{ + "Viper Adder": "Gaboon viper", + "Common adder": "Vipera berus", + "Desert death adder": "Desert death adder", + "Long-nosed adder": "Eastern hognose snake", + "Mud adder": "Mud adder", + "Namaqua dwarf adder": "Bitis schneideri", + "Nightingale adder": "List of snakes by common name", + "Peringuey's adder": "Bitis peringueyi", + "African puff adder": "Bitis arietans", + "Rhombic night adder": "Causus maculatus", + "Dwarf sand adder": "Bitis peringueyi", + "Namib dwarf sand adder": "Bitis peringueyi", + "Water adder": "Agkistrodon piscivorus", + "Aesculapian snake": "Aesculapian snake", + "Anaconda": "Anaconda", + "Bolivian anaconda": "Eunectes beniensis", + "De Schauensee's anaconda": "Eunectes deschauenseei", + "Green anaconda": "Green anaconda", + "Yellow anaconda": "Yellow anaconda", + "Arafura file snake": "Acrochordus arafurae", + "European asp": "Vipera aspis", + "Egyptian asp": "Cerastes vipera", + "African beaked snake": "Rufous beaked snake", + "Ball Python": "Ball python", + "Bird snake": "Twig snake", + "Black-headed snake": "Western black-headed snake", + "Mexican black kingsnake": "Mexican black kingsnake", + "Black rat snake": "Black rat snake", + "Red-bellied black snake": "Red-bellied black snake", + "Blind snake": "Scolecophidia", + "Brahminy blind snake": "Indotyphlops braminus", + "Texas blind snake": "Leptotyphlops dulcis", + "Western blind snake": "Leptotyphlops humilis", + "Boa": "Boidae", + "Abaco Island boa": "Epicrates exsul", + "Amazon tree boa": "Corallus hortulanus", + "Boa constrictor": "Boa constrictor", + "Cuban boa": "Chilabothrus angulifer", + "Dumeril's boa": "Acrantophis dumerili", + "Dwarf boa": "Boa constrictor", + "Emerald tree boa": "Emerald tree boa", + "Hogg Island boa": "Boa constrictor imperator", + "Jamaican boa": "Jamaican boa", + "Madagascar ground boa": "Acrantophis madagascariensis", + "Madagascar tree boa": "Sanzinia", + "Puerto Rican boa": "Puerto Rican boa", + "Rainbow boa": "Rainbow boa", + "Red-tailed boa": "Boa constrictor", + "Rosy boa": "Rosy boa", + "Rubber boa": "Rubber boa", + "Sand boa": "Erycinae", + "Tree boa": "Emerald tree boa", + "Boiga": "Boiga", + "Boomslang": "Boomslang", + "Brown snake": "Brown snake", + "Eastern brown snake": "Eastern brown snake", + "Bull snake": "Bull snake", + "Dwarf beaked snake": "Dwarf beaked snake", + "Rufous beaked snake": "Rufous beaked snake", + "Canebrake": "Canebrake", + "Cat-eyed snake": "Banded cat-eyed snake", + "Banded cat-eyed snake": "Banded cat-eyed snake", + "Green cat-eyed snake": "List of snakes by common name", + "Cat snake": "Boiga", + "Andaman cat snake": "Boiga andamanensis", + "Beddome's cat snake": "Boiga beddomei", + "Dog-toothed cat snake": "Boiga cynodon", + "Forsten's cat snake": "Boiga forsteni", + "Gold-ringed cat snake": "Boiga dendrophila", + "Gray cat snake": "Boiga ocellata", + "Many-spotted cat snake": "Boiga multomaculata", + "Nicobar cat snake": "Boiga wallachi", + "Sri Lanka cat snake": "Boiga ceylonensis", + "Tawny cat snake": "Boiga ochracea", + "Coachwhip snake": "Masticophis flagellum", + "Cobra": "Cobra", + "Andaman cobra": "Andaman cobra", + "Arabian cobra": "Arabian cobra", + "Asian cobra": "Indian cobra", + "Banded water cobra": "Naja annulata", + "Black-necked cobra": "Black-necked spitting cobra", + "Black-necked spitting cobra": "Black-necked spitting cobra", + "Black tree cobra": "Cobra", + "Burrowing cobra": "Egyptian cobra", + "Cape cobra": "Cape cobra", + "Caspian cobra": "Caspian cobra", + "Chinese cobra": "Chinese cobra", + "Congo water cobra": "Naja christyi", + "Common cobra": "Chinese cobra", + "Eastern water cobra": "Cobra", + "Egyptian cobra": "Egyptian cobra", + "Equatorial spitting cobra": "Equatorial spitting cobra", + "False cobra": "False cobra", + "False water cobra": "Hydrodynastes gigas", + "Forest cobra": "Forest cobra", + "Gold tree cobra": "Pseudohaje goldii", + "Indian cobra": "Indian cobra", + "Indochinese spitting cobra": "Indochinese spitting cobra", + "Javan spitting cobra": "Javan spitting cobra", + "King cobra": "King cobra", + "Mandalay cobra": "Mandalay spitting cobra", + "Monocled cobra": "Monocled cobra", + "Monoculate cobra": "List of snakes by common name", + "Mozambique spitting cobra": "Mozambique spitting cobra", + "North Philippine cobra": "List of dangerous snakes", + "Nubian spitting cobra": "Nubian spitting cobra", + "Philippine cobra": "Philippine cobra", + "Red spitting cobra": "Red spitting cobra", + "Rinkhals cobra": "Rinkhals", + "Shield-nosed cobra": "Shield-nosed cobra", + "Sinai desert cobra": "List of snakes by common name", + "Southern Indonesian spitting cobra": "Javan spitting cobra", + "Southern Philippine cobra": "Samar cobra", + "Southwestern black spitting cobra": "List of snakes by common name", + "Snouted cobra": "Snouted cobra", + "Spectacled cobra": "Indian cobra", + "Spitting cobra": "Spitting cobra", + "Storm water cobra": "Naja annulata", + "Thai cobra": "King cobra", + "West African brown spitting cobra": "Mozambique spitting cobra", + "White-lipped cobra": "List of snakes by common name", + "Yellow cobra": "Cape cobra", + "Zebra spitting cobra": "Naja nigricincta", + "Collett's snake": "Collett's snake", + "Congo snake": "Amphiuma", + "American copperhead": "Agkistrodon contortrix", + "Australian copperhead": "Austrelaps", + "Coral snake": "Coral snake", + "Arizona coral snake": "Coral snake", + "Beddome's coral snake": "Beddome's coral snake", + "Brazilian coral snake": "Brazilian coral snake", + "Cape coral snake": "Aspidelaps lubricus", + "Eastern coral snake": "Micrurus fulvius", + "False coral snake": "Coral snake", + "Harlequin coral snake": "Micrurus fulvius", + "High Woods coral snake": "Coral snake", + "Malayan long-glanded coral snake": "Calliophis bivirgata", + "Texas Coral Snake": "Coral snake", + "Western coral snake": "Coral snake", + "Corn snake": "Corn snake", + "South eastern corn snake": "Corn snake", + "Cottonmouth": "Agkistrodon piscivorus", + "Crowned snake": "Tantilla", + "Cuban wood snake": "Tropidophis melanurus", + "Eastern hognose snake": "Eastern hognose snake", + "Egg-eater": "Dasypeltis scabra", + "Indian egg-eater": "Indian egg-eating snake", + "Eyelash viper": "Bothriechis schlegelii", + "Fierce snake": "Inland taipan", + "Fishing snake": "Trout", + "Flying snake": "Chrysopelea", + "Golden tree snake": "Chrysopelea ornata", + "Indian flying snake": "Chrysopelea ornata", + "Moluccan flying snake": "Chrysopelea", + "Ornate flying snake": "Chrysopelea ornata", + "Paradise flying snake": "Chrysopelea paradisi", + "Banded Flying Snake": "Banded flying snake", + "Fox snake, three species of Pantherophis": "Pantherophis obsoletus", + "Forest flame snake": "List of snakes by common name", + "Garter snake": "Garter snake", + "Checkered garter snake": "Checkered garter snake", + "Common garter snake": "Common garter snake", + "San Francisco garter snake": "San Francisco garter snake", + "Texas garter snake": "Texas garter snake", + "Glossy snake": "Glossy snake", + "Gopher snake": "Pacific gopher snake", + "Cape gopher snake": "Cape gopher snake", + "Grass snake": "Grass snake", + "Green snake": "Green Snake", + "Rough green snake": "Opheodrys aestivus", + "Smooth green snake": "Smooth green snake", + "Common ground snake": "Western ground snake", + "Three-lined ground snake": "Atractus trilineatus", + "Western ground snake": "Western ground snake", + "Habu": "Habu", + "Himehabu": "Ovophis okinavensis", + "Okinawan habu": "Okinawan habu", + "Sakishima habu": "Habu", + "Tokara habu": "Habu", + "Elaps harlequin snake": "Micrurus fulvius", + "Herald snake": "Caduceus", + "Hognose snake": "Hognose", + "Blonde hognose snake": "Hognose", + "Dusty hognose snake": "Hognose", + "Jan's hognose snake": "Hognose", + "Giant Malagasy hognose snake": "Hognose", + "Mexican hognose snake": "Hognose", + "Plains hognose snake": "Western hognose snake", + "Ringed hognose snake": "Hognose", + "South American hognose snake": "Hognose", + "Southern hognose snake": "Southern hognose snake", + "Speckled hognose snake": "Hognose", + "Tri-color hognose snake": "Hognose", + "Western hognose snake": "Western hognose snake", + "Hoop snake": "Hoop snake", + "Hundred pacer": "Deinagkistrodon", + "Ikaheka snake": "Micropechis ikaheka", + "Indigo snake": "Eastern indigo snake", + "Jamaican Tree Snake": "List of snakes by common name", + "Jararacussu": "Bothrops jararacussu", + "Keelback": "Natricinae", + "Andrea's keelback": "Amphiesma andreae", + "Asian keelback": "Amphiesma vibakari", + "Assam keelback": "Amphiesma pealii", + "Black-striped keelback": "Buff striped keelback", + "Buff striped keelback": "Buff striped keelback", + "Burmese keelback": "Burmese keelback water snake", + "Checkered keelback": "Checkered keelback", + "Common keelback": "Common keelback", + "Hill keelback": "Amphiesma monticola", + "Himalayan keelback": "Amphiesma platyceps", + "Khasi Hills keelback": "Amphiesma khasiense", + "Modest keelback": "Amphiesma modestum", + "Nicobar Island keelback": "Amphiesma nicobariense", + "Nilgiri keelback": "Nilgiri keelback", + "Orange-collared keelback": "Rhabdophis himalayanus", + "Red-necked keelback": "Rhabdophis subminiatus", + "Sikkim keelback": "Sikkim keelback", + "Tiger keelback": "List of snakes by common name", + "Wall's keelback": "Amphiesma xenura", + "White-lipped keelback": "Amphiesma leucomystax", + "Wynaad keelback": "Amphiesma monticola", + "Yunnan keelback": "Amphiesma parallelum", + "King brown": "Mulga snake", + "King snake": "Kingsnake", + "California kingsnake": "California kingsnake", + "Desert kingsnake": "Desert kingsnake", + "Grey-banded kingsnake": "Gray-banded kingsnake", + "North eastern king snake": "Eastern hognose snake", + "Prairie kingsnake": "Lampropeltis calligaster", + "Scarlet kingsnake": "Scarlet kingsnake", + "Speckled kingsnake": "Lampropeltis getula holbrooki", + "Krait": "Bungarus", + "Banded krait": "Banded krait", + "Blue krait": "Bungarus candidus", + "Black krait": "Greater black krait", + "Burmese krait": "Burmese krait", + "Ceylon krait": "Banded krait", + "Indian krait": "Bungarus", + "Lesser black krait": "Lesser black krait", + "Malayan krait": "Bungarus candidus", + "Many-banded krait": "Many-banded krait", + "Northeastern hill krait": "Northeastern hill krait", + "Red-headed krait": "Red-headed krait", + "Sind krait": "Sind krait", + "South Andaman krait": "South Andaman krait", + "Large shield snake": "Pseudotyphlops", + "Lancehead": "Bothrops", + "Common lancehead": "Bothrops atrox", + "Grey Lora": "Leptophis stimsoni", + "Lyre snake": "Trimorphodon", + "Central American lyre snake": "Trimorphodon biscutatus", + "Texas lyre snake": "Trimorphodon biscutatus vilkinsonii", + "Eastern lyre snake": "List of snakes by common name", + "Mamba": "Mamba", + "Black mamba": "Black mamba", + "Eastern green mamba": "Eastern green mamba", + "Western green mamba": "Western green mamba", + "Mamushi": "Mamushi", + "Mangrove snake": "Mangrove snake", + "Milk snake": "Milk snake", + "Moccasin snake": "Agkistrodon piscivorus", + "Montpellier snake": "Malpolon monspessulanus", + "Mud snake": "Mud snake", + "Eastern mud snake": "Mud snake", + "Western mud snake": "Mud snake", + "Mussurana": "Mussurana", + "Night snake": "Night snake", + "Cat-eyed night snake": "Banded cat-eyed snake", + "Texas night snake": "Hypsiglena jani", + "Narrowhead Garter Snake": "Garter snake", + "Nose-horned viper": "Nose-horned viper", + "Parrot snake": "Leptophis ahaetulla", + "Mexican parrot snake": "Leptophis mexicanus", + "Patchnose snake": "Salvadora (snake)", + "Perrotet's shieldtail snake": "Plectrurus perrotetii", + "Pine snake": "Pine snake", + "Dwarf pipe snake": "Anomochilus", + "Red-tailed pipe snake": "List of snakes by common name", + "African rock python": "African rock python", + "Amethystine python": "Amethystine python", + "Angolan python": "Python anchietae", + "Australian scrub python": "Amethystine python", + "Ball python": "Ball python", + "Bismarck ringed python": "Bothrochilus", + "Black headed python": "Black-headed python", + "Blood python": "Python brongersmai", + "Boelen python": "Morelia boeleni", + "Borneo short-tailed python": "Borneo python", + "Bredl's python": "Morelia bredli", + "Brown water python": "Liasis fuscus", + "Burmese python": "Burmese python", + "Calabar python": "Calabar python", + "Western carpet python": "Morelia spilota", + "Centralian carpet python": "Morelia bredli", + "Coastal carpet python": "Morelia spilota mcdowelli", + "Inland carpet python": "Morelia spilota metcalfei", + "Jungle carpet python": "Morelia spilota cheynei", + "New Guinea carpet python": "Morelia spilota variegata", + "Northwestern carpet python": "Morelia spilota variegata", + "Southwestern carpet python": "Morelia spilota imbricata", + "Children's python": "Children's python", + "Dauan Island water python": "Liasis fuscus", + "Desert woma python": "Woma python", + "Diamond python": "Morelia spilota spilota", + "Flinders python": "List of snakes by common name", + "Green tree python": "Green tree python", + "Halmahera python": "Morelia tracyae", + "Indian python": "Python molurus", + "Indonesian water python": "Liasis mackloti", + "Macklot's python": "Liasis mackloti", + "Oenpelli python": "Oenpelli python", + "Olive python": "Liasis olivaceus", + "Papuan python": "Apodora", + "Pygmy python": "Pygmy python", + "Red blood python": "Python brongersmai", + "Reticulated python": "Reticulated python", + "Kayaudi dwarf reticulated python": "Reticulated python", + "Selayer reticulated python": "Reticulated python", + "Rough-scaled python": "Rough-scaled python", + "Royal python": "Ball python", + "Savu python": "Liasis mackloti savuensis", + "Spotted python": "Spotted python", + "Stimson's python": "Stimson's python", + "Sumatran short-tailed python": "Python curtus", + "Tanimbar python": "Reticulated python", + "Timor python": "Monty Python", + "Wetar Island python": "Wetar", + "White-lipped python": "Leiopython", + "Brown white-lipped python": "Leiopython", + "Northern white-lipped python": "Leiopython", + "Southern white-lipped python": "Leiopython", + "Woma python": "Woma python", + "Western woma python": "Woma python", + "Queen snake": "Queen snake", + "Bimini racer": "List of snakes by common name", + "Buttermilk racer": "Coluber constrictor anthicus", + "Eastern racer": "Coluber constrictor", + "Eastern yellowbelly sad racer": "List of snakes by common name", + "Mexican racer": "Coluber constrictor oaxaca", + "Southern black racer": "Southern black racer", + "Tan racer": "Coluber constrictor etheridgei", + "West Indian racer": "Antiguan racer", + "Raddysnake": "List of snakes by common name", + "Southwestern blackhead snake": "Tantilla hobartsmithi", + "Rat snake": "Rat snake", + "Baird's rat snake": "Pantherophis bairdi", + "Beauty rat snake": "Beauty rat snake", + "Great Plains rat snake": "Pantherophis emoryi", + "Green rat snake": "Rat snake", + "Japanese forest rat snake": "Euprepiophis conspicillatus", + "Japanese rat snake": "Japanese rat snake", + "King rat snake": "Rat snake", + "Mandarin rat snake": "Mandarin rat snake", + "Persian rat snake": "Rat snake", + "Twin-spotted rat snake": "Rat snake", + "Yellow-striped rat snake": "Rat snake", + "Manchurian Black Water Snake": "Elaphe schrenckii", + "Rattlesnake": "Rattlesnake", + "Arizona black rattlesnake": "Crotalus oreganus cerberus", + "Aruba rattlesnake": "Crotalus durissus unicolor", + "Coronado Island rattlesnake": "Coronado Islands", + "Durango rock rattlesnake": "Crotalus lepidus klauberi", + "Dusky pigmy rattlesnake": "Sistrurus miliarius barbouri", + "Eastern diamondback rattlesnake": "Eastern diamondback rattlesnake", + "Grand Canyon rattlesnake": "Crotalus oreganus abyssus", + "Hopi rattlesnake": "Crotalus viridis nuntius", + "Lance-headed rattlesnake": "Crotalus polystictus", + "Long-tailed rattlesnake": "Rattlesnake", + "Massasauga rattlesnake": "Massasauga", + "Mexican green rattlesnake": "Crotalus basiliscus", + "Mexican west coast rattlesnake": "Crotalus basiliscus", + "Midget faded rattlesnake": "Crotalus oreganus concolor", + "Mojave rattlesnake": "Crotalus scutulatus", + "Northern black-tailed rattlesnake": "Crotalus molossus", + "Oaxacan small-headed rattlesnake": "List of rattlesnake species and subspecies", + "Rattler": "Rattlesnake", + "Red diamond rattlesnake": "Crotalus ruber", + "Southern Pacific rattlesnake": "Crotalus oreganus helleri", + "Southwestern speckled rattlesnake": "Crotalus mitchellii pyrrhus", + "Tancitaran dusky rattlesnake": "Crotalus pusillus", + "Tiger rattlesnake": "Crotalus tigris", + "Timber rattlesnake": "Timber rattlesnake", + "Tropical rattlesnake": "Crotalus durissus", + "Twin-spotted rattlesnake": "Crotalus pricei", + "Uracoan rattlesnake": "Crotalus durissus vegrandis", + "Western diamondback rattlesnake": "Western diamondback rattlesnake", + "Ribbon snake": "Ribbon snake", + "Rinkhals": "Rinkhals", + "River jack": "Bitis nasicornis", + "Sea snake": "Hydrophiinae", + "Annulated sea snake": "Hydrophis cyanocinctus", + "Beaked sea snake": "Enhydrina schistosa", + "Dubois's sea snake": "Aipysurus duboisii", + "Hook Nosed Sea Snake": "Enhydrina schistosa", + "Olive sea snake": "Aipysurus laevis", + "Pelagic sea snake": "Yellow-bellied sea snake", + "Yellow-banded sea snake": "Yellow-bellied sea snake", + "Yellow-bellied sea snake": "Yellow-bellied sea snake", + "Yellow-lipped sea snake": "Yellow-lipped sea krait", + "Shield-tailed snake": "Uropeltidae", + "Colorado desert sidewinder": "Crotalus cerastes laterorepens", + "Mojave desert sidewinder": "Crotalus cerastes", + "Sonoran sidewinder": "Crotalus cerastes cercobombus", + "Small-eyed snake": "Micropechis ikaheka", + "Smooth snake": "Smooth snake", + "Brazilian smooth snake": "Hydrodynastes gigas", + "European smooth snake": "Smooth snake", + "Sonoran": "Sonoran Desert", + "Stiletto snake": "Atractaspidinae", + "Striped snake": "Japanese striped snake", + "Japanese striped snake": "Japanese striped snake", + "Sunbeam snake": "Xenopeltis", + "Taipan": "Taipan", + "Central ranges taipan": "Oxyuranus temporalis", + "Coastal taipan": "Coastal taipan", + "Inland taipan": "Inland taipan", + "Tentacled snake": "Erpeton tentaculatum", + "Tic polonga": "Russell's viper", + "Tiger snake": "Tiger snake", + "Chappell Island tiger snake": "Tiger snake", + "Common tiger snake": "Tiger snake", + "Down's tiger snake": "Tiger snake", + "Eastern tiger snake": "Tiger snake", + "King Island tiger snake": "Tiger snake", + "Krefft's tiger snake": "Tiger snake", + "Peninsula tiger snake": "Tiger snake", + "Tasmanian tiger snake": "Tiger snake", + "Western tiger snake": "Tiger snake", + "Tigre snake": "Spilotes pullatus", + "Tree snake": "Brown tree snake", + "Blanding's tree snake": "Toxicodryas blandingii", + "Blunt-headed tree snake": "Imantodes cenchoa", + "Brown tree snake": "Brown tree snake", + "Long-nosed tree snake": "List of snakes by common name", + "Many-banded tree snake": "Many-banded tree snake", + "Northern tree snake": "Dendrelaphis calligastra", + "Trinket snake": "Trinket snake", + "Black-banded trinket snake": "List of snakes by common name", + "Twig snake": "Twig snake", + "African twig snake": "Twig snake", + "Twin Headed King Snake": "Polycephaly", + "Titanboa": "Titanio", + "Urutu": "EE-11 Urutu", + "Asian Vine Snake, Whip Snake": "List of snakes by common name", + "American Vine Snake": "Oxybelis fulgidus", + "Mexican vine snake": "Oxybelis aeneus", + "Viper": "Viperidae", + "Asp viper": "Vipera aspis", + "Bluntnose viper": "Macrovipera lebetina", + "Brazilian mud Viper": "List of snakes by common name", + "Burrowing viper": "Atractaspidinae", + "Bush viper": "Atheris", + "Great Lakes bush viper": "Atheris nitschei", + "Hairy bush viper": "Atheris hispida", + "Nitsche's bush viper": "Atheris nitschei", + "Rough-scaled bush viper": "Atheris hispida", + "Spiny bush viper": "Atheris hispida", + "Carpet viper": "Echis", + "Crossed viper": "Vipera berus", + "Cyclades blunt-nosed viper": "Macrovipera schweizeri", + "False horned viper": "Pseudocerastes", + "Fea's viper": "Azemiops", + "Fifty pacer": "Deinagkistrodon", + "Gaboon viper": "Gaboon viper", + "Hognosed viper": "List of snakes by common name", + "Horned desert viper": "Cerastes cerastes", + "Horned viper": "Horned viper", + "Jumping viper": "Atropoides", + "Kaznakov's viper": "Vipera kaznakovi", + "Leaf-nosed viper": "Eristicophis", + "Leaf viper": "Atheris squamigera", + "Levant viper": "Macrovipera lebetina", + "Long-nosed viper": "Vipera ammodytes", + "McMahon's viper": "Eristicophis", + "Mole viper": "Atractaspidinae", + "Palestine viper": "Vipera palaestinae", + "Pallas' viper": "Gloydius halys", + "Palm viper": "Bothriechis lateralis", + "Amazonian palm viper": "Bothriopsis bilineata", + "Black-speckled palm-pitviper": "Bothriechis nigroviridis", + "Eyelash palm-pitviper": "Bothriechis schlegelii", + "Green palm viper": "Bothriechis lateralis", + "Mexican palm-pitviper": "List of snakes by common name", + "Guatemalan palm viper": "Bothriechis aurifer", + "Honduran palm viper": "Bothriechis marchi", + "Siamese palm viper": "Trimeresurus puniceus", + "Side-striped palm-pitviper": "Bothriechis lateralis", + "Yellow-lined palm viper": "Bothriechis lateralis", + "Pit viper": "Pit viper", + "Banded pitviper": "Trimeresurus fasciatus", + "Bamboo pitviper": "Trimeresurus gramineus", + "Barbour's pit viper": "Mixcoatlus barbouri", + "Black-tailed horned pit viper": "List of snakes by common name", + "Bornean pitviper": "Trimeresurus borneensis", + "Brongersma's pitviper": "Trimeresurus brongersmai", + "Brown spotted pitviper": "Trimeresurus mucrosquamatus", + "Cantor's pitviper": "Trimeresurus cantori", + "Elegant pitviper": "Trimeresurus elegans", + "Eyelash pit viper": "Bothriechis schlegelii", + "Fan-Si-Pan horned pitviper": "Trimeresurus cornutus", + "Flat-nosed pitviper": "Trimeresurus puniceus", + "Godman's pit viper": "Cerrophidion godmani", + "Green tree pit viper": "Trimeresurus gramineus", + "Habu pit viper": "Habu", + "Hagen's pitviper": "Trimeresurus hageni", + "Horseshoe pitviper": "Trimeresurus strigatus", + "Jerdon's pitviper": "Trimeresurus jerdonii", + "Kanburian pit viper": "Trimeresurus kanburiensis", + "Kaulback's lance-headed pitviper": "Trimeresurus kaulbacki", + "Kham Plateau pitviper": "Protobothrops xiangchengensis", + "Large-eyed pitviper": "Trimeresurus macrops", + "Malabar rock pitviper": "Trimeresurus malabaricus", + "Malayan pit viper": "Pit viper", + "Mangrove pit viper": "Trimeresurus purpureomaculatus", + "Mangshan pitviper": "Trimeresurus mangshanensis", + "Motuo bamboo pitviper": "Trimeresurus medoensis", + "Nicobar bamboo pitviper": "Trimeresurus labialis", + "Philippine pitviper": "Trimeresurus flavomaculatus", + "Red-tailed bamboo pitviper": "List of snakes by common name", + "Schultze's pitviper": "Trimeresurus schultzei", + "Stejneger's bamboo pitviper": "Trimeresurus stejnegeri", + "Sri Lankan pit viper": "Trimeresurus trigonocephalus", + "Temple pit viper": "Pit viper", + "Tibetan bamboo pitviper": "Trimeresurus tibetanus", + "Tiger pit viper": "Trimeresurus kanburiensis", + "Undulated pit viper": "Ophryacus undulatus", + "Wagler's pit viper": "Tropidolaemus wagleri", + "Wirot's pit viper": "Trimeresurus puniceus", + "Portuguese viper": "Vipera seoanei", + "Rhinoceros viper": "Bitis nasicornis", + "Russell's viper": "Russell's viper", + "Saw-scaled viper": "Echis", + "Schlegel's viper": "Bothriechis schlegelii", + "Sedge viper": "Atheris nitschei", + "Sharp-nosed viper": "Deinagkistrodon", + "Snorkel viper": "Deinagkistrodon", + "Temple viper": "Tropidolaemus wagleri", + "Chinese tree viper": "Trimeresurus stejnegeri", + "Guatemalan tree viper": "Bothriechis bicolor", + "Hutton's tree viper": "Tropidolaemus huttoni", + "Indian tree viper": "Trimeresurus gramineus", + "Large-scaled tree viper": "Trimeresurus macrolepis", + "Malcolm's tree viper": "Trimeresurus sumatranus malcolmi", + "Nitsche's tree viper": "Atheris nitschei", + "Pope's tree viper": "Trimeresurus popeorum", + "Rough-scaled tree viper": "Atheris hispida", + "Rungwe tree viper": "Atheris nitschei rungweensis", + "Sumatran tree viper": "Trimeresurus sumatranus", + "White-lipped tree viper": "Trimeresurus albolabris", + "Ursini's viper": "Vipera ursinii", + "Wart snake": "Acrochordidae", + "Water moccasin": "Agkistrodon piscivorus", + "Bocourt's water snake": "Subsessor", + "Northern water snake": "Northern water snake", + "Long-nosed whip snake": "Ahaetulla nasuta", + "Wolf snake": "Lycodon capucinus", + "African wolf snake": "African golden wolf", + "Barred wolf snake": "Lycodon striatus", + "Common worm snake": "Indotyphlops braminus", + "Longnosed worm snake": "Leptotyphlops macrorhynchus", + "Wutu": "Bothrops alternatus", + "Yarara": "Bothrops jararaca" +} From 0a8ecf295d0e10a16244f1c6959730f619befbbc Mon Sep 17 00:00:00 2001 From: Eivind Teig Date: Sun, 25 Mar 2018 13:56:28 +0200 Subject: [PATCH 03/38] get_snake info from wikipedia, get_snek missing exception handeling --- bot/cogs/snakes.py | 48 +++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 47 insertions(+), 1 deletion(-) diff --git a/bot/cogs/snakes.py b/bot/cogs/snakes.py index 239aeb87..412c5ff0 100644 --- a/bot/cogs/snakes.py +++ b/bot/cogs/snakes.py @@ -1,5 +1,7 @@ # coding=utf-8 +import aiohttp import asyncio +import async_timeout import json import logging import random @@ -23,6 +25,11 @@ def __init__(self, bot: AutoShardedBot): with open('data.json', 'r') as f: self.data = json.load(f) + async def fetch(self, session, url): + async with async_timeout.timeout(10): + async with session.get(url) as response: + return await response.text() + async def disambiguate(self, ctx: Context, entries: List[str], timeout: int = 30): """ Has the user choose between multiple entries in case one could not be chosen automatically. @@ -92,6 +99,43 @@ async def get_snek(self, name: str = None) -> Dict[str, Any]: :param name: Optional, the name of the snake to get information for - omit for a random snake :return: A dict containing information on a snake """ + snake_info = {} + # python (programming language) pageid = 23862 + URL = "https://en.wikipedia.org/w/api.php?" + ACTION = "action=query" + LIST = "list=search" + SRSEARCH = "srsearch=" + INPUT = "Naja mossambica" + UTF8 = "utf8=" + SRLIMIT = "srlimit=1" + FORMAT = "format=json" + PROP = "prop=extracts|images|info" + EXLIMIT = "exlimit=max" + EXPLAINTEXT = "explaintext" + INPROP = "inprop=url" + + PAGE_ID_URL = f"{URL}{FORMAT}&{ACTION}&{LIST}&{SRSEARCH}{name}&{UTF8}&{SRLIMIT}" + + async with aiohttp.ClientSession() as session: + response = await self.fetch(session, PAGE_ID_URL) + j = json.loads(response) + # add exception handling + PAGEID = j["query"]["search"][0]["pageid"] + PAGEIDS = f"pageids={PAGEID}" + + snake_page = f"{URL}{FORMAT}&{ACTION}&{PROP}&{EXLIMIT}&{EXPLAINTEXT}&{INPROP}&{PAGEIDS}" + + async with aiohttp.ClientSession() as session: + response = await self.fetch(session, snake_page) + j = json.loads(response) + log.info(snake_page) + # constructing dict - handle exceptions later + snake_info["title"] = j["query"]["pages"][f"{PAGEID}"]["title"] + snake_info["extract"] = j["query"]["pages"][f"{PAGEID}"]["extract"][:1500] # just for limiting max 2k limit on discord + snake_info["images"] = j["query"]["pages"][f"{PAGEID}"]["images"] + snake_info["fullurl"] = j["query"]["pages"][f"{PAGEID}"]["fullurl"] + snake_info["pageid"] = j["query"]["pages"][f"{PAGEID}"]["pageid"] + return snake_info @command() async def get(self, ctx: Context, name: str = None): @@ -106,7 +150,9 @@ async def get(self, ctx: Context, name: str = None): """ items = self.get_potential_matches(name) result = await self.disambiguate(ctx, items) - await ctx.send(result) + log.info(type(result)) + r = await self.get_snek(result) + await ctx.send(r) async def on_command_error(self, ctx, error): # Temporary From 194b420116b69debd7b73bb95d8afd46b2dcf85d Mon Sep 17 00:00:00 2001 From: TildeBeta Date: Sun, 25 Mar 2018 15:23:43 +0300 Subject: [PATCH 04/38] Squashed commit of the following: commit ba5705b8e9e18d9f8a541dee446da21002853d37 Author: TildeBeta Date: Sun Mar 25 14:57:00 2018 +0300 Flake8 fixes and special case handling commit 051952e56f0fb89baa681feac322e4e8b1ad5f6d Author: TildeBeta Date: Sun Mar 25 01:01:39 2018 +0200 Fix disambiguator, create a mock embed commit d0d944fab0e92c749cb9860ad19b813b6771d192 Author: TildeBeta Date: Sun Mar 25 00:25:25 2018 +0200 Fix up malformed data commit d8d9894ef75be553601609a88404d24808ea3f45 Author: TildeBeta Date: Sat Mar 24 20:09:42 2018 +0200 Redundant set cast commit 0984643ce21cf1a052eea5a679de3123a471ec57 Author: TildeBeta Date: Sat Mar 24 19:33:29 2018 +0200 Improve disambiguation commit 2124795df38a814862c0621a829034edeb54d9db Author: TildeBeta Date: Sat Mar 24 15:26:55 2018 +0200 Paginate results instead of posting a massive block commit c6112d518ccd7868d7392b67a514f1e4ad1b966c Author: TildeBeta Date: Sat Mar 24 14:29:41 2018 +0200 Improve snake name matching --- bot/cogs/snakes.py | 108 ++--- bot/converters.py | 38 ++ bot/utils.py | 75 ++++ data.json => snakes.json | 908 +++++++++++++++++++-------------------- 4 files changed, 590 insertions(+), 539 deletions(-) create mode 100644 bot/converters.py rename data.json => snakes.json (87%) diff --git a/bot/cogs/snakes.py b/bot/cogs/snakes.py index 412c5ff0..44de89dd 100644 --- a/bot/cogs/snakes.py +++ b/bot/cogs/snakes.py @@ -1,14 +1,16 @@ # coding=utf-8 -import aiohttp -import asyncio -import async_timeout import json import logging -import random -from typing import Any, Dict, List +import re +import textwrap +from typing import Any, Dict -from fuzzywuzzy import fuzz -from discord.ext.commands import AutoShardedBot, Context, command, BadArgument +import aiohttp +import async_timeout +import discord +from discord.ext.commands import AutoShardedBot, BadArgument, Context, command + +from bot.converters import Snake log = logging.getLogger(__name__) @@ -18,74 +20,17 @@ class Snakes: Snake-related commands """ + # I really hope this works + wiki_re = re.compile(r'== (.*?) ==(.*?\n\n)', flags=re.DOTALL) + def __init__(self, bot: AutoShardedBot): self.bot = bot - # Not final data - with open('data.json', 'r') as f: - self.data = json.load(f) - async def fetch(self, session, url): async with async_timeout.timeout(10): async with session.get(url) as response: return await response.text() - async def disambiguate(self, ctx: Context, entries: List[str], timeout: int = 30): - """ - Has the user choose between multiple entries in case one could not be chosen automatically. - - :param ctx: Context object from discord.py - :param entries: List of items for user to choose from - :param timeout: Number of seconds to wait before canceling disambiguation - :return: Users choice for correct entry. - """ - # allow names too and not only numbers? - if len(entries) == 0: - raise BadArgument('No matches found.') - - if len(entries) == 1: - return entries[0] - - choices = '\n'.join('{0}: {1}'.format(index, entry) for index, entry in enumerate(entries, start=1)) - await ctx.send('Found multiple entries. Please choose the correct one.\n```' + choices + '```') - - def check(message): - return (message.content.isdigit() and - message.author == ctx.author and - message.channel == ctx.channel) - - try: - message = await self.bot.wait_for('message', check=check, timeout=timeout) - except asyncio.TimeoutError: - raise BadArgument('Timed out.') - - # Guaranteed to not error because of isdigit() in check - index = int(message.content) - - try: - return entries[index - 1] - except IndexError: - raise BadArgument('Invalid choice.') - - def get_potential_matches(self, name): - # TODO - # - make this a converter instead - # - nested disambiguation? - # - convert to scientific name in converter for an easier time - # - custom Context object hoo boy - - if name is None: - # Need list cast because choice() uses indexing internally - return [random.choice(list(self.data.values()))] - - def predicate(item): - nonlocal name - item, name = item.lower(), name.lower() - return fuzz.partial_ratio(item, name) > 80 or fuzz.ratio(item, name) > 80 - - # Maybe they should be separate - return [item for item in self.data.keys() | self.data.values() if predicate(item)] - async def get_snek(self, name: str = None) -> Dict[str, Any]: """ Go online and fetch information about a snake @@ -105,7 +50,6 @@ async def get_snek(self, name: str = None) -> Dict[str, Any]: ACTION = "action=query" LIST = "list=search" SRSEARCH = "srsearch=" - INPUT = "Naja mossambica" UTF8 = "utf8=" SRLIMIT = "srlimit=1" FORMAT = "format=json" @@ -131,14 +75,14 @@ async def get_snek(self, name: str = None) -> Dict[str, Any]: log.info(snake_page) # constructing dict - handle exceptions later snake_info["title"] = j["query"]["pages"][f"{PAGEID}"]["title"] - snake_info["extract"] = j["query"]["pages"][f"{PAGEID}"]["extract"][:1500] # just for limiting max 2k limit on discord + snake_info["extract"] = j["query"]["pages"][f"{PAGEID}"]["extract"] snake_info["images"] = j["query"]["pages"][f"{PAGEID}"]["images"] snake_info["fullurl"] = j["query"]["pages"][f"{PAGEID}"]["fullurl"] snake_info["pageid"] = j["query"]["pages"][f"{PAGEID}"]["pageid"] return snake_info @command() - async def get(self, ctx: Context, name: str = None): + async def get(self, ctx: Context, name: Snake = None): """ Go online and fetch information about a snake @@ -148,11 +92,25 @@ async def get(self, ctx: Context, name: str = None): :param ctx: Context object passed from discord.py :param name: Optional, the name of the snake to get information for - omit for a random snake """ - items = self.get_potential_matches(name) - result = await self.disambiguate(ctx, items) - log.info(type(result)) - r = await self.get_snek(result) - await ctx.send(r) + if name is None: + name = Snake.random() + + data = await self.get_snek(name) + embed = discord.Embed(title=data['title'], url=data['fullurl'], colour=0x59982F) + + print(data['extract']) + fields = self.wiki_re.findall(data['extract']) + print(fields) + + # TODO embeds can probably get way too big, only show one to three sentences from each section? + for title, body in fields: + value = textwrap.shorten(body.strip(), width=500) + embed.add_field(name=title, value= value + '\n\u200b', inline=False) + + embed.set_footer(text='Powered by Wikipedia') + + # TODO thumbnail in embed + await ctx.send(name, embed=embed) async def on_command_error(self, ctx, error): # Temporary diff --git a/bot/converters.py b/bot/converters.py new file mode 100644 index 00000000..3b37648c --- /dev/null +++ b/bot/converters.py @@ -0,0 +1,38 @@ +import json +import random + +from discord.ext.commands import Converter + +from fuzzywuzzy import fuzz + +from bot.utils import disambiguate + + +class Snake(Converter): + with open('snakes.json', 'r') as f: + snakes = json.load(f) + + async def convert(self, ctx, name): + if name.lower() == 'python': + return 'Python (programming language)' + + def get_potential(iterable, *, threshold=80): + nonlocal name + + name = name.lower() + for item in iterable: + a, b = fuzz.ratio(name, item.lower()), fuzz.partial_ratio(name, item.lower()) + + if a >= threshold or b >= threshold: + yield item + + all_names = self.snakes.keys() | self.snakes.values() + timeout = len(all_names) * (3 / 4) + + name = await disambiguate(ctx, list(get_potential(all_names)), timeout=timeout, colour=0x59982F) + return self.snakes.get(name, name) + + @classmethod + def random(cls): + # list cast necessary because choice() uses indexing internally + return random.choice(list(cls.snakes.values())) diff --git a/bot/utils.py b/bot/utils.py index eac37a4b..83650d05 100644 --- a/bot/utils.py +++ b/bot/utils.py @@ -1,4 +1,79 @@ # coding=utf-8 +import asyncio +from typing import List, Union + +import discord +from discord.ext.commands import BadArgument, Context + +from bot.pagination import LinePaginator + + +async def disambiguate(ctx: Context, entries: List[str], + *, timeout: float = 30, per_page: int = 20, empty: bool = False, + colour: Union[discord.Colour, int] = 0x000000): + """ + Has the user choose between multiple entries in case one could not be chosen automatically. + + :param ctx: Context object from discord.py + :param entries: List of items for user to choose from + :param timeout: Number of seconds to wait before canceling disambiguation + :param per_page: Entries per embed page + :param empty: Whether the paginator should have an extra line between items + :param colour: The colour for the embed + :return: Users choice for correct entry. + """ + if len(entries) == 0: + raise BadArgument('No matches found.') + + if len(entries) == 1: + return entries[0] + + choices = (f'{index}: {entry}' for index, entry in enumerate(entries, start=1)) + + def check(message): + return (message.content.isdigit() and + message.author == ctx.author and + message.channel == ctx.channel) + + try: + embed = discord.Embed(title='Found multiple choices. Please choose the correct one.', colour=colour) + embed.set_author(name=ctx.author.display_name, icon_url=ctx.author.avatar_url) + + coro1 = ctx.bot.wait_for('message', check=check, timeout=timeout) + coro2 = LinePaginator.paginate(choices, ctx, embed=embed, max_lines=per_page, + empty=empty, max_size=1500, timeout=9000) + + # wait_for timeout will go to except instead of the wait_for thing as I expected + futures = [asyncio.ensure_future(coro1), asyncio.ensure_future(coro2)] + done, pending = await asyncio.wait(futures, return_when=asyncio.FIRST_COMPLETED, loop=ctx.bot.loop) + + # :yert: + result = list(done)[0].result() + + # Pagination was canceled - result is None + if result is None: + for coro in pending: + coro.cancel() + raise BadArgument('Canceled.') + + # Pagination was not initiated, only one page + if result.author == ctx.bot.user: + # Continue the wait_for + result = await list(pending)[0] + + # Love that duplicate code + for coro in pending: + coro.cancel() + except asyncio.TimeoutError: + raise BadArgument('Timed out.') + + # Guaranteed to not error because of isdigit() in check + index = int(result.content) + + try: + return entries[index - 1] + except IndexError: + raise BadArgument('Invalid choice.') class CaseInsensitiveDict(dict): diff --git a/data.json b/snakes.json similarity index 87% rename from data.json rename to snakes.json index 79255601..7ea7e9f7 100644 --- a/data.json +++ b/snakes.json @@ -1,565 +1,545 @@ { - "Viper Adder": "Gaboon viper", - "Common adder": "Vipera berus", - "Desert death adder": "Desert death adder", - "Long-nosed adder": "Eastern hognose snake", - "Mud adder": "Mud adder", - "Namaqua dwarf adder": "Bitis schneideri", - "Nightingale adder": "List of snakes by common name", - "Peringuey's adder": "Bitis peringueyi", - "African puff adder": "Bitis arietans", - "Rhombic night adder": "Causus maculatus", - "Dwarf sand adder": "Bitis peringueyi", - "Namib dwarf sand adder": "Bitis peringueyi", - "Water adder": "Agkistrodon piscivorus", + "Acanthophis": "Acanthophis", "Aesculapian snake": "Aesculapian snake", + "African beaked snake": "Rufous beaked snake", + "African puff adder": "Bitis arietans", + "African rock python": "African rock python", + "African twig snake": "Twig snake", + "Agkistrodon piscivorus": "Agkistrodon piscivorus", + "Ahaetulla": "Ahaetulla", + "Amazonian palm viper": "Bothriopsis bilineata", + "American copperhead": "Agkistrodon contortrix", + "Amethystine python": "Amethystine python", "Anaconda": "Anaconda", - "Bolivian anaconda": "Eunectes beniensis", - "De Schauensee's anaconda": "Eunectes deschauenseei", - "Green anaconda": "Green anaconda", - "Yellow anaconda": "Yellow anaconda", + "Andaman cat snake": "Boiga andamanensis", + "Andrea's keelback": "Amphiesma andreae", + "Annulated sea snake": "Hydrophis cyanocinctus", "Arafura file snake": "Acrochordus arafurae", - "European asp": "Vipera aspis", - "Egyptian asp": "Cerastes vipera", - "African beaked snake": "Rufous beaked snake", - "Ball Python": "Ball python", + "Arizona black rattlesnake": "Crotalus oreganus cerberus", + "Arizona coral snake": "Coral snake", + "Aruba rattlesnake": "Crotalus durissus unicolor", + "Asian cobra": "Indian cobra", + "Asian keelback": "Amphiesma vibakari", + "Asp (reptile)": "Asp (reptile)", + "Assam keelback": "Amphiesma pealii", + "Australian copperhead": "Austrelaps", + "Australian scrub python": "Amethystine python", + "Baird's rat snake": "Pantherophis bairdi", + "Banded Flying Snake": "Banded flying snake", + "Banded cat-eyed snake": "Banded cat-eyed snake", + "Banded krait": "Banded krait", + "Barred wolf snake": "Lycodon striatus", + "Beaked sea snake": "Enhydrina schistosa", + "Beauty rat snake": "Beauty rat snake", + "Beddome's cat snake": "Boiga beddomei", + "Beddome's coral snake": "Beddome's coral snake", "Bird snake": "Twig snake", + "Black-banded trinket snake": "Oreocryptophis porphyraceus", "Black-headed snake": "Western black-headed snake", - "Mexican black kingsnake": "Mexican black kingsnake", - "Black rat snake": "Black rat snake", - "Red-bellied black snake": "Red-bellied black snake", + "Black-necked cobra": "Black-necked spitting cobra", + "Black-necked spitting cobra": "Black-necked spitting cobra", + "Black-striped keelback": "Buff striped keelback", + "Black-tailed horned pit viper": "Mixcoatlus melanurus", + "Black headed python": "Black-headed python", + "Black krait": "Greater black krait", + "Black mamba": "Black mamba", + "Black rat snake": "Rat snake", + "Black tree cobra": "Cobra", "Blind snake": "Scolecophidia", - "Brahminy blind snake": "Indotyphlops braminus", - "Texas blind snake": "Leptotyphlops dulcis", - "Western blind snake": "Leptotyphlops humilis", - "Boa": "Boidae", - "Abaco Island boa": "Epicrates exsul", - "Amazon tree boa": "Corallus hortulanus", + "Blonde hognose snake": "Hognose", + "Blood python": "Python brongersmai", + "Blue krait": "Bungarus candidus", + "Blunt-headed tree snake": "Imantodes cenchoa", "Boa constrictor": "Boa constrictor", - "Cuban boa": "Chilabothrus angulifer", - "Dumeril's boa": "Acrantophis dumerili", - "Dwarf boa": "Boa constrictor", - "Emerald tree boa": "Emerald tree boa", - "Hogg Island boa": "Boa constrictor imperator", - "Jamaican boa": "Jamaican boa", - "Madagascar ground boa": "Acrantophis madagascariensis", - "Madagascar tree boa": "Sanzinia", - "Puerto Rican boa": "Puerto Rican boa", - "Rainbow boa": "Rainbow boa", - "Red-tailed boa": "Boa constrictor", - "Rosy boa": "Rosy boa", - "Rubber boa": "Rubber boa", - "Sand boa": "Erycinae", - "Tree boa": "Emerald tree boa", + "Bocourt's water snake": "Subsessor", + "Boelen python": "Morelia boeleni", + "Boidae": "Boidae", "Boiga": "Boiga", "Boomslang": "Boomslang", - "Brown snake": "Brown snake", - "Eastern brown snake": "Eastern brown snake", + "Brahminy blind snake": "Indotyphlops braminus", + "Brazilian coral snake": "Coral snake", + "Brazilian smooth snake": "Hydrodynastes gigas", + "Brown snake (disambiguation)": "Brown snake", + "Brown tree snake": "Brown tree snake", + "Brown white-lipped python": "Leiopython", + "Buff striped keelback": "Buff striped keelback", "Bull snake": "Bull snake", - "Dwarf beaked snake": "Dwarf beaked snake", - "Rufous beaked snake": "Rufous beaked snake", - "Canebrake": "Canebrake", + "Burmese keelback": "Burmese keelback water snake", + "Burmese krait": "Burmese krait", + "Burmese python": "Burmese python", + "Burrowing viper": "Atractaspidinae", + "Buttermilk racer": "Coluber constrictor anthicus", + "California kingsnake": "California kingsnake", + "Cantor's pitviper": "Trimeresurus cantori", + "Cape cobra": "Cape cobra", + "Cape coral snake": "Aspidelaps lubricus", + "Cape gopher snake": "Cape gopher snake", + "Carpet viper": "Echis", + "Cat-eyed night snake": "Banded cat-eyed snake", "Cat-eyed snake": "Banded cat-eyed snake", - "Banded cat-eyed snake": "Banded cat-eyed snake", - "Green cat-eyed snake": "List of snakes by common name", "Cat snake": "Boiga", - "Andaman cat snake": "Boiga andamanensis", - "Beddome's cat snake": "Boiga beddomei", - "Dog-toothed cat snake": "Boiga cynodon", - "Forsten's cat snake": "Boiga forsteni", - "Gold-ringed cat snake": "Boiga dendrophila", - "Gray cat snake": "Boiga ocellata", - "Many-spotted cat snake": "Boiga multomaculata", - "Nicobar cat snake": "Boiga wallachi", - "Sri Lanka cat snake": "Boiga ceylonensis", - "Tawny cat snake": "Boiga ochracea", + "Central American lyre snake": "Trimorphodon biscutatus", + "Central ranges taipan": "Taipan", + "Chappell Island tiger snake": "Tiger snake", + "Checkered garter snake": "Checkered garter snake", + "Checkered keelback": "Checkered keelback", + "Children's python": "Children's python", + "Chinese cobra": "Chinese cobra", "Coachwhip snake": "Masticophis flagellum", + "Coastal taipan": "Coastal taipan", "Cobra": "Cobra", - "Andaman cobra": "Andaman cobra", - "Arabian cobra": "Arabian cobra", - "Asian cobra": "Indian cobra", - "Banded water cobra": "Naja annulata", - "Black-necked cobra": "Black-necked spitting cobra", - "Black-necked spitting cobra": "Black-necked spitting cobra", - "Black tree cobra": "Cobra", - "Burrowing cobra": "Egyptian cobra", - "Cape cobra": "Cape cobra", - "Caspian cobra": "Caspian cobra", - "Chinese cobra": "Chinese cobra", - "Congo water cobra": "Naja christyi", - "Common cobra": "Chinese cobra", - "Eastern water cobra": "Cobra", - "Egyptian cobra": "Egyptian cobra", - "Equatorial spitting cobra": "Equatorial spitting cobra", - "False cobra": "False cobra", - "False water cobra": "Hydrodynastes gigas", - "Forest cobra": "Forest cobra", - "Gold tree cobra": "Pseudohaje goldii", - "Indian cobra": "Indian cobra", - "Indochinese spitting cobra": "Indochinese spitting cobra", - "Javan spitting cobra": "Javan spitting cobra", - "King cobra": "King cobra", - "Mandalay cobra": "Mandalay spitting cobra", - "Monocled cobra": "Monocled cobra", - "Monoculate cobra": "List of snakes by common name", - "Mozambique spitting cobra": "Mozambique spitting cobra", - "North Philippine cobra": "List of dangerous snakes", - "Nubian spitting cobra": "Nubian spitting cobra", - "Philippine cobra": "Philippine cobra", - "Red spitting cobra": "Red spitting cobra", - "Rinkhals cobra": "Rinkhals", - "Shield-nosed cobra": "Shield-nosed cobra", - "Sinai desert cobra": "List of snakes by common name", - "Southern Indonesian spitting cobra": "Javan spitting cobra", - "Southern Philippine cobra": "Samar cobra", - "Southwestern black spitting cobra": "List of snakes by common name", - "Snouted cobra": "Snouted cobra", - "Spectacled cobra": "Indian cobra", - "Spitting cobra": "Spitting cobra", - "Storm water cobra": "Naja annulata", - "Thai cobra": "King cobra", - "West African brown spitting cobra": "Mozambique spitting cobra", - "White-lipped cobra": "List of snakes by common name", - "Yellow cobra": "Cape cobra", - "Zebra spitting cobra": "Naja nigricincta", "Collett's snake": "Collett's snake", + "Common adder": "Vipera berus", + "Common cobra": "Chinese cobra", + "Common garter snake": "Common garter snake", + "Common ground snake": "Western ground snake", + "Common keelback (disambiguation)": "Common keelback", + "Common tiger snake": "Tiger snake", + "Common worm snake": "Indotyphlops braminus", "Congo snake": "Amphiuma", - "American copperhead": "Agkistrodon contortrix", - "Australian copperhead": "Austrelaps", + "Congo water cobra": "Naja christyi", "Coral snake": "Coral snake", - "Arizona coral snake": "Coral snake", - "Beddome's coral snake": "Beddome's coral snake", - "Brazilian coral snake": "Brazilian coral snake", - "Cape coral snake": "Aspidelaps lubricus", - "Eastern coral snake": "Micrurus fulvius", - "False coral snake": "Coral snake", - "Harlequin coral snake": "Micrurus fulvius", - "High Woods coral snake": "Coral snake", - "Malayan long-glanded coral snake": "Calliophis bivirgata", - "Texas Coral Snake": "Coral snake", - "Western coral snake": "Coral snake", "Corn snake": "Corn snake", - "South eastern corn snake": "Corn snake", - "Cottonmouth": "Agkistrodon piscivorus", + "Coronado Island rattlesnake": "Crotalus oreganus caliginis", + "Crossed viper": "Vipera berus", + "Crotalus cerastes": "Crotalus cerastes", + "Crotalus durissus": "Crotalus durissus", + "Crotalus horridus": "Timber rattlesnake", "Crowned snake": "Tantilla", + "Cuban boa": "Chilabothrus angulifer", "Cuban wood snake": "Tropidophis melanurus", + "Dasypeltis": "Dasypeltis", + "Desert death adder": "Desert death adder", + "Desert kingsnake": "Desert kingsnake", + "Desert woma python": "Woma python", + "Diamond python": "Morelia spilota spilota", + "Dog-toothed cat snake": "Boiga cynodon", + "Down's tiger snake": "Tiger snake", + "Dubois's sea snake": "Aipysurus duboisii", + "Durango rock rattlesnake": "Crotalus lepidus klauberi", + "Dusty hognose snake": "Hognose", + "Dwarf beaked snake": "Dwarf beaked snake", + "Dwarf boa": "Boa constrictor", + "Dwarf pipe snake": "Anomochilus", + "Eastern brown snake": "Eastern brown snake", + "Eastern coral snake": "Micrurus fulvius", + "Eastern diamondback rattlesnake": "Eastern diamondback rattlesnake", + "Eastern green mamba": "Eastern green mamba", "Eastern hognose snake": "Eastern hognose snake", - "Egg-eater": "Dasypeltis scabra", - "Indian egg-eater": "Indian egg-eating snake", - "Eyelash viper": "Bothriechis schlegelii", + "Eastern mud snake": "Mud snake", + "Eastern racer": "Coluber constrictor", + "Eastern tiger snake": "Tiger snake", + "Eastern water cobra": "Cobra", + "Elaps harlequin snake": "Micrurus fulvius", + "Eunectes": "Eunectes", + "European Smooth Snake": "Smooth snake", + "False cobra": "False cobra", + "False coral snake": "Coral snake", + "False water cobra": "Hydrodynastes gigas", "Fierce snake": "Inland taipan", - "Fishing snake": "Trout", "Flying snake": "Chrysopelea", - "Golden tree snake": "Chrysopelea ornata", - "Indian flying snake": "Chrysopelea ornata", - "Moluccan flying snake": "Chrysopelea", - "Ornate flying snake": "Chrysopelea ornata", - "Paradise flying snake": "Chrysopelea paradisi", - "Banded Flying Snake": "Banded flying snake", - "Fox snake, three species of Pantherophis": "Pantherophis obsoletus", - "Forest flame snake": "List of snakes by common name", + "Forest cobra": "Forest cobra", + "Forsten's cat snake": "Boiga forsteni", + "Fox snake": "Fox snake", + "Gaboon viper": "Gaboon viper", "Garter snake": "Garter snake", - "Checkered garter snake": "Checkered garter snake", - "Common garter snake": "Common garter snake", - "San Francisco garter snake": "San Francisco garter snake", - "Texas garter snake": "Texas garter snake", + "Giant Malagasy hognose snake": "Hognose", "Glossy snake": "Glossy snake", - "Gopher snake": "Pacific gopher snake", - "Cape gopher snake": "Cape gopher snake", + "Gold-ringed cat snake": "Boiga dendrophila", + "Gold tree cobra": "Pseudohaje goldii", + "Golden tree snake": "Chrysopelea ornata", + "Gopher snake": "Pituophis catenifer", + "Grand Canyon rattlesnake": "Crotalus oreganus abyssus", "Grass snake": "Grass snake", - "Green snake": "Green Snake", - "Rough green snake": "Opheodrys aestivus", - "Smooth green snake": "Smooth green snake", - "Common ground snake": "Western ground snake", - "Three-lined ground snake": "Atractus trilineatus", - "Western ground snake": "Western ground snake", - "Habu": "Habu", - "Himehabu": "Ovophis okinavensis", - "Okinawan habu": "Okinawan habu", - "Sakishima habu": "Habu", - "Tokara habu": "Habu", - "Elaps harlequin snake": "Micrurus fulvius", + "Gray cat snake": "Boiga ocellata", + "Great Plains rat snake": "Pantherophis emoryi", + "Green anaconda": "Green anaconda", + "Green rat snake": "Rat snake", + "Green tree python": "Green tree python", + "Grey-banded kingsnake": "Gray-banded kingsnake", + "Grey Lora": "Leptophis stimsoni", + "Halmahera python": "Morelia tracyae", + "Harlequin coral snake": "Micrurus fulvius", "Herald snake": "Caduceus", - "Hognose snake": "Hognose", - "Blonde hognose snake": "Hognose", - "Dusty hognose snake": "Hognose", - "Jan's hognose snake": "Hognose", - "Giant Malagasy hognose snake": "Hognose", - "Mexican hognose snake": "Hognose", - "Plains hognose snake": "Western hognose snake", - "Ringed hognose snake": "Hognose", - "South American hognose snake": "Hognose", - "Southern hognose snake": "Southern hognose snake", - "Speckled hognose snake": "Hognose", - "Tri-color hognose snake": "Hognose", - "Western hognose snake": "Western hognose snake", - "Hoop snake": "Hoop snake", - "Hundred pacer": "Deinagkistrodon", - "Ikaheka snake": "Micropechis ikaheka", - "Indigo snake": "Eastern indigo snake", - "Jamaican Tree Snake": "List of snakes by common name", - "Jararacussu": "Bothrops jararacussu", - "Keelback": "Natricinae", - "Andrea's keelback": "Amphiesma andreae", - "Asian keelback": "Amphiesma vibakari", - "Assam keelback": "Amphiesma pealii", - "Black-striped keelback": "Buff striped keelback", - "Buff striped keelback": "Buff striped keelback", - "Burmese keelback": "Burmese keelback water snake", - "Checkered keelback": "Checkered keelback", - "Common keelback": "Common keelback", + "High Woods coral snake": "Coral snake", "Hill keelback": "Amphiesma monticola", "Himalayan keelback": "Amphiesma platyceps", + "Hognose snake": "Hognose", + "Hognosed viper": "Porthidium", + "Hook Nosed Sea Snake": "Enhydrina schistosa", + "Hoop snake": "Hoop snake", + "Hopi rattlesnake": "Crotalus viridis nuntius", + "Indian cobra": "Indian cobra", + "Indian egg-eater": "Indian egg-eating snake", + "Indian flying snake": "Chrysopelea ornata", + "Indian krait": "Bungarus", + "Indigo snake": "Drymarchon", + "Inland carpet python": "Morelia spilota metcalfei", + "Inland taipan": "Inland taipan", + "Jamaican boa": "Jamaican boa", + "Jan's hognose snake": "Hognose", + "Japanese forest rat snake": "Euprepiophis conspicillatus", + "Japanese rat snake": "Japanese rat snake", + "Japanese striped snake": "Japanese striped snake", + "Kayaudi dwarf reticulated python": "Reticulated python", + "Keelback": "Natricinae", "Khasi Hills keelback": "Amphiesma khasiense", - "Modest keelback": "Amphiesma modestum", - "Nicobar Island keelback": "Amphiesma nicobariense", - "Nilgiri keelback": "Nilgiri keelback", - "Orange-collared keelback": "Rhabdophis himalayanus", - "Red-necked keelback": "Rhabdophis subminiatus", - "Sikkim keelback": "Sikkim keelback", - "Tiger keelback": "List of snakes by common name", - "Wall's keelback": "Amphiesma xenura", - "White-lipped keelback": "Amphiesma leucomystax", - "Wynaad keelback": "Amphiesma monticola", - "Yunnan keelback": "Amphiesma parallelum", + "King Island tiger snake": "Tiger snake", "King brown": "Mulga snake", + "King cobra": "King cobra", + "King rat snake": "Rat snake", "King snake": "Kingsnake", - "California kingsnake": "California kingsnake", - "Desert kingsnake": "Desert kingsnake", - "Grey-banded kingsnake": "Gray-banded kingsnake", - "North eastern king snake": "Eastern hognose snake", - "Prairie kingsnake": "Lampropeltis calligaster", - "Scarlet kingsnake": "Scarlet kingsnake", - "Speckled kingsnake": "Lampropeltis getula holbrooki", "Krait": "Bungarus", - "Banded krait": "Banded krait", - "Blue krait": "Bungarus candidus", - "Black krait": "Greater black krait", - "Burmese krait": "Burmese krait", - "Ceylon krait": "Banded krait", - "Indian krait": "Bungarus", - "Lesser black krait": "Lesser black krait", - "Malayan krait": "Bungarus candidus", - "Many-banded krait": "Many-banded krait", - "Northeastern hill krait": "Northeastern hill krait", - "Red-headed krait": "Red-headed krait", - "Sind krait": "Sind krait", - "South Andaman krait": "South Andaman krait", - "Large shield snake": "Pseudotyphlops", + "Krefft's tiger snake": "Tiger snake", + "Lance-headed rattlesnake": "Crotalus polystictus", "Lancehead": "Bothrops", - "Common lancehead": "Bothrops atrox", - "Grey Lora": "Leptophis stimsoni", + "Large shield snake": "Pseudotyphlops", + "Leptophis ahaetulla": "Leptophis ahaetulla", + "Lesser black krait": "Lesser black krait", + "Long-nosed adder": "Eastern hognose snake", + "Long-nosed tree snake": "Western hognose snake", + "Long-nosed whip snake": "Ahaetulla nasuta", + "Long-tailed rattlesnake": "Rattlesnake", + "Longnosed worm snake": "Leptotyphlops macrorhynchus", "Lyre snake": "Trimorphodon", - "Central American lyre snake": "Trimorphodon biscutatus", - "Texas lyre snake": "Trimorphodon biscutatus vilkinsonii", - "Eastern lyre snake": "List of snakes by common name", + "Madagascar ground boa": "Acrantophis madagascariensis", + "Malayan krait": "Bungarus candidus", + "Malayan long-glanded coral snake": "Calliophis bivirgata", + "Malayan pit viper": "Pit viper", "Mamba": "Mamba", - "Black mamba": "Black mamba", - "Eastern green mamba": "Eastern green mamba", - "Western green mamba": "Western green mamba", "Mamushi": "Mamushi", - "Mangrove snake": "Mangrove snake", + "Manchurian Black Water Snake": "Elaphe schrenckii", + "Mandarin rat snake": "Mandarin rat snake", + "Mangrove snake (disambiguation)": "Mangrove snake", + "Many-banded krait": "Many-banded krait", + "Many-banded tree snake": "Many-banded tree snake", + "Many-spotted cat snake": "Boiga multomaculata", + "Massasauga rattlesnake": "Massasauga", + "Mexican black kingsnake": "Mexican black kingsnake", + "Mexican green rattlesnake": "Crotalus basiliscus", + "Mexican hognose snake": "Hognose", + "Mexican parrot snake": "Leptophis mexicanus", + "Mexican racer": "Coluber constrictor oaxaca", + "Mexican vine snake": "Oxybelis aeneus", + "Mexican west coast rattlesnake": "Crotalus basiliscus", + "Micropechis ikaheka": "Micropechis ikaheka", + "Midget faded rattlesnake": "Crotalus oreganus concolor", "Milk snake": "Milk snake", "Moccasin snake": "Agkistrodon piscivorus", + "Modest keelback": "Amphiesma modestum", + "Mojave desert sidewinder": "Crotalus cerastes", + "Mojave rattlesnake": "Crotalus scutulatus", + "Mole viper": "Atractaspidinae", + "Moluccan flying snake": "Chrysopelea", "Montpellier snake": "Malpolon monspessulanus", + "Mud adder": "Mud adder", "Mud snake": "Mud snake", - "Eastern mud snake": "Mud snake", - "Western mud snake": "Mud snake", "Mussurana": "Mussurana", - "Night snake": "Night snake", - "Cat-eyed night snake": "Banded cat-eyed snake", - "Texas night snake": "Hypsiglena jani", "Narrowhead Garter Snake": "Garter snake", - "Nose-horned viper": "Nose-horned viper", + "Nicobar Island keelback": "Amphiesma nicobariense", + "Nicobar cat snake": "Boiga wallachi", + "Night snake": "Night snake", + "Nilgiri keelback": "Nilgiri keelback", + "North eastern king snake": "Eastern hognose snake", + "Northeastern hill krait": "Northeastern hill krait", + "Northern black-tailed rattlesnake": "Crotalus molossus", + "Northern tree snake": "Dendrelaphis calligastra", + "Northern water snake": "Northern water snake", + "Northern white-lipped python": "Leiopython", + "Oaxacan small-headed rattlesnake": "Crotalus intermedius gloydi", + "Okinawan habu": "Okinawan habu", + "Olive sea snake": "Aipysurus laevis", + "Opheodrys": "Opheodrys", + "Orange-collared keelback": "Rhabdophis himalayanus", + "Ornate flying snake": "Chrysopelea ornata", + "Oxybelis": "Oxybelis", + "Palestine viper": "Vipera palaestinae", + "Paradise flying snake": "Chrysopelea paradisi", "Parrot snake": "Leptophis ahaetulla", - "Mexican parrot snake": "Leptophis mexicanus", "Patchnose snake": "Salvadora (snake)", + "Pelagic sea snake": "Yellow-bellied sea snake", + "Peninsula tiger snake": "Tiger snake", "Perrotet's shieldtail snake": "Plectrurus perrotetii", + "Persian rat snake": "Rat snake", "Pine snake": "Pine snake", - "Dwarf pipe snake": "Anomochilus", - "Red-tailed pipe snake": "List of snakes by common name", - "African rock python": "African rock python", - "Amethystine python": "Amethystine python", - "Angolan python": "Python anchietae", - "Australian scrub python": "Amethystine python", - "Ball python": "Ball python", - "Bismarck ringed python": "Bothrochilus", - "Black headed python": "Black-headed python", - "Blood python": "Python brongersmai", - "Boelen python": "Morelia boeleni", - "Borneo short-tailed python": "Borneo python", - "Bredl's python": "Morelia bredli", - "Brown water python": "Liasis fuscus", - "Burmese python": "Burmese python", - "Calabar python": "Calabar python", - "Western carpet python": "Morelia spilota", - "Centralian carpet python": "Morelia bredli", - "Coastal carpet python": "Morelia spilota mcdowelli", - "Inland carpet python": "Morelia spilota metcalfei", - "Jungle carpet python": "Morelia spilota cheynei", - "New Guinea carpet python": "Morelia spilota variegata", - "Northwestern carpet python": "Morelia spilota variegata", - "Southwestern carpet python": "Morelia spilota imbricata", - "Children's python": "Children's python", - "Dauan Island water python": "Liasis fuscus", - "Desert woma python": "Woma python", - "Diamond python": "Morelia spilota spilota", - "Flinders python": "List of snakes by common name", - "Green tree python": "Green tree python", - "Halmahera python": "Morelia tracyae", - "Indian python": "Python molurus", - "Indonesian water python": "Liasis mackloti", - "Macklot's python": "Liasis mackloti", - "Oenpelli python": "Oenpelli python", - "Olive python": "Liasis olivaceus", - "Papuan python": "Apodora", + "Pit viper": "Pit viper", + "Plains hognose snake": "Western hognose snake", + "Prairie kingsnake": "Lampropeltis calligaster", "Pygmy python": "Pygmy python", - "Red blood python": "Python brongersmai", - "Reticulated python": "Reticulated python", - "Kayaudi dwarf reticulated python": "Reticulated python", - "Selayer reticulated python": "Reticulated python", - "Rough-scaled python": "Rough-scaled python", - "Royal python": "Ball python", - "Savu python": "Liasis mackloti savuensis", - "Spotted python": "Spotted python", - "Stimson's python": "Stimson's python", - "Sumatran short-tailed python": "Python curtus", - "Tanimbar python": "Reticulated python", - "Timor python": "Monty Python", - "Wetar Island python": "Wetar", - "White-lipped python": "Leiopython", - "Brown white-lipped python": "Leiopython", - "Northern white-lipped python": "Leiopython", - "Southern white-lipped python": "Leiopython", - "Woma python": "Woma python", - "Western woma python": "Woma python", + "Pythonidae": "Pythonidae", "Queen snake": "Queen snake", - "Bimini racer": "List of snakes by common name", - "Buttermilk racer": "Coluber constrictor anthicus", - "Eastern racer": "Coluber constrictor", - "Eastern yellowbelly sad racer": "List of snakes by common name", - "Mexican racer": "Coluber constrictor oaxaca", - "Southern black racer": "Southern black racer", - "Tan racer": "Coluber constrictor etheridgei", - "West Indian racer": "Antiguan racer", - "Raddysnake": "List of snakes by common name", - "Southwestern blackhead snake": "Tantilla hobartsmithi", "Rat snake": "Rat snake", - "Baird's rat snake": "Pantherophis bairdi", - "Beauty rat snake": "Beauty rat snake", - "Great Plains rat snake": "Pantherophis emoryi", - "Green rat snake": "Rat snake", - "Japanese forest rat snake": "Euprepiophis conspicillatus", - "Japanese rat snake": "Japanese rat snake", - "King rat snake": "Rat snake", - "Mandarin rat snake": "Mandarin rat snake", - "Persian rat snake": "Rat snake", - "Twin-spotted rat snake": "Rat snake", - "Yellow-striped rat snake": "Rat snake", - "Manchurian Black Water Snake": "Elaphe schrenckii", - "Rattlesnake": "Rattlesnake", - "Arizona black rattlesnake": "Crotalus oreganus cerberus", - "Aruba rattlesnake": "Crotalus durissus unicolor", - "Coronado Island rattlesnake": "Coronado Islands", - "Durango rock rattlesnake": "Crotalus lepidus klauberi", - "Dusky pigmy rattlesnake": "Sistrurus miliarius barbouri", - "Eastern diamondback rattlesnake": "Eastern diamondback rattlesnake", - "Grand Canyon rattlesnake": "Crotalus oreganus abyssus", - "Hopi rattlesnake": "Crotalus viridis nuntius", - "Lance-headed rattlesnake": "Crotalus polystictus", - "Long-tailed rattlesnake": "Rattlesnake", - "Massasauga rattlesnake": "Massasauga", - "Mexican green rattlesnake": "Crotalus basiliscus", - "Mexican west coast rattlesnake": "Crotalus basiliscus", - "Midget faded rattlesnake": "Crotalus oreganus concolor", - "Mojave rattlesnake": "Crotalus scutulatus", - "Northern black-tailed rattlesnake": "Crotalus molossus", - "Oaxacan small-headed rattlesnake": "List of rattlesnake species and subspecies", "Rattler": "Rattlesnake", + "Rattlesnake": "Rattlesnake", + "Red-bellied black snake": "Red-bellied black snake", + "Red-headed krait": "Red-headed krait", + "Red-necked keelback": "Rhabdophis subminiatus", + "Red-tailed bamboo pitviper": "Trimeresurus erythrurus", + "Red-tailed boa": "Boa constrictor", + "Red-tailed pipe snake": "Cylindrophis ruffus", + "Red blood python": "Python brongersmai", "Red diamond rattlesnake": "Crotalus ruber", - "Southern Pacific rattlesnake": "Crotalus oreganus helleri", - "Southwestern speckled rattlesnake": "Crotalus mitchellii pyrrhus", - "Tancitaran dusky rattlesnake": "Crotalus pusillus", - "Tiger rattlesnake": "Crotalus tigris", - "Timber rattlesnake": "Timber rattlesnake", - "Tropical rattlesnake": "Crotalus durissus", - "Twin-spotted rattlesnake": "Crotalus pricei", - "Uracoan rattlesnake": "Crotalus durissus vegrandis", - "Western diamondback rattlesnake": "Western diamondback rattlesnake", + "Reticulated python": "Reticulated python", "Ribbon snake": "Ribbon snake", - "Rinkhals": "Rinkhals", - "River jack": "Bitis nasicornis", + "Ringed hognose snake": "Hognose", + "Rosy boa": "Rosy boa", + "Rough green snake": "Opheodrys aestivus", + "Rubber boa": "Rubber boa", + "Rufous beaked snake": "Rufous beaked snake", + "Russell's viper": "Russell's viper", + "San Francisco garter snake": "San Francisco garter snake", + "Sand boa": "Erycinae", + "Sand viper": "Sand viper", + "Saw-scaled viper": "Echis", + "Scarlet kingsnake": "Scarlet kingsnake", "Sea snake": "Hydrophiinae", - "Annulated sea snake": "Hydrophis cyanocinctus", - "Beaked sea snake": "Enhydrina schistosa", - "Dubois's sea snake": "Aipysurus duboisii", - "Hook Nosed Sea Snake": "Enhydrina schistosa", - "Olive sea snake": "Aipysurus laevis", - "Pelagic sea snake": "Yellow-bellied sea snake", - "Yellow-banded sea snake": "Yellow-bellied sea snake", - "Yellow-bellied sea snake": "Yellow-bellied sea snake", - "Yellow-lipped sea snake": "Yellow-lipped sea krait", + "Selayer reticulated python": "Reticulated python", + "Shield-nosed cobra": "Shield-nosed cobra", "Shield-tailed snake": "Uropeltidae", - "Colorado desert sidewinder": "Crotalus cerastes laterorepens", - "Mojave desert sidewinder": "Crotalus cerastes", - "Sonoran sidewinder": "Crotalus cerastes cercobombus", - "Small-eyed snake": "Micropechis ikaheka", - "Smooth snake": "Smooth snake", - "Brazilian smooth snake": "Hydrodynastes gigas", - "European smooth snake": "Smooth snake", - "Sonoran": "Sonoran Desert", + "Sikkim keelback": "Sikkim keelback", + "Sind krait": "Sind krait", + "Smooth green snake": "Smooth green snake", + "Snake": "Snake", + "South American hognose snake": "Hognose", + "South Andaman krait": "South Andaman krait", + "South eastern corn snake": "Corn snake", + "Southern Pacific rattlesnake": "Crotalus oreganus helleri", + "Southern black racer": "Southern black racer", + "Southern hognose snake": "Southern hognose snake", + "Southern white-lipped python": "Leiopython", + "Southwestern blackhead snake": "Tantilla hobartsmithi", + "Southwestern carpet python": "Morelia spilota imbricata", + "Southwestern speckled rattlesnake": "Crotalus mitchellii pyrrhus", + "Speckled hognose snake": "Hognose", + "Speckled kingsnake": "Lampropeltis getula holbrooki", + "Spectacled cobra": "Indian cobra", + "Sri Lanka cat snake": "Boiga ceylonensis", "Stiletto snake": "Atractaspidinae", + "Stimson's python": "Stimson's python", "Striped snake": "Japanese striped snake", - "Japanese striped snake": "Japanese striped snake", + "Sumatran short-tailed python": "Python curtus", "Sunbeam snake": "Xenopeltis", "Taipan": "Taipan", - "Central ranges taipan": "Oxyuranus temporalis", - "Coastal taipan": "Coastal taipan", - "Inland taipan": "Inland taipan", + "Tan racer": "Coluber constrictor etheridgei", + "Tancitaran dusky rattlesnake": "Crotalus pusillus", + "Tanimbar python": "Reticulated python", + "Tasmanian tiger snake": "Tiger snake", + "Tawny cat snake": "Boiga ochracea", + "Temple pit viper": "Pit viper", "Tentacled snake": "Erpeton tentaculatum", + "Texas Coral Snake": "Coral snake", + "Texas blind snake": "Leptotyphlops dulcis", + "Texas garter snake": "Texas garter snake", + "Texas lyre snake": "Trimorphodon biscutatus vilkinsonii", + "Texas night snake": "Hypsiglena jani", + "Thai cobra": "King cobra", + "Three-lined ground snake": "Atractus trilineatus", "Tic polonga": "Russell's viper", + "Tiger rattlesnake": "Crotalus tigris", "Tiger snake": "Tiger snake", - "Chappell Island tiger snake": "Tiger snake", - "Common tiger snake": "Tiger snake", - "Down's tiger snake": "Tiger snake", - "Eastern tiger snake": "Tiger snake", - "King Island tiger snake": "Tiger snake", - "Krefft's tiger snake": "Tiger snake", - "Peninsula tiger snake": "Tiger snake", - "Tasmanian tiger snake": "Tiger snake", - "Western tiger snake": "Tiger snake", "Tigre snake": "Spilotes pullatus", + "Timber rattlesnake": "Timber rattlesnake", "Tree snake": "Brown tree snake", - "Blanding's tree snake": "Toxicodryas blandingii", - "Blunt-headed tree snake": "Imantodes cenchoa", - "Brown tree snake": "Brown tree snake", - "Long-nosed tree snake": "List of snakes by common name", - "Many-banded tree snake": "Many-banded tree snake", - "Northern tree snake": "Dendrelaphis calligastra", + "Tri-color hognose snake": "Hognose", "Trinket snake": "Trinket snake", - "Black-banded trinket snake": "List of snakes by common name", + "Tropical rattlesnake": "Crotalus durissus", "Twig snake": "Twig snake", - "African twig snake": "Twig snake", - "Twin Headed King Snake": "Polycephaly", - "Titanboa": "Titanio", - "Urutu": "EE-11 Urutu", - "Asian Vine Snake, Whip Snake": "List of snakes by common name", - "American Vine Snake": "Oxybelis fulgidus", - "Mexican vine snake": "Oxybelis aeneus", - "Viper": "Viperidae", + "Twin-Barred tree snake": "Banded flying snake", + "Twin-spotted rat snake": "Rat snake", + "Twin-spotted rattlesnake": "Crotalus pricei", + "Uracoan rattlesnake": "Crotalus durissus vegrandis", + "Viperidae": "Viperidae", + "Wall's keelback": "Amphiesma xenura", + "Wart snake": "Acrochordidae", + "Water adder": "Agkistrodon piscivorus", + "Water moccasin": "Agkistrodon piscivorus", + "West Indian racer": "Antiguan racer", + "Western blind snake": "Leptotyphlops humilis", + "Western carpet python": "Morelia spilota", + "Western coral snake": "Coral snake", + "Western diamondback rattlesnake": "Western diamondback rattlesnake", + "Western green mamba": "Western green mamba", + "Western ground snake": "Western ground snake", + "Western hognose snake": "Western hognose snake", + "Western mud snake": "Mud snake", + "Western tiger snake": "Tiger snake", + "Western woma python": "Woma python", + "White-lipped keelback": "Amphiesma leucomystax", + "Wolf snake": "Lycodon capucinus", + "Woma python": "Woma python", + "Wutu": "Bothrops alternatus", + "Wynaad keelback": "Amphiesma monticola", + "Yellow-banded sea snake": "Yellow-bellied sea snake", + "Yellow-bellied sea snake": "Yellow-bellied sea snake", + "Yellow-lipped sea snake": "Yellow-lipped sea krait", + "Yellow-striped rat snake": "Rat snake", + "Yellow anaconda": "Yellow anaconda", + "Yellow cobra": "Cape cobra", + "Yunnan keelback": "Amphiesma parallelum", + "Abaco Island boa": "Epicrates exsul", + "Agkistrodon bilineatus": "Agkistrodon bilineatus", + "Amazon tree boa": "Corallus hortulanus", + "Andaman cobra": "Andaman cobra", + "Angolan python": "Python anchietae", + "Arabian cobra": "Arabian cobra", "Asp viper": "Vipera aspis", - "Bluntnose viper": "Macrovipera lebetina", - "Brazilian mud Viper": "List of snakes by common name", - "Burrowing viper": "Atractaspidinae", - "Bush viper": "Atheris", - "Great Lakes bush viper": "Atheris nitschei", - "Hairy bush viper": "Atheris hispida", - "Nitsche's bush viper": "Atheris nitschei", - "Rough-scaled bush viper": "Atheris hispida", - "Spiny bush viper": "Atheris hispida", - "Carpet viper": "Echis", - "Crossed viper": "Vipera berus", - "Cyclades blunt-nosed viper": "Macrovipera schweizeri", - "False horned viper": "Pseudocerastes", - "Fea's viper": "Azemiops", - "Fifty pacer": "Deinagkistrodon", - "Gaboon viper": "Gaboon viper", - "Hognosed viper": "List of snakes by common name", - "Horned desert viper": "Cerastes cerastes", - "Horned viper": "Horned viper", - "Jumping viper": "Atropoides", - "Kaznakov's viper": "Vipera kaznakovi", - "Leaf-nosed viper": "Eristicophis", - "Leaf viper": "Atheris squamigera", - "Levant viper": "Macrovipera lebetina", - "Long-nosed viper": "Vipera ammodytes", - "McMahon's viper": "Eristicophis", - "Mole viper": "Atractaspidinae", - "Palestine viper": "Vipera palaestinae", - "Pallas' viper": "Gloydius halys", - "Palm viper": "Bothriechis lateralis", - "Amazonian palm viper": "Bothriopsis bilineata", - "Black-speckled palm-pitviper": "Bothriechis nigroviridis", - "Eyelash palm-pitviper": "Bothriechis schlegelii", - "Green palm viper": "Bothriechis lateralis", - "Mexican palm-pitviper": "List of snakes by common name", - "Guatemalan palm viper": "Bothriechis aurifer", - "Honduran palm viper": "Bothriechis marchi", - "Siamese palm viper": "Trimeresurus puniceus", - "Side-striped palm-pitviper": "Bothriechis lateralis", - "Yellow-lined palm viper": "Bothriechis lateralis", - "Pit viper": "Pit viper", - "Banded pitviper": "Trimeresurus fasciatus", + "Ball Python": "Ball python", + "Ball python": "Ball python", "Bamboo pitviper": "Trimeresurus gramineus", + "Banded pitviper": "Trimeresurus fasciatus", + "Banded water cobra": "Naja annulata", "Barbour's pit viper": "Mixcoatlus barbouri", - "Black-tailed horned pit viper": "List of snakes by common name", + "Bismarck ringed python": "Bothrochilus", + "Black-speckled palm-pitviper": "Bothriechis nigroviridis", + "Bluntnose viper": "Macrovipera lebetina", "Bornean pitviper": "Trimeresurus borneensis", + "Borneo short-tailed python": "Borneo python", + "Bothrops jararacussu": "Bothrops jararacussu", + "Bredl's python": "Morelia bredli", "Brongersma's pitviper": "Trimeresurus brongersmai", "Brown spotted pitviper": "Trimeresurus mucrosquamatus", - "Cantor's pitviper": "Trimeresurus cantori", + "Brown water python": "Liasis fuscus", + "Burrowing cobra": "Egyptian cobra", + "Bush viper": "Atheris", + "Calabar python": "Calabar python", + "Caspian cobra": "Caspian cobra", + "Centralian carpet python": "Morelia bredli", + "Chinese tree viper": "Trimeresurus stejnegeri", + "Coastal carpet python": "Morelia spilota mcdowelli", + "Colorado desert sidewinder": "Crotalus cerastes laterorepens", + "Common lancehead": "Bothrops atrox", + "Cyclades blunt-nosed viper": "Macrovipera schweizeri", + "Dauan Island water python": "Liasis fuscus", + "De Schauensee's anaconda": "Eunectes deschauenseei", + "Dumeril's boa": "Acrantophis dumerili", + "Dusky pigmy rattlesnake": "Sistrurus miliarius barbouri", + "Dwarf sand adder": "Bitis peringueyi", + "Egyptian cobra": "Egyptian cobra", "Elegant pitviper": "Trimeresurus elegans", + "Emerald tree boa": "Emerald tree boa", + "Equatorial spitting cobra": "Equatorial spitting cobra", + "European asp": "Vipera aspis", + "Eyelash palm-pitviper": "Bothriechis schlegelii", "Eyelash pit viper": "Bothriechis schlegelii", + "Eyelash viper": "Bothriechis schlegelii", + "False horned viper": "Pseudocerastes", "Fan-Si-Pan horned pitviper": "Trimeresurus cornutus", + "Fea's viper": "Azemiops", + "Fifty pacer": "Deinagkistrodon", "Flat-nosed pitviper": "Trimeresurus puniceus", "Godman's pit viper": "Cerrophidion godmani", + "Great Lakes bush viper": "Atheris nitschei", + "Green palm viper": "Bothriechis lateralis", "Green tree pit viper": "Trimeresurus gramineus", - "Habu pit viper": "Habu", + "Guatemalan palm viper": "Bothriechis aurifer", + "Guatemalan tree viper": "Bothriechis bicolor", "Hagen's pitviper": "Trimeresurus hageni", + "Hairy bush viper": "Atheris hispida", + "Himehabu": "Ovophis okinavensis", + "Hogg Island boa": "Boa constrictor imperator", + "Honduran palm viper": "Bothriechis marchi", + "Horned desert viper": "Cerastes cerastes", "Horseshoe pitviper": "Trimeresurus strigatus", + "Hundred pacer": "Deinagkistrodon", + "Hutton's tree viper": "Tropidolaemus huttoni", + "Indian python": "Python molurus", + "Indian tree viper": "Trimeresurus gramineus", + "Indochinese spitting cobra": "Indochinese spitting cobra", + "Indonesian water python": "Liasis mackloti", + "Javan spitting cobra": "Javan spitting cobra", "Jerdon's pitviper": "Trimeresurus jerdonii", + "Jumping viper": "Atropoides", + "Jungle carpet python": "Morelia spilota cheynei", "Kanburian pit viper": "Trimeresurus kanburiensis", "Kaulback's lance-headed pitviper": "Trimeresurus kaulbacki", + "Kaznakov's viper": "Vipera kaznakovi", "Kham Plateau pitviper": "Protobothrops xiangchengensis", + "Lachesis (genus)": "Lachesis (genus)", "Large-eyed pitviper": "Trimeresurus macrops", + "Large-scaled tree viper": "Trimeresurus macrolepis", + "Leaf-nosed viper": "Eristicophis", + "Leaf viper": "Atheris squamigera", + "Levant viper": "Macrovipera lebetina", + "Long-nosed viper": "Vipera ammodytes", + "Macklot's python": "Liasis mackloti", + "Madagascar tree boa": "Sanzinia", "Malabar rock pitviper": "Trimeresurus malabaricus", - "Malayan pit viper": "Pit viper", + "Malcolm's tree viper": "Trimeresurus sumatranus malcolmi", + "Mandalay cobra": "Mandalay spitting cobra", "Mangrove pit viper": "Trimeresurus purpureomaculatus", "Mangshan pitviper": "Trimeresurus mangshanensis", + "McMahon's viper": "Eristicophis", + "Mexican palm-pitviper": "Bothriechis rowleyi", + "Monocled cobra": "Monocled cobra", "Motuo bamboo pitviper": "Trimeresurus medoensis", + "Mozambique spitting cobra": "Mozambique spitting cobra", + "Namaqua dwarf adder": "Bitis schneideri", + "Namib dwarf sand adder": "Bitis peringueyi", + "New Guinea carpet python": "Morelia spilota variegata", "Nicobar bamboo pitviper": "Trimeresurus labialis", + "Nitsche's bush viper": "Atheris nitschei", + "Nitsche's tree viper": "Atheris nitschei", + "Northwestern carpet python": "Morelia spilota variegata", + "Nubian spitting cobra": "Nubian spitting cobra", + "Oenpelli python": "Oenpelli python", + "Olive python": "Liasis olivaceus", + "Pallas' viper": "Gloydius halys", + "Palm viper": "Bothriechis lateralis", + "Papuan python": "Apodora", + "Peringuey's adder": "Bitis peringueyi", + "Philippine cobra": "Philippine cobra", "Philippine pitviper": "Trimeresurus flavomaculatus", - "Red-tailed bamboo pitviper": "List of snakes by common name", - "Schultze's pitviper": "Trimeresurus schultzei", - "Stejneger's bamboo pitviper": "Trimeresurus stejnegeri", - "Sri Lankan pit viper": "Trimeresurus trigonocephalus", - "Temple pit viper": "Pit viper", - "Tibetan bamboo pitviper": "Trimeresurus tibetanus", - "Tiger pit viper": "Trimeresurus kanburiensis", - "Undulated pit viper": "Ophryacus undulatus", - "Wagler's pit viper": "Tropidolaemus wagleri", - "Wirot's pit viper": "Trimeresurus puniceus", + "Pope's tree viper": "Trimeresurus popeorum", "Portuguese viper": "Vipera seoanei", + "Puerto Rican boa": "Puerto Rican boa", + "Rainbow boa": "Rainbow boa", + "Red spitting cobra": "Red spitting cobra", "Rhinoceros viper": "Bitis nasicornis", - "Russell's viper": "Russell's viper", - "Saw-scaled viper": "Echis", + "Rhombic night adder": "Causus maculatus", + "Rinkhals": "Rinkhals", + "Rinkhals cobra": "Rinkhals", + "River jack": "Bitis nasicornis", + "Rough-scaled bush viper": "Atheris hispida", + "Rough-scaled python": "Rough-scaled python", + "Rough-scaled tree viper": "Atheris hispida", + "Royal python": "Ball python", + "Rungwe tree viper": "Atheris nitschei rungweensis", + "Sakishima habu": "Trimeresurus elegans", + "Savu python": "Liasis mackloti savuensis", "Schlegel's viper": "Bothriechis schlegelii", + "Schultze's pitviper": "Trimeresurus schultzei", "Sedge viper": "Atheris nitschei", "Sharp-nosed viper": "Deinagkistrodon", + "Siamese palm viper": "Trimeresurus puniceus", + "Side-striped palm-pitviper": "Bothriechis lateralis", "Snorkel viper": "Deinagkistrodon", - "Temple viper": "Tropidolaemus wagleri", - "Chinese tree viper": "Trimeresurus stejnegeri", - "Guatemalan tree viper": "Bothriechis bicolor", - "Hutton's tree viper": "Tropidolaemus huttoni", - "Indian tree viper": "Trimeresurus gramineus", - "Large-scaled tree viper": "Trimeresurus macrolepis", - "Malcolm's tree viper": "Trimeresurus sumatranus malcolmi", - "Nitsche's tree viper": "Atheris nitschei", - "Pope's tree viper": "Trimeresurus popeorum", - "Rough-scaled tree viper": "Atheris hispida", - "Rungwe tree viper": "Atheris nitschei rungweensis", + "Snouted cobra": "Snouted cobra", + "Sonoran sidewinder": "Crotalus cerastes cercobombus", + "Southern Indonesian spitting cobra": "Javan spitting cobra", + "Southern Philippine cobra": "Samar cobra", + "Spiny bush viper": "Atheris hispida", + "Spitting cobra": "Spitting cobra", + "Spotted python": "Spotted python", + "Sri Lankan pit viper": "Trimeresurus trigonocephalus", + "Stejneger's bamboo pitviper": "Trimeresurus stejnegeri", + "Storm water cobra": "Naja annulata", "Sumatran tree viper": "Trimeresurus sumatranus", - "White-lipped tree viper": "Trimeresurus albolabris", + "Temple viper": "Tropidolaemus wagleri", + "Tibetan bamboo pitviper": "Trimeresurus tibetanus", + "Tiger pit viper": "Trimeresurus kanburiensis", + "Timor python": "Python timoriensis", + "Tokara habu": "Trimeresurus tokarensis", + "Tree boa": "Emerald tree boa", + "Undulated pit viper": "Ophryacus undulatus", "Ursini's viper": "Vipera ursinii", - "Wart snake": "Acrochordidae", - "Water moccasin": "Agkistrodon piscivorus", - "Bocourt's water snake": "Subsessor", - "Northern water snake": "Northern water snake", - "Long-nosed whip snake": "Ahaetulla nasuta", - "Wolf snake": "Lycodon capucinus", - "African wolf snake": "African golden wolf", - "Barred wolf snake": "Lycodon striatus", - "Common worm snake": "Indotyphlops braminus", - "Longnosed worm snake": "Leptotyphlops macrorhynchus", - "Wutu": "Bothrops alternatus", - "Yarara": "Bothrops jararaca" + "Wagler's pit viper": "Tropidolaemus wagleri", + "West African brown spitting cobra": "Mozambique spitting cobra", + "White-lipped tree viper": "Trimeresurus albolabris", + "Wirot's pit viper": "Trimeresurus puniceus", + "Yellow-lined palm viper": "Bothriechis lateralis", + "Zebra spitting cobra": "Naja nigricincta", + "Yarara": "Bothrops jararaca", + "Wetar Island python": "Liasis macklot", + "Urutus": "Bothrops alternatus", + "Titanboa": "Titanoboa" } From e10dfd969c5e28cd660815f6a2719b839e1f7a53 Mon Sep 17 00:00:00 2001 From: TildeBeta Date: Sun, 25 Mar 2018 15:32:36 +0300 Subject: [PATCH 05/38] Quick fixes --- bot/cogs/snakes.py | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/bot/cogs/snakes.py b/bot/cogs/snakes.py index 44de89dd..6ab8e201 100644 --- a/bot/cogs/snakes.py +++ b/bot/cogs/snakes.py @@ -98,19 +98,18 @@ async def get(self, ctx: Context, name: Snake = None): data = await self.get_snek(name) embed = discord.Embed(title=data['title'], url=data['fullurl'], colour=0x59982F) - print(data['extract']) fields = self.wiki_re.findall(data['extract']) - print(fields) - # TODO embeds can probably get way too big, only show one to three sentences from each section? for title, body in fields: + if not body.strip(): + continue value = textwrap.shorten(body.strip(), width=500) embed.add_field(name=title, value= value + '\n\u200b', inline=False) embed.set_footer(text='Powered by Wikipedia') # TODO thumbnail in embed - await ctx.send(name, embed=embed) + await ctx.send(embed=embed) async def on_command_error(self, ctx, error): # Temporary From 33df4d77c3cb2adb5555ddfd86208c10a1f5248d Mon Sep 17 00:00:00 2001 From: TildeBeta Date: Sun, 25 Mar 2018 15:38:05 +0300 Subject: [PATCH 06/38] Fix flake8 import order issue --- tox.ini | 1 + 1 file changed, 1 insertion(+) diff --git a/tox.ini b/tox.ini index c9de86ca..a178dd12 100644 --- a/tox.ini +++ b/tox.ini @@ -3,3 +3,4 @@ max-line-length=120 application_import_names=bot exclude=.venv ignore=B311,W503,E226 +import-order-style=pep8 From 38dadc28f8575517430f4c74850bc1a1400d8807 Mon Sep 17 00:00:00 2001 From: TildeBeta Date: Sun, 25 Mar 2018 15:41:05 +0300 Subject: [PATCH 07/38] Make import PEP8 after previous change --- bot/converters.py | 1 - run.py | 1 - 2 files changed, 2 deletions(-) diff --git a/bot/converters.py b/bot/converters.py index 3b37648c..f5f00bca 100644 --- a/bot/converters.py +++ b/bot/converters.py @@ -2,7 +2,6 @@ import random from discord.ext.commands import Converter - from fuzzywuzzy import fuzz from bot.utils import disambiguate diff --git a/run.py b/run.py index 2ec711fd..22edf4f2 100644 --- a/run.py +++ b/run.py @@ -2,7 +2,6 @@ import os from aiohttp import AsyncResolver, ClientSession, TCPConnector - from discord import Game from discord.ext.commands import AutoShardedBot, when_mentioned_or From 9dd9c2fb0cc1e5c63023032fe2a807cfd5939555 Mon Sep 17 00:00:00 2001 From: Eivind Teig Date: Sun, 25 Mar 2018 14:47:11 +0200 Subject: [PATCH 08/38] exception handeling, pageid->wiki_error & dict -> add error key --- bot/cogs/snakes.py | 21 +++++++++++++-------- 1 file changed, 13 insertions(+), 8 deletions(-) diff --git a/bot/cogs/snakes.py b/bot/cogs/snakes.py index 44de89dd..3c46e01c 100644 --- a/bot/cogs/snakes.py +++ b/bot/cogs/snakes.py @@ -63,8 +63,11 @@ async def get_snek(self, name: str = None) -> Dict[str, Any]: async with aiohttp.ClientSession() as session: response = await self.fetch(session, PAGE_ID_URL) j = json.loads(response) - # add exception handling - PAGEID = j["query"]["search"][0]["pageid"] + # wikipedia does have a error page + try: + PAGEID = j["query"]["search"][0]["pageid"] + except Keyerror: + PAGEID = 41118 PAGEIDS = f"pageids={PAGEID}" snake_page = f"{URL}{FORMAT}&{ACTION}&{PROP}&{EXLIMIT}&{EXPLAINTEXT}&{INPROP}&{PAGEIDS}" @@ -72,13 +75,15 @@ async def get_snek(self, name: str = None) -> Dict[str, Any]: async with aiohttp.ClientSession() as session: response = await self.fetch(session, snake_page) j = json.loads(response) - log.info(snake_page) # constructing dict - handle exceptions later - snake_info["title"] = j["query"]["pages"][f"{PAGEID}"]["title"] - snake_info["extract"] = j["query"]["pages"][f"{PAGEID}"]["extract"] - snake_info["images"] = j["query"]["pages"][f"{PAGEID}"]["images"] - snake_info["fullurl"] = j["query"]["pages"][f"{PAGEID}"]["fullurl"] - snake_info["pageid"] = j["query"]["pages"][f"{PAGEID}"]["pageid"] + try: + snake_info["title"] = j["query"]["pages"][f"{PAGEID}"]["title"] + snake_info["extract"] = j["query"]["pages"][f"{PAGEID}"]["extract"] + snake_info["images"] = j["query"]["pages"][f"{PAGEID}"]["images"] + snake_info["fullurl"] = j["query"]["pages"][f"{PAGEID}"]["fullurl"] + snake_info["pageid"] = j["query"]["pages"][f"{PAGEID}"]["pageid"] + except: + snake_info["error"] = True return snake_info @command() From 6be2ba0002582cf1d7a8f4157097aa516d23e0a3 Mon Sep 17 00:00:00 2001 From: Eivind Teig Date: Sun, 25 Mar 2018 15:01:12 +0200 Subject: [PATCH 09/38] changed to bot.http_session --- bot/cogs/snakes.py | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/bot/cogs/snakes.py b/bot/cogs/snakes.py index 93b39b2b..e28dea5a 100644 --- a/bot/cogs/snakes.py +++ b/bot/cogs/snakes.py @@ -26,9 +26,9 @@ class Snakes: def __init__(self, bot: AutoShardedBot): self.bot = bot - async def fetch(self, session, url): + async def fetch(self, url): async with async_timeout.timeout(10): - async with session.get(url) as response: + async with bot.http_session(url) as response: return await response.text() async def get_snek(self, name: str = None) -> Dict[str, Any]: @@ -60,8 +60,8 @@ async def get_snek(self, name: str = None) -> Dict[str, Any]: PAGE_ID_URL = f"{URL}{FORMAT}&{ACTION}&{LIST}&{SRSEARCH}{name}&{UTF8}&{SRLIMIT}" - async with aiohttp.ClientSession() as session: - response = await self.fetch(session, PAGE_ID_URL) + async with bot.http_session as session: + response = await self.fetch(PAGE_ID_URL) j = json.loads(response) # wikipedia does have a error page try: @@ -72,8 +72,8 @@ async def get_snek(self, name: str = None) -> Dict[str, Any]: snake_page = f"{URL}{FORMAT}&{ACTION}&{PROP}&{EXLIMIT}&{EXPLAINTEXT}&{INPROP}&{PAGEIDS}" - async with aiohttp.ClientSession() as session: - response = await self.fetch(session, snake_page) + async with bot.http_session as session: + response = await self.fetch(snake_page) j = json.loads(response) # constructing dict - handle exceptions later try: From a88e00e6268d998c936ee1a4119d57cd7ee60402 Mon Sep 17 00:00:00 2001 From: Eivind Teig Date: Sun, 25 Mar 2018 16:02:34 +0200 Subject: [PATCH 10/38] map_list and image_list -> full url support --- bot/cogs/snakes.py | 30 ++++++++++++++++++++++-------- 1 file changed, 22 insertions(+), 8 deletions(-) diff --git a/bot/cogs/snakes.py b/bot/cogs/snakes.py index e28dea5a..5cf45781 100644 --- a/bot/cogs/snakes.py +++ b/bot/cogs/snakes.py @@ -26,9 +26,9 @@ class Snakes: def __init__(self, bot: AutoShardedBot): self.bot = bot - async def fetch(self, url): + async def fetch(self, session, url): async with async_timeout.timeout(10): - async with bot.http_session(url) as response: + async with session.get(url) as response: return await response.text() async def get_snek(self, name: str = None) -> Dict[str, Any]: @@ -60,8 +60,8 @@ async def get_snek(self, name: str = None) -> Dict[str, Any]: PAGE_ID_URL = f"{URL}{FORMAT}&{ACTION}&{LIST}&{SRSEARCH}{name}&{UTF8}&{SRLIMIT}" - async with bot.http_session as session: - response = await self.fetch(PAGE_ID_URL) + async with aiohttp.ClientSession() as session: + response = await self.fetch(session, PAGE_ID_URL) j = json.loads(response) # wikipedia does have a error page try: @@ -72,8 +72,8 @@ async def get_snek(self, name: str = None) -> Dict[str, Any]: snake_page = f"{URL}{FORMAT}&{ACTION}&{PROP}&{EXLIMIT}&{EXPLAINTEXT}&{INPROP}&{PAGEIDS}" - async with bot.http_session as session: - response = await self.fetch(snake_page) + async with aiohttp.ClientSession() as session: + response = await self.fetch(session, snake_page) j = json.loads(response) # constructing dict - handle exceptions later try: @@ -84,6 +84,20 @@ async def get_snek(self, name: str = None) -> Dict[str, Any]: snake_info["pageid"] = j["query"]["pages"][f"{PAGEID}"]["pageid"] except: snake_info["error"] = True + if snake_info["images"]: + i_url = 'https://commons.wikimedia.org/wiki/Special:FilePath/' + image_list = [] + map_list = [] + for image in snake_info["images"]: + i = image["title"].split(':')[1] + if 'Map' not in i: + image_list.append(f"{i_url}{i}") + else: + map_list.append(f"{i_url}{i}") + snake_info["image_list"] = image_list + snake_info["map_list"] = map_list + log.info(image_list) + log.info(map_list) return snake_info @command() @@ -118,8 +132,8 @@ async def get(self, ctx: Context, name: Snake = None): async def on_command_error(self, ctx, error): # Temporary - if not isinstance(error, BadArgument): - return + # if not isinstance(error, BadArgument): + # return await ctx.send(str(error)) From 83a10195106cc4f00741db11d068328ce3d082b1 Mon Sep 17 00:00:00 2001 From: TildeBeta Date: Sun, 25 Mar 2018 17:06:05 +0300 Subject: [PATCH 11/38] Various fixes --- bot/cogs/snakes.py | 28 ++++++++++++++++++---------- bot/converters.py | 20 +++++++++++++++----- snakes.json | 1 - 3 files changed, 33 insertions(+), 16 deletions(-) diff --git a/bot/cogs/snakes.py b/bot/cogs/snakes.py index 5cf45781..26dc7dbb 100644 --- a/bot/cogs/snakes.py +++ b/bot/cogs/snakes.py @@ -8,7 +8,7 @@ import aiohttp import async_timeout import discord -from discord.ext.commands import AutoShardedBot, BadArgument, Context, command +from discord.ext.commands import AutoShardedBot, Context, command from bot.converters import Snake @@ -21,7 +21,8 @@ class Snakes: """ # I really hope this works - wiki_re = re.compile(r'== (.*?) ==(.*?\n\n)', flags=re.DOTALL) + wiki_sects = re.compile(r'(?:=+ (.*?) =+)(.*?\n\n)', flags=re.DOTALL) + wiki_brief = re.compile(r'(.*?)(=+ (.*?) =+)', flags=re.DOTALL) def __init__(self, bot: AutoShardedBot): self.bot = bot @@ -101,7 +102,7 @@ async def get_snek(self, name: str = None) -> Dict[str, Any]: return snake_info @command() - async def get(self, ctx: Context, name: Snake = None): + async def get(self, ctx: Context, *, name: Snake = None): """ Go online and fetch information about a snake @@ -115,15 +116,25 @@ async def get(self, ctx: Context, name: Snake = None): name = Snake.random() data = await self.get_snek(name) - embed = discord.Embed(title=data['title'], url=data['fullurl'], colour=0x59982F) - fields = self.wiki_re.findall(data['extract']) + match = self.wiki_brief.match(data['extract']) + embed = discord.Embed( + title=data['title'], + description=match.group(1) if match else None, + url=data['fullurl'], + colour=0x59982F + ) + + fields = self.wiki_sects.findall(data['extract']) + excluded = ('see also',) for title, body in fields: + if title.lower() in excluded: + continue if not body.strip(): continue - value = textwrap.shorten(body.strip(), width=500) - embed.add_field(name=title, value= value + '\n\u200b', inline=False) + value = textwrap.shorten(body.strip(), width=200) + embed.add_field(name=title, value=value + '\n\u200b', inline=False) embed.set_footer(text='Powered by Wikipedia') @@ -132,9 +143,6 @@ async def get(self, ctx: Context, name: Snake = None): async def on_command_error(self, ctx, error): # Temporary - # if not isinstance(error, BadArgument): - # return - await ctx.send(str(error)) # Any additional commands can be placed here. Be creative, but keep it to a reasonable amount! diff --git a/bot/converters.py b/bot/converters.py index f5f00bca..5fefc1c4 100644 --- a/bot/converters.py +++ b/bot/converters.py @@ -12,23 +12,33 @@ class Snake(Converter): snakes = json.load(f) async def convert(self, ctx, name): - if name.lower() == 'python': + print(name) + name = name.lower() + + if name == 'python': return 'Python (programming language)' def get_potential(iterable, *, threshold=80): nonlocal name + potential = [] - name = name.lower() for item in iterable: - a, b = fuzz.ratio(name, item.lower()), fuzz.partial_ratio(name, item.lower()) + original, item = item, item.lower() + + print(name, item) + if name == item: + return [original] + a, b = fuzz.ratio(name, item), fuzz.partial_ratio(name, item) if a >= threshold or b >= threshold: - yield item + potential.append(original) + + return potential all_names = self.snakes.keys() | self.snakes.values() timeout = len(all_names) * (3 / 4) - name = await disambiguate(ctx, list(get_potential(all_names)), timeout=timeout, colour=0x59982F) + name = await disambiguate(ctx, get_potential(all_names), timeout=timeout, colour=0x59982F) return self.snakes.get(name, name) @classmethod diff --git a/snakes.json b/snakes.json index 7ea7e9f7..8306ee8f 100644 --- a/snakes.json +++ b/snakes.json @@ -299,7 +299,6 @@ "Sikkim keelback": "Sikkim keelback", "Sind krait": "Sind krait", "Smooth green snake": "Smooth green snake", - "Snake": "Snake", "South American hognose snake": "Hognose", "South Andaman krait": "South Andaman krait", "South eastern corn snake": "Corn snake", From 128efbf4a0b51991d396b1e6b8d34ca29a350e78 Mon Sep 17 00:00:00 2001 From: Eivind Teig Date: Sun, 25 Mar 2018 16:14:30 +0200 Subject: [PATCH 12/38] edited code to pure json return instead of text --- bot/cogs/snakes.py | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/bot/cogs/snakes.py b/bot/cogs/snakes.py index 26dc7dbb..713a800d 100644 --- a/bot/cogs/snakes.py +++ b/bot/cogs/snakes.py @@ -30,7 +30,7 @@ def __init__(self, bot: AutoShardedBot): async def fetch(self, session, url): async with async_timeout.timeout(10): async with session.get(url) as response: - return await response.text() + return await response.json() async def get_snek(self, name: str = None) -> Dict[str, Any]: """ @@ -62,8 +62,7 @@ async def get_snek(self, name: str = None) -> Dict[str, Any]: PAGE_ID_URL = f"{URL}{FORMAT}&{ACTION}&{LIST}&{SRSEARCH}{name}&{UTF8}&{SRLIMIT}" async with aiohttp.ClientSession() as session: - response = await self.fetch(session, PAGE_ID_URL) - j = json.loads(response) + j = await self.fetch(session, PAGE_ID_URL) # wikipedia does have a error page try: PAGEID = j["query"]["search"][0]["pageid"] @@ -74,8 +73,7 @@ async def get_snek(self, name: str = None) -> Dict[str, Any]: snake_page = f"{URL}{FORMAT}&{ACTION}&{PROP}&{EXLIMIT}&{EXPLAINTEXT}&{INPROP}&{PAGEIDS}" async with aiohttp.ClientSession() as session: - response = await self.fetch(session, snake_page) - j = json.loads(response) + j = await self.fetch(session, snake_page) # constructing dict - handle exceptions later try: snake_info["title"] = j["query"]["pages"][f"{PAGEID}"]["title"] From 01529d47867266c3c578a814a26c1670a11fce82 Mon Sep 17 00:00:00 2001 From: TildeBeta Date: Sun, 25 Mar 2018 17:21:59 +0300 Subject: [PATCH 13/38] Turns out this broke the custom invoking --- bot/cogs/snakes.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bot/cogs/snakes.py b/bot/cogs/snakes.py index 713a800d..ebf095cc 100644 --- a/bot/cogs/snakes.py +++ b/bot/cogs/snakes.py @@ -100,7 +100,7 @@ async def get_snek(self, name: str = None) -> Dict[str, Any]: return snake_info @command() - async def get(self, ctx: Context, *, name: Snake = None): + async def get(self, ctx: Context, name: Snake = None): """ Go online and fetch information about a snake From 280bfa975695cfbb7fed6821bd6ac967c52253d0 Mon Sep 17 00:00:00 2001 From: TildeBeta Date: Sun, 25 Mar 2018 17:32:29 +0300 Subject: [PATCH 14/38] Oops --- bot/converters.py | 1 - 1 file changed, 1 deletion(-) diff --git a/bot/converters.py b/bot/converters.py index 5fefc1c4..0c99cb1d 100644 --- a/bot/converters.py +++ b/bot/converters.py @@ -25,7 +25,6 @@ def get_potential(iterable, *, threshold=80): for item in iterable: original, item = item, item.lower() - print(name, item) if name == item: return [original] From 316b55c79a114eecbd61c2d2e0ba79563b7c1287 Mon Sep 17 00:00:00 2001 From: Eivind Teig Date: Sun, 25 Mar 2018 17:31:22 +0200 Subject: [PATCH 15/38] replaced spacees with %20 in snake image URL --- bot/cogs/snakes.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bot/cogs/snakes.py b/bot/cogs/snakes.py index ebf095cc..390faa3b 100644 --- a/bot/cogs/snakes.py +++ b/bot/cogs/snakes.py @@ -88,7 +88,7 @@ async def get_snek(self, name: str = None) -> Dict[str, Any]: image_list = [] map_list = [] for image in snake_info["images"]: - i = image["title"].split(':')[1] + i = image["title"].split(':')[1].replace(" ", "%20") if 'Map' not in i: image_list.append(f"{i_url}{i}") else: From 20c555af56d2632261ae3dd54c8d0bee4f823d33 Mon Sep 17 00:00:00 2001 From: Eivind Teig Date: Sun, 25 Mar 2018 17:40:37 +0200 Subject: [PATCH 16/38] added thumbnail list to snake dict with 100px width --- bot/cogs/snakes.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/bot/cogs/snakes.py b/bot/cogs/snakes.py index 390faa3b..10a1d336 100644 --- a/bot/cogs/snakes.py +++ b/bot/cogs/snakes.py @@ -87,14 +87,17 @@ async def get_snek(self, name: str = None) -> Dict[str, Any]: i_url = 'https://commons.wikimedia.org/wiki/Special:FilePath/' image_list = [] map_list = [] + thumb_list = [] for image in snake_info["images"]: i = image["title"].split(':')[1].replace(" ", "%20") - if 'Map' not in i: + if not i.startswith('Map'): image_list.append(f"{i_url}{i}") + thumb_list.append(f"{i_url}{i}?width=100") else: map_list.append(f"{i_url}{i}") snake_info["image_list"] = image_list snake_info["map_list"] = map_list + snake_info["thumb_list"] = thumb_list log.info(image_list) log.info(map_list) return snake_info From f9cf7497da49e2243f7a1f8550480da5395dc6b9 Mon Sep 17 00:00:00 2001 From: TildeBeta Date: Sun, 25 Mar 2018 18:50:22 +0300 Subject: [PATCH 17/38] Embed thumbnail --- bot/cogs/snakes.py | 16 ++++++++++++---- bot/converters.py | 1 - 2 files changed, 12 insertions(+), 5 deletions(-) diff --git a/bot/cogs/snakes.py b/bot/cogs/snakes.py index 10a1d336..0fc304a3 100644 --- a/bot/cogs/snakes.py +++ b/bot/cogs/snakes.py @@ -8,7 +8,7 @@ import aiohttp import async_timeout import discord -from discord.ext.commands import AutoShardedBot, Context, command +from discord.ext.commands import AutoShardedBot, Context, command, bot_has_permissions from bot.converters import Snake @@ -103,6 +103,7 @@ async def get_snek(self, name: str = None) -> Dict[str, Any]: return snake_info @command() + @bot_has_permissions(manage_messages=True) async def get(self, ctx: Context, name: Snake = None): """ Go online and fetch information about a snake @@ -127,19 +128,26 @@ async def get(self, ctx: Context, name: Snake = None): ) fields = self.wiki_sects.findall(data['extract']) - excluded = ('see also',) + excluded = ('see also', 'further reading', 'subspecies') for title, body in fields: if title.lower() in excluded: continue if not body.strip(): continue + # Only takes the first sentence + title, dot, _ = title.partition('.') + # There's probably a better way to do this value = textwrap.shorten(body.strip(), width=200) - embed.add_field(name=title, value=value + '\n\u200b', inline=False) + embed.add_field(name=title + dot, value=value + '\n\u200b', inline=False) embed.set_footer(text='Powered by Wikipedia') - # TODO thumbnail in embed + valid = ('gif', 'png', 'jpeg', 'jpg', 'webp') + emoji = 'https://emojipedia-us.s3.amazonaws.com/thumbs/60/google/3/snake_1f40d.png' + image = next((url for url in data['image_list'] if url.endswith(valid)), emoji) + embed.set_thumbnail(url=image) + await ctx.send(embed=embed) async def on_command_error(self, ctx, error): diff --git a/bot/converters.py b/bot/converters.py index 0c99cb1d..ac5a0d31 100644 --- a/bot/converters.py +++ b/bot/converters.py @@ -12,7 +12,6 @@ class Snake(Converter): snakes = json.load(f) async def convert(self, ctx, name): - print(name) name = name.lower() if name == 'python': From 525adc0a75289929aa1650e3f39536eb76e380c7 Mon Sep 17 00:00:00 2001 From: TildeBeta Date: Sun, 25 Mar 2018 18:55:03 +0300 Subject: [PATCH 18/38] Quick fixes --- bot/cogs/snakes.py | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/bot/cogs/snakes.py b/bot/cogs/snakes.py index 0fc304a3..4ae49f0d 100644 --- a/bot/cogs/snakes.py +++ b/bot/cogs/snakes.py @@ -1,5 +1,4 @@ # coding=utf-8 -import json import logging import re import textwrap @@ -66,7 +65,7 @@ async def get_snek(self, name: str = None) -> Dict[str, Any]: # wikipedia does have a error page try: PAGEID = j["query"]["search"][0]["pageid"] - except Keyerror: + except KeyError: PAGEID = 41118 PAGEIDS = f"pageids={PAGEID}" @@ -81,7 +80,7 @@ async def get_snek(self, name: str = None) -> Dict[str, Any]: snake_info["images"] = j["query"]["pages"][f"{PAGEID}"]["images"] snake_info["fullurl"] = j["query"]["pages"][f"{PAGEID}"]["fullurl"] snake_info["pageid"] = j["query"]["pages"][f"{PAGEID}"]["pageid"] - except: + except KeyError: snake_info["error"] = True if snake_info["images"]: i_url = 'https://commons.wikimedia.org/wiki/Special:FilePath/' From f84489385b0bb238d0fecd2bc39bc91622d0bd1d Mon Sep 17 00:00:00 2001 From: TildeBeta Date: Sun, 25 Mar 2018 19:26:38 +0300 Subject: [PATCH 19/38] New secret command --- Pipfile | 1 + Pipfile.lock | 15 +++++++++++---- bot/cogs/snakes.py | 31 +++++++++++++++++++++++++------ zen.mp3 | Bin 0 -> 332322 bytes 4 files changed, 37 insertions(+), 10 deletions(-) create mode 100644 zen.mp3 diff --git a/Pipfile b/Pipfile index dadfcac7..c3b940f5 100644 --- a/Pipfile +++ b/Pipfile @@ -10,6 +10,7 @@ aiohttp = "<2.3.0,>=2.0.0" websockets = ">=4.0,<5.0" fuzzywuzzy = "*" python-levenshtein = "*" +"discord.py" = {git = "https://github.com/Rapptz/discord.py", ref = "rewrite", extras = ["voice"]} [dev-packages] "flake8" = "*" diff --git a/Pipfile.lock b/Pipfile.lock index 52f937f0..7542a142 100644 --- a/Pipfile.lock +++ b/Pipfile.lock @@ -1,7 +1,7 @@ { "_meta": { "hash": { - "sha256": "97cdb19ecbfa6c1537186dff53c41fb23bd61538e796d0e184d5b31ddae9f864" + "sha256": "ac057fc426bc367b4b56fca1b642a5927dd80389f86005108821769a61fd8850" }, "pipfile-spec": 6, "requires": { @@ -60,6 +60,13 @@ ], "version": "==3.0.4" }, + "discord.py": { + "extras": [ + "voice" + ], + "git": "https://github.com/Rapptz/discord.py", + "ref": "rewrite" + }, "fuzzywuzzy": { "hashes": [ "sha256:d40c22d2744dff84885b30bbfc07fab7875f641d070374331777a4d1808b8d4e", @@ -297,10 +304,10 @@ }, "gitpython": { "hashes": [ - "sha256:ad61bc25deadb535b047684d06f3654c001d9415e1971e51c9c20f5b510076e9", - "sha256:b8367c432de995dc330b5b146c5bfdc0926b8496e100fda6692134e00c0dcdc5" + "sha256:05069e26177c650b3cb945dd543a7ef7ca449f8db5b73038b465105673c1ef61", + "sha256:c47cc31af6e88979c57a33962cbc30a7c25508d74a1b3a19ec5aa7ed64b03129" ], - "version": "==2.1.8" + "version": "==2.1.9" }, "idna": { "hashes": [ diff --git a/bot/cogs/snakes.py b/bot/cogs/snakes.py index 4ae49f0d..a00af5fa 100644 --- a/bot/cogs/snakes.py +++ b/bot/cogs/snakes.py @@ -1,4 +1,5 @@ # coding=utf-8 +import asyncio import logging import re import textwrap @@ -105,10 +106,7 @@ async def get_snek(self, name: str = None) -> Dict[str, Any]: @bot_has_permissions(manage_messages=True) async def get(self, ctx: Context, name: Snake = None): """ - Go online and fetch information about a snake - - This should make use of your `get_snek` method, using it to get information about a snake. This information - should be sent back to Discord in an embed. + Fetches information about a snake from Wikipedia. :param ctx: Context object passed from discord.py :param name: Optional, the name of the snake to get information for - omit for a random snake @@ -149,12 +147,33 @@ async def get(self, ctx: Context, name: Snake = None): await ctx.send(embed=embed) + @command(hidden=True) + async def zen(self, ctx): + """ + >>> import this + + Long time Pythoneer Tim Peters succinctly channels the BDFL's guiding principles + for Python's design into 20 aphorisms, only 19 of which have been written down. + """ + channel = ctx.author.voice.channel + if channel is None: + return + + state = ctx.guild.voice_client + if state is not None: + # Already playing + return + + voice = await channel.connect() + source = discord.FFmpegPCMAudio('zen.mp3') + voice.play(source, after=lambda *args: asyncio.run_coroutine_threadsafe( + voice.disconnect(), loop=ctx.bot.loop + )) + async def on_command_error(self, ctx, error): # Temporary await ctx.send(str(error)) - # Any additional commands can be placed here. Be creative, but keep it to a reasonable amount! - def setup(bot): bot.add_cog(Snakes(bot)) diff --git a/zen.mp3 b/zen.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..4c10f6911c7685e6a3eaa424d2e3ec036c1cdee2 GIT binary patch literal 332322 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ིR8^mKqjXN4e7|3AXod327~;nnNq!}t1L~% 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 J`JY?Z{y$C~-opR@ literal 0 HcmV?d00001 From a143ae331cab7cd68012579a852d7ce125e4350a Mon Sep 17 00:00:00 2001 From: TildeBeta Date: Sun, 25 Mar 2018 19:29:13 +0300 Subject: [PATCH 20/38] Remove test file --- testfile.py | 1 - 1 file changed, 1 deletion(-) delete mode 100644 testfile.py diff --git a/testfile.py b/testfile.py deleted file mode 100644 index 0abb0dd2..00000000 --- a/testfile.py +++ /dev/null @@ -1 +0,0 @@ -# just for testing some GitHub integration in my editor From 5e7ed882aa448dedf8b6d9895ce99b5dc428b3b6 Mon Sep 17 00:00:00 2001 From: TildeBeta Date: Sun, 25 Mar 2018 19:36:35 +0300 Subject: [PATCH 21/38] Better safe than sorry --- bot/cogs/snakes.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/bot/cogs/snakes.py b/bot/cogs/snakes.py index a00af5fa..2870fbd7 100644 --- a/bot/cogs/snakes.py +++ b/bot/cogs/snakes.py @@ -116,6 +116,9 @@ async def get(self, ctx: Context, name: Snake = None): data = await self.get_snek(name) + if data.get('error'): + return await ctx.send('Could not fetch data from Wikipedia.') + match = self.wiki_brief.match(data['extract']) embed = discord.Embed( title=data['title'], From 676f1ec44a9febd2725dc8fe3c487bfd17151011 Mon Sep 17 00:00:00 2001 From: TildeBeta Date: Sun, 25 Mar 2018 19:38:09 +0300 Subject: [PATCH 22/38] Reuse ClientSession --- bot/cogs/snakes.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/bot/cogs/snakes.py b/bot/cogs/snakes.py index 2870fbd7..1878d4e8 100644 --- a/bot/cogs/snakes.py +++ b/bot/cogs/snakes.py @@ -70,9 +70,8 @@ async def get_snek(self, name: str = None) -> Dict[str, Any]: PAGEID = 41118 PAGEIDS = f"pageids={PAGEID}" - snake_page = f"{URL}{FORMAT}&{ACTION}&{PROP}&{EXLIMIT}&{EXPLAINTEXT}&{INPROP}&{PAGEIDS}" + snake_page = f"{URL}{FORMAT}&{ACTION}&{PROP}&{EXLIMIT}&{EXPLAINTEXT}&{INPROP}&{PAGEIDS}" - async with aiohttp.ClientSession() as session: j = await self.fetch(session, snake_page) # constructing dict - handle exceptions later try: From f2e5d696f9d7607ddac75e82125c20d97be4578b Mon Sep 17 00:00:00 2001 From: TildeBeta Date: Sun, 25 Mar 2018 19:43:12 +0300 Subject: [PATCH 23/38] Add clarification --- bot/cogs/snakes.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/bot/cogs/snakes.py b/bot/cogs/snakes.py index 1878d4e8..081033bf 100644 --- a/bot/cogs/snakes.py +++ b/bot/cogs/snakes.py @@ -156,6 +156,8 @@ async def zen(self, ctx): Long time Pythoneer Tim Peters succinctly channels the BDFL's guiding principles for Python's design into 20 aphorisms, only 19 of which have been written down. + + You must be connected to a voice channel in order to use this command. """ channel = ctx.author.voice.channel if channel is None: From 92bc40a4ea12d32cf09d933ef46c91c77352ed7b Mon Sep 17 00:00:00 2001 From: TildeBeta Date: Sun, 25 Mar 2018 20:45:42 +0300 Subject: [PATCH 24/38] New command and disambiguate changes --- bot/cogs/snakes.py | 37 ++++++++++++++++++++++++++++++------- bot/converters.py | 6 +++++- bot/utils.py | 11 +++++------ 3 files changed, 40 insertions(+), 14 deletions(-) diff --git a/bot/cogs/snakes.py b/bot/cogs/snakes.py index 081033bf..f3081b78 100644 --- a/bot/cogs/snakes.py +++ b/bot/cogs/snakes.py @@ -1,6 +1,7 @@ # coding=utf-8 import asyncio import logging +import random import re import textwrap from typing import Any, Dict @@ -11,6 +12,7 @@ from discord.ext.commands import AutoShardedBot, Context, command, bot_has_permissions from bot.converters import Snake +from bot.utils import disambiguate log = logging.getLogger(__name__) @@ -24,6 +26,8 @@ class Snakes: wiki_sects = re.compile(r'(?:=+ (.*?) =+)(.*?\n\n)', flags=re.DOTALL) wiki_brief = re.compile(r'(.*?)(=+ (.*?) =+)', flags=re.DOTALL) + valid = ('gif', 'png', 'jpeg', 'jpg', 'webp') + def __init__(self, bot: AutoShardedBot): self.bot = bot @@ -32,7 +36,7 @@ async def fetch(self, session, url): async with session.get(url) as response: return await response.json() - async def get_snek(self, name: str = None) -> Dict[str, Any]: + async def get_snek(self, name: str) -> Dict[str, Any]: """ Go online and fetch information about a snake @@ -42,7 +46,7 @@ async def get_snek(self, name: str = None) -> Dict[str, Any]: If "python" is given as the snake name, you should return information about the programming language, but with all the information you'd provide for a real snake. Try to have some fun with this! - :param name: Optional, the name of the snake to get information for - omit for a random snake + :param name: The name of the snake to get information for - omit for a random snake :return: A dict containing information on a snake """ snake_info = {} @@ -142,9 +146,8 @@ async def get(self, ctx: Context, name: Snake = None): embed.set_footer(text='Powered by Wikipedia') - valid = ('gif', 'png', 'jpeg', 'jpg', 'webp') emoji = 'https://emojipedia-us.s3.amazonaws.com/thumbs/60/google/3/snake_1f40d.png' - image = next((url for url in data['image_list'] if url.endswith(valid)), emoji) + image = next((url for url in data['image_list'] if url.endswith(self.valid)), emoji) embed.set_thumbnail(url=image) await ctx.send(embed=embed) @@ -174,9 +177,29 @@ async def zen(self, ctx): voice.disconnect(), loop=ctx.bot.loop )) - async def on_command_error(self, ctx, error): - # Temporary - await ctx.send(str(error)) + @command(aliases=['identify']) + async def guess(self, ctx): + image = None + + while image is None: + snakes = [Snake.random() for _ in range(5)] + answer = random.choice(snakes) + + data = await self.get_snek(answer) + + image = next((url for url in data['image_list'] if url.endswith(self.valid)), None) + + embed = discord.Embed( + title='Which of the following is the snake in the image?', + colour=random.randint(1, 0xFFFFFF) + ) + embed.set_image(url=image) + + guess = await disambiguate(ctx, snakes, timeout=60, embed=embed) + + if guess == answer: + return await ctx.send('You guessed correctly!') + await ctx.send(f'You guessed wrong. The correct answer was {answer}.') def setup(bot): diff --git a/bot/converters.py b/bot/converters.py index ac5a0d31..48a02254 100644 --- a/bot/converters.py +++ b/bot/converters.py @@ -1,6 +1,7 @@ import json import random +import discord from discord.ext.commands import Converter from fuzzywuzzy import fuzz @@ -36,7 +37,10 @@ def get_potential(iterable, *, threshold=80): all_names = self.snakes.keys() | self.snakes.values() timeout = len(all_names) * (3 / 4) - name = await disambiguate(ctx, get_potential(all_names), timeout=timeout, colour=0x59982F) + embed = discord.Embed(title='Found multiple choices. Please choose the correct one.', colour=0x59982F) + embed.set_author(name=ctx.author.display_name, icon_url=ctx.author.avatar_url) + + name = await disambiguate(ctx, get_potential(all_names), timeout=timeout, embed=embed) return self.snakes.get(name, name) @classmethod diff --git a/bot/utils.py b/bot/utils.py index 83650d05..320a7557 100644 --- a/bot/utils.py +++ b/bot/utils.py @@ -9,8 +9,7 @@ async def disambiguate(ctx: Context, entries: List[str], - *, timeout: float = 30, per_page: int = 20, empty: bool = False, - colour: Union[discord.Colour, int] = 0x000000): + *, timeout: float = 30, per_page: int = 20, empty: bool = False, embed: discord.Embed = None): """ Has the user choose between multiple entries in case one could not be chosen automatically. @@ -19,7 +18,7 @@ async def disambiguate(ctx: Context, entries: List[str], :param timeout: Number of seconds to wait before canceling disambiguation :param per_page: Entries per embed page :param empty: Whether the paginator should have an extra line between items - :param colour: The colour for the embed + :param embed: The embed that the paginator will use. :return: Users choice for correct entry. """ if len(entries) == 0: @@ -36,12 +35,12 @@ def check(message): message.channel == ctx.channel) try: - embed = discord.Embed(title='Found multiple choices. Please choose the correct one.', colour=colour) - embed.set_author(name=ctx.author.display_name, icon_url=ctx.author.avatar_url) + if embed is None: + embed = discord.Embed() coro1 = ctx.bot.wait_for('message', check=check, timeout=timeout) coro2 = LinePaginator.paginate(choices, ctx, embed=embed, max_lines=per_page, - empty=empty, max_size=1500, timeout=9000) + empty=empty, max_size=6000, timeout=9000) # wait_for timeout will go to except instead of the wait_for thing as I expected futures = [asyncio.ensure_future(coro1), asyncio.ensure_future(coro2)] From 9373d79bac9dc19129d3fd94e3ccfb7e26c63ddd Mon Sep 17 00:00:00 2001 From: TildeBeta Date: Sun, 25 Mar 2018 21:28:47 +0300 Subject: [PATCH 25/38] Docstring for new command --- bot/cogs/snakes.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/bot/cogs/snakes.py b/bot/cogs/snakes.py index f3081b78..6ae10cf4 100644 --- a/bot/cogs/snakes.py +++ b/bot/cogs/snakes.py @@ -179,6 +179,9 @@ async def zen(self, ctx): @command(aliases=['identify']) async def guess(self, ctx): + """ + Snake identifying game! + """ image = None while image is None: From 69ab7902b3f9c4af2f5acc1c4b2608514893e88d Mon Sep 17 00:00:00 2001 From: Eivind Teig Date: Sun, 25 Mar 2018 20:55:37 +0200 Subject: [PATCH 26/38] banned images from guess --- bot/cogs/snakes.py | 25 +++++++++++++++++++++---- 1 file changed, 21 insertions(+), 4 deletions(-) diff --git a/bot/cogs/snakes.py b/bot/cogs/snakes.py index f3081b78..c4577846 100644 --- a/bot/cogs/snakes.py +++ b/bot/cogs/snakes.py @@ -91,18 +91,35 @@ async def get_snek(self, name: str) -> Dict[str, Any]: image_list = [] map_list = [] thumb_list = [] + banned = ['Commons-logo.svg', + 'Red%20Pencil%20Icon.png', + 'distribution', + 'The%20Death%20of%20Cleopatra%20arthur.jpg', + 'Head%20of%20holotype', + 'locator', + 'Woma.png', + '-map.', + '.svg' + ] for image in snake_info["images"]: i = image["title"].split(':')[1].replace(" ", "%20") if not i.startswith('Map'): - image_list.append(f"{i_url}{i}") - thumb_list.append(f"{i_url}{i}?width=100") + for b in banned: + image_banned = False + if b in i: + image_banned = True + break + if image_banned: + log.info("the image is banned") + else: + log.info("the image is clean: ", i) + image_list.append(f"{i_url}{i}") + thumb_list.append(f"{i_url}{i}?width=100") else: map_list.append(f"{i_url}{i}") snake_info["image_list"] = image_list snake_info["map_list"] = map_list snake_info["thumb_list"] = thumb_list - log.info(image_list) - log.info(map_list) return snake_info @command() From bfdc89c130292d2a42c5b8910b1eef7b5a3872dc Mon Sep 17 00:00:00 2001 From: Eivind Teig Date: Sun, 25 Mar 2018 21:06:49 +0200 Subject: [PATCH 27/38] more banned images --- bot/cogs/snakes.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/bot/cogs/snakes.py b/bot/cogs/snakes.py index b29e2519..e1602e7e 100644 --- a/bot/cogs/snakes.py +++ b/bot/cogs/snakes.py @@ -99,7 +99,9 @@ async def get_snek(self, name: str) -> Dict[str, Any]: 'locator', 'Woma.png', '-map.', - '.svg' + '.svg', + 'ange.', + 'Adder%20(PSF).png' ] for image in snake_info["images"]: i = image["title"].split(':')[1].replace(" ", "%20") From 98b8ba756243c5efa1aa15984352c4f1641b7e74 Mon Sep 17 00:00:00 2001 From: Eivind Teig Date: Sun, 25 Mar 2018 21:17:44 +0200 Subject: [PATCH 28/38] flake8 error in import statement, commented out --- bot/utils.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bot/utils.py b/bot/utils.py index 320a7557..e802d5f1 100644 --- a/bot/utils.py +++ b/bot/utils.py @@ -1,6 +1,6 @@ # coding=utf-8 import asyncio -from typing import List, Union +from typing import List # removed Union due to flake8 error import discord from discord.ext.commands import BadArgument, Context From f741a2b9cee45fdf0aa6e32aa59596c6d2aa830c Mon Sep 17 00:00:00 2001 From: Eivind Teig Date: Sun, 25 Mar 2018 21:35:24 +0200 Subject: [PATCH 29/38] forcing travis rebuild --- bot/utils.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/bot/utils.py b/bot/utils.py index e802d5f1..0022d026 100644 --- a/bot/utils.py +++ b/bot/utils.py @@ -1,7 +1,6 @@ # coding=utf-8 import asyncio -from typing import List # removed Union due to flake8 error - +from typing import List import discord from discord.ext.commands import BadArgument, Context From a52208a97ebf010c6736156ad1050b253154c37d Mon Sep 17 00:00:00 2001 From: Eivind Teig Date: Sun, 25 Mar 2018 21:39:18 +0200 Subject: [PATCH 30/38] newline error flake8 fixed --- bot/utils.py | 1 + 1 file changed, 1 insertion(+) diff --git a/bot/utils.py b/bot/utils.py index 0022d026..91d57bf8 100644 --- a/bot/utils.py +++ b/bot/utils.py @@ -1,6 +1,7 @@ # coding=utf-8 import asyncio from typing import List + import discord from discord.ext.commands import BadArgument, Context From 3e7f499a801930a27ec7ef9005fa7aff00a0a045 Mon Sep 17 00:00:00 2001 From: Eivind Teig Date: Sun, 25 Mar 2018 21:59:08 +0200 Subject: [PATCH 31/38] commands changed to bot.snakes.COMMAND (from bot.COMMAND) --- bot/cogs/snakes.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/bot/cogs/snakes.py b/bot/cogs/snakes.py index e1602e7e..79c82ba0 100644 --- a/bot/cogs/snakes.py +++ b/bot/cogs/snakes.py @@ -124,7 +124,7 @@ async def get_snek(self, name: str) -> Dict[str, Any]: snake_info["thumb_list"] = thumb_list return snake_info - @command() + @command(name="snakes.get()", aliases=["snakes.get"]) @bot_has_permissions(manage_messages=True) async def get(self, ctx: Context, name: Snake = None): """ @@ -196,7 +196,7 @@ async def zen(self, ctx): voice.disconnect(), loop=ctx.bot.loop )) - @command(aliases=['identify']) + @command(name="snakes.guess()", aliases=["snakes.guess", "identify"]) async def guess(self, ctx): """ Snake identifying game! From cc8624a2586a010a87485c0b8ef8a8187a3eb20e Mon Sep 17 00:00:00 2001 From: Eivind Teig Date: Sun, 25 Mar 2018 23:12:47 +0200 Subject: [PATCH 32/38] README info --- README.md | 70 ++++++++++--------------------------------------------- 1 file changed, 12 insertions(+), 58 deletions(-) diff --git a/README.md b/README.md index 76c385a4..d607fbd6 100644 --- a/README.md +++ b/README.md @@ -4,66 +4,20 @@ This is the repository for all code relating to our first code jam, in March 201 **This code jam runs from the 23rd of March to the 25th of March, measured using the UTC timezone.** Make sure you open your pull request by then. Once the deadline is up, stop pushing commits - we will not accept any submissions made after this date. -## How To Participate +## What does it do? +Searches Wikipedia for snake information, but first it **converts** your search to a valid snake result. You get a nice table when you invoke the search command. -First things first - set up your repository. Read [this guide on our site](https://pythondiscord.com/info/jams) for information on how to set yourself up for a code jam. -Remember, only one teammate needs to fork the repository - everyone else should be granted access to that fork as a contributor, so that they can work on it directly. +**bot.snakes.get("viper")** +![Multiple_search_results](https://i.imgur.com/9Lij5Jp.png) -Make sure you have the following things installed: +You can off-course search directly for the scientific name. +**bot.snakes.get("Bothriechis schlegelii") +![Scientific_search](https://i.imgur.com/M7WdO18.png) -* Python 3.6 or later (installed with the PATH option enabled if you're on Windows) -* Pip - make sure you can run `pip` in a terminal or command prompt -* Pipenv - you can install this by running `pip install pipenv` in a terminal or command prompt - * Like before, make sure you can run `pipenv` in a terminal or command prompt +**bot.snakes.get()** returns a random snake from wikipedia -Next up, set up your project with `pipenv`. We've [compiled some documentation](./doc) for you to read over if you get stuck - you can find it in the `doc/` folder, -and you absolutely should read all of it, and it will likely answer some of the questions that you have. +There is also a guessing game here +**bot.snakes.guess()** +![guess_the_snake](https://i.imgur.com/JWHrDbk.png) -Use `pipenv run run.py` to start your project. You can press `CTRL+C` with the bot window selected to stop it. - -Remember, if you need help, you can always ask on the server! - -## The Task - -This month's theme is: **Snakes**. - -For this code jam, your task will be to create a Snake cog for a [Discord.py rewrite bot](https://github.com/Rapptz/discord.py/tree/rewrite). -You can find the [documentation for Discord.py rewrite here](https://discordpy.readthedocs.io/en/rewrite/). The best cog commands will be -added to the official Python Discord bot and made available to everyone on the server. The overall best cog will be awarded custom Code Jam -Champion roles, but the best commands from the teams who did not win will also be added to our bot, and any users who write something that -ends up in the bot will be awarded Contributor roles on the server. - -We have prepared some Discord.py rewrite boilerplate for you in this repo. Fork the repo and work in the file called **snakes.py**, in **bot/cogs**. - -This means you won't have to write the basic bot itself, you'll just have to write the stuff that goes in the cog. For those of you with no -discord.py experience, cogs are like little modules that the bot can load, and contain a class with methods that are hooked up to bot commands -(like **bot.tags.get**). That way, when you type `bot.snakes.get('python')`, it will run the method inside the cog that corresponds to this command. - -Your initial task will be to write **get_snek**. This is the minimum requirement for this contest, and everyone must do it. **get_snek** will be a -method that goes online and fetches information about a snake. If you run it without providing an argument, it should fetch information about a -random snake, including the name of the snake, a picture of the snake, and various information about it. Is it venomous? Where can it be found? -What information you choose to get is up to you. - -`get_snek()` should also take an optional argument `name`, which should be a string that contains the name of a snake. For example, if you do -`get_snek('cobra')`, it should get information about a cobra. `name` should be case insensitive. - -If `get_snek('Python')` is called, the method should instead return information about the programming language, but making sure to return the -same type of information as for all the other snakes. Fill in this information in any way you want, try to have some fun with it. - -The information should be returned as a dictionary, so that other methods in the Snake class can call it and make use of it. - -Once you have finished `get_snek()`, you should make at least two bot commands. The first command, `get()`, should simply call `get_snek()` -with whatever arguments the user provided, and then make a nice embed that it returns to Discord. For example, if the user in the Discord -channel says `bot.snakes.get('anaconda')`, the bot should post an embed that shows a picture of an anaconda and some information about the -snake. - -The second command is entirely up to you. You can choose to use `get_snek` for this command as well, or you can come up with something entirely -different. The only requirement is that it is snake related in some way or other. Here is your chance to be creative. It is these commands that -will win or lose you this code jam. The best original ideas for these commands will probably walk away with the victory. - -You are allowed to make as many additional commands as you want, but try to keep it a reasonable amount. The team that writes the most commands is -not automatically going to win. One really excellent command is much better than 10 mediocre ones. - ---- - -Have fun, and don't be afraid to ask for help in the usual places if you need it! +Alas, if you are in a voice channel and type **bot.zen** you are greeted with a little easter-egg From 11be7f1574ac9ce29e78e703c6fcc6b7ce498f6e Mon Sep 17 00:00:00 2001 From: Eivind Teig Date: Sun, 25 Mar 2018 23:15:14 +0200 Subject: [PATCH 33/38] README update --- README.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index d607fbd6..49269d8d 100644 --- a/README.md +++ b/README.md @@ -6,17 +6,19 @@ This is the repository for all code relating to our first code jam, in March 201 ## What does it do? Searches Wikipedia for snake information, but first it **converts** your search to a valid snake result. You get a nice table when you invoke the search command. - **bot.snakes.get("viper")** + ![Multiple_search_results](https://i.imgur.com/9Lij5Jp.png) You can off-course search directly for the scientific name. **bot.snakes.get("Bothriechis schlegelii") + ![Scientific_search](https://i.imgur.com/M7WdO18.png) **bot.snakes.get()** returns a random snake from wikipedia There is also a guessing game here + **bot.snakes.guess()** ![guess_the_snake](https://i.imgur.com/JWHrDbk.png) From 53973e4b4bbe90dcd8ce23d9e948a2bc121b832c Mon Sep 17 00:00:00 2001 From: Eivind Teig Date: Sun, 25 Mar 2018 23:16:06 +0200 Subject: [PATCH 34/38] README fix --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 49269d8d..315287ef 100644 --- a/README.md +++ b/README.md @@ -20,6 +20,7 @@ You can off-course search directly for the scientific name. There is also a guessing game here **bot.snakes.guess()** + ![guess_the_snake](https://i.imgur.com/JWHrDbk.png) Alas, if you are in a voice channel and type **bot.zen** you are greeted with a little easter-egg From ce51e6c03f8cc6faebe868e64a783117669c4141 Mon Sep 17 00:00:00 2001 From: TildeBeta Date: Mon, 26 Mar 2018 00:26:47 +0300 Subject: [PATCH 35/38] Allow user to only run one instance of command at a time --- bot/cogs/snakes.py | 4 +++- bot/decorators.py | 19 +++++++++++++++++++ 2 files changed, 22 insertions(+), 1 deletion(-) diff --git a/bot/cogs/snakes.py b/bot/cogs/snakes.py index 79c82ba0..298c25ca 100644 --- a/bot/cogs/snakes.py +++ b/bot/cogs/snakes.py @@ -12,6 +12,7 @@ from discord.ext.commands import AutoShardedBot, Context, command, bot_has_permissions from bot.converters import Snake +from bot.decorators import locked from bot.utils import disambiguate log = logging.getLogger(__name__) @@ -114,7 +115,6 @@ async def get_snek(self, name: str) -> Dict[str, Any]: if image_banned: log.info("the image is banned") else: - log.info("the image is clean: ", i) image_list.append(f"{i_url}{i}") thumb_list.append(f"{i_url}{i}?width=100") else: @@ -126,6 +126,7 @@ async def get_snek(self, name: str) -> Dict[str, Any]: @command(name="snakes.get()", aliases=["snakes.get"]) @bot_has_permissions(manage_messages=True) + @locked() async def get(self, ctx: Context, name: Snake = None): """ Fetches information about a snake from Wikipedia. @@ -197,6 +198,7 @@ async def zen(self, ctx): )) @command(name="snakes.guess()", aliases=["snakes.guess", "identify"]) + @locked() async def guess(self, ctx): """ Snake identifying game! diff --git a/bot/decorators.py b/bot/decorators.py index 7009e259..052f04d5 100644 --- a/bot/decorators.py +++ b/bot/decorators.py @@ -1,8 +1,12 @@ # coding=utf-8 import logging +from asyncio import Lock from discord.ext import commands from discord.ext.commands import Context +from weakref import WeakValueDictionary + +from functools import wraps log = logging.getLogger(__name__) @@ -47,3 +51,18 @@ async def predicate(ctx: Context): f"The result of the in_channel check was {check}.") return check return commands.check(predicate) + + +def locked(): + def wrap(func): + func.__locks = WeakValueDictionary() + + @wraps(func) + async def inner(self, ctx, *args, **kwargs): + lock = func.__locks.setdefault(ctx.author.id, Lock()) + if lock.locked(): + return + async with func.__locks.setdefault(ctx.author.id, Lock()): + return await func(self, ctx, *args, **kwargs) + return inner + return wrap From 812e4c23a9a1d6dee3b409e34f59be216f742a72 Mon Sep 17 00:00:00 2001 From: TildeBeta Date: Mon, 26 Mar 2018 00:30:38 +0300 Subject: [PATCH 36/38] Fix import order --- bot/decorators.py | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/bot/decorators.py b/bot/decorators.py index 052f04d5..5663673a 100644 --- a/bot/decorators.py +++ b/bot/decorators.py @@ -1,12 +1,11 @@ # coding=utf-8 import logging - from asyncio import Lock -from discord.ext import commands -from discord.ext.commands import Context +from functools import wraps from weakref import WeakValueDictionary -from functools import wraps +from discord.ext import commands +from discord.ext.commands import Context log = logging.getLogger(__name__) From cf32fdb433f5e9bc142285fa360fc1d176b173b5 Mon Sep 17 00:00:00 2001 From: TildeBeta Date: Mon, 26 Mar 2018 00:53:02 +0300 Subject: [PATCH 37/38] Document locked decorator --- bot/decorators.py | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/bot/decorators.py b/bot/decorators.py index 5663673a..e0875b92 100644 --- a/bot/decorators.py +++ b/bot/decorators.py @@ -53,6 +53,14 @@ async def predicate(ctx: Context): def locked(): + """ + Allows the user to only run one instance of the decorated command at a time. + + Subsequent calls to the command from the same author are + ignored until the command has completed invocation. + + This decorator has to go before (below) the `command` decorator. + """ def wrap(func): func.__locks = WeakValueDictionary() From 7e5a33c3c94c1b1ee64013903664e6c46207136d Mon Sep 17 00:00:00 2001 From: TildeBeta Date: Mon, 26 Mar 2018 01:28:45 +0300 Subject: [PATCH 38/38] Clean up get_snek a bit --- bot/cogs/snakes.py | 112 +++++++++++++++++++++++++-------------------- 1 file changed, 62 insertions(+), 50 deletions(-) diff --git a/bot/cogs/snakes.py b/bot/cogs/snakes.py index 298c25ca..7b331af5 100644 --- a/bot/cogs/snakes.py +++ b/bot/cogs/snakes.py @@ -16,6 +16,7 @@ from bot.utils import disambiguate log = logging.getLogger(__name__) +URL = "https://en.wikipedia.org/w/api.php?" class Snakes: @@ -32,9 +33,12 @@ class Snakes: def __init__(self, bot: AutoShardedBot): self.bot = bot - async def fetch(self, session, url): + async def fetch(self, session, url, params=None): + if params is None: + params = {} + async with async_timeout.timeout(10): - async with session.get(url) as response: + async with session.get(url, params=params) as response: return await response.json() async def get_snek(self, name: str) -> Dict[str, Any]: @@ -51,40 +55,45 @@ async def get_snek(self, name: str) -> Dict[str, Any]: :return: A dict containing information on a snake """ snake_info = {} - # python (programming language) pageid = 23862 - URL = "https://en.wikipedia.org/w/api.php?" - ACTION = "action=query" - LIST = "list=search" - SRSEARCH = "srsearch=" - UTF8 = "utf8=" - SRLIMIT = "srlimit=1" - FORMAT = "format=json" - PROP = "prop=extracts|images|info" - EXLIMIT = "exlimit=max" - EXPLAINTEXT = "explaintext" - INPROP = "inprop=url" - - PAGE_ID_URL = f"{URL}{FORMAT}&{ACTION}&{LIST}&{SRSEARCH}{name}&{UTF8}&{SRLIMIT}" async with aiohttp.ClientSession() as session: - j = await self.fetch(session, PAGE_ID_URL) + params = { + 'format': 'json', + 'action': 'query', + 'list': 'search', + 'srsearch': name, + 'utf8': '', + 'srlimit': '1', + } + + json = await self.fetch(session, URL, params=params) + # wikipedia does have a error page try: - PAGEID = j["query"]["search"][0]["pageid"] + pageid = json["query"]["search"][0]["pageid"] except KeyError: - PAGEID = 41118 - PAGEIDS = f"pageids={PAGEID}" + # Wikipedia error page ID(?) + pageid = 41118 + + params = { + 'format': 'json', + 'action': 'query', + 'prop': 'extracts|images|info', + 'exlimit': 'max', + 'explaintext': '', + 'inprop': 'url', + 'pageids': pageid + } - snake_page = f"{URL}{FORMAT}&{ACTION}&{PROP}&{EXLIMIT}&{EXPLAINTEXT}&{INPROP}&{PAGEIDS}" + json = await self.fetch(session, URL, params=params) - j = await self.fetch(session, snake_page) # constructing dict - handle exceptions later try: - snake_info["title"] = j["query"]["pages"][f"{PAGEID}"]["title"] - snake_info["extract"] = j["query"]["pages"][f"{PAGEID}"]["extract"] - snake_info["images"] = j["query"]["pages"][f"{PAGEID}"]["images"] - snake_info["fullurl"] = j["query"]["pages"][f"{PAGEID}"]["fullurl"] - snake_info["pageid"] = j["query"]["pages"][f"{PAGEID}"]["pageid"] + snake_info["title"] = json["query"]["pages"][f"{pageid}"]["title"] + snake_info["extract"] = json["query"]["pages"][f"{pageid}"]["extract"] + snake_info["images"] = json["query"]["pages"][f"{pageid}"]["images"] + snake_info["fullurl"] = json["query"]["pages"][f"{pageid}"]["fullurl"] + snake_info["pageid"] = json["query"]["pages"][f"{pageid}"]["pageid"] except KeyError: snake_info["error"] = True if snake_info["images"]: @@ -92,33 +101,36 @@ async def get_snek(self, name: str) -> Dict[str, Any]: image_list = [] map_list = [] thumb_list = [] - banned = ['Commons-logo.svg', - 'Red%20Pencil%20Icon.png', - 'distribution', - 'The%20Death%20of%20Cleopatra%20arthur.jpg', - 'Head%20of%20holotype', - 'locator', - 'Woma.png', - '-map.', - '.svg', - 'ange.', - 'Adder%20(PSF).png' - ] + + # Wikipedia has arbitrary images that are not snakes + banned = [ + 'Commons-logo.svg', + 'Red%20Pencil%20Icon.png', + 'distribution', + 'The%20Death%20of%20Cleopatra%20arthur.jpg', + 'Head%20of%20holotype', + 'locator', + 'Woma.png', + '-map.', + '.svg', + 'ange.', + 'Adder%20(PSF).png' + ] + for image in snake_info["images"]: - i = image["title"].split(':')[1].replace(" ", "%20") - if not i.startswith('Map'): - for b in banned: - image_banned = False - if b in i: - image_banned = True - break - if image_banned: + # images come in the format of `File:filename.extension` + file, sep, filename = image["title"].partition(':') + filename = filename.replace(" ", "%20") # Wikipedia returns good data! + + if not filename.startswith('Map'): + if any(ban in filename for ban in banned): log.info("the image is banned") else: - image_list.append(f"{i_url}{i}") - thumb_list.append(f"{i_url}{i}?width=100") + image_list.append(f"{i_url}{filename}") + thumb_list.append(f"{i_url}{filename}?width=100") else: - map_list.append(f"{i_url}{i}") + map_list.append(f"{i_url}{filename}") + snake_info["image_list"] = image_list snake_info["map_list"] = map_list snake_info["thumb_list"] = thumb_list