commit 3cc47ae3cbcd4105079a42cb17c3c75e9556404f Author: Sergio Álvarez Date: Mon Jul 10 10:58:51 2017 +0200 First commit diff --git a/README.md b/README.md new file mode 100644 index 0000000..45410cf --- /dev/null +++ b/README.md @@ -0,0 +1,35 @@ +# first of all + +Take in mind that the first execution of each script will cause a bit of spam on your server. + +# configuration + +You should edit the `conf.py` file. + +To get your Discord Webhook URL go [here](https://support.discordapp.com/hc/en-us/articles/228383668-Intro-to-Webhooks) + +To get your Battle.net API Key go [here](https://dev.battle.net/) + +# dependencies + +* python3 +* redis-server +* redis-py + +# crontab + +```*/15 * * * * timeout 890 /path/guild.py >> /path/log/guild.log 2>&1 +*/15 * * * * timeout 890 /path/mythics.py >> /path/log/mythics.log 2>&1 +*/30 * * * * timeout 1790 /path/loot.py >> /path/log/loot.log 2>&1 +* * * * * timeout 58 /path/rss.py >> /path/log/rss.log 2>&1 +* * * * * timeout 58 /path/streams.py >> /path/log/streams.log 2>&1 +* * * * * timeout 58 /path/warcraftlogs.py >> /path/cron/log/warcraftlogs.log 2>&1 +0 9 * * 3 timeout 60 /path/wowprogress.py >> /path/cron/log/wowprogress.log 2>&1 +0 8 * * 3 timeout 60 /path/affixes.py >> /path/log/affixes.log 2>&1``` + +# credits + +Readme writted with [stackedit](https://stackedit.io/editor). +Coded with [Sublime Text 3](https://www.sublimetext.com/3). +Scripts running under [Gigabyte Brix](https://www.gigabyte.com/Mini-PcBarebone/GB-BXi3-5010-rev-10#ov) + [Ubuntu](https://www.ubuntu.com/). +Originally did it for [Vagrant Story](https://vagrantstory.eu/) (EU-Dun Modr) guild. \ No newline at end of file diff --git a/affixes.py b/affixes.py new file mode 100755 index 0000000..ae7e1c5 --- /dev/null +++ b/affixes.py @@ -0,0 +1,16 @@ +#! /usr/bin/python3 + +import datetime +import webhook +import conf + +wh = webhook.Webhook(conf.url_discord_webhook) + +week = (int(datetime.datetime.now().strftime("%V")) % len(conf.affix_rotation)) - 1 + +f = [] +for s in conf.affix_rotation[week]: + f.append(webhook.field("{1} {0}".format(s, conf.affixes[s]), conf.affix_human[s], True)) + +wh.add_embed(webhook.embed(color=0x3f89ff, fields=f)) +wh.send("**[Affixes de esta semana]()**") diff --git a/conf.py b/conf.py new file mode 100644 index 0000000..5eebb95 --- /dev/null +++ b/conf.py @@ -0,0 +1,113 @@ + +url_discord_webhook = "https://discordapp.com/api/webhooks/???/???????" + +battle_net_region = "eu" +battle_net_apikey = "????" + +twitch_token = "?????" + +warcraftlogs_token = "???????" + +icon_wowhead = "<:wowhead:283900950379233280>" +icon_mmoc = "<:mmochampion:283900921694650368>" +icon_twitch = "<:twitch:332609778285019137>" +icon_warcraftlogs = "<:warcraftlogs:283906655484379138>" + +affixes = { + "Bullente": "<:m_teeming:278565188410802176>", + "Detonante": "<:m_bursting:327109581048250369>", + "Dolorosa": "<:m_grievous:327109581132136449>", + "Explosiva": "<:m_explosive:327109581249576960>", + "Furibunda": "<:m_raging:278565187986915328>", + "Inquieta": "<:m_skittish:278565188087840768>", + "Necrótica": "<:m_necro:278565187634593795>", + "Potenciante": "<:m_bolstering:278565187987046400>", + "Rebosante": "<:m_over:278565188033314816>", + "Reforzada": "<:m_forti:278565187588456450>", + "Sanguina": "<:m_sanguine:278565188020469760>", + "Sísmica": "<:m_quaking:327109581236862976>", + "Tiránica": "<:m_tyra:278565187852828674>", + "Volcánica": "<:m_volcanic:278565188125458432>" +} + +affix_human = { + "Bullente": "+ bichos", + "Detonante": "Explotan al morir", + "Dolorosa": "Sangrado 90%", + "Explosiva": "Orbes de mierda", + "Furibunda": "Enrage 30%", + "Inquieta": "-Aggro", + "Necrótica": "-Sanación", + "Potenciante": "Se buffan al morir", + "Rebosante": "Overheal", + "Reforzada": "Bichos tochos", + "Sanguina": "Pozo al morir", + "Sísmica": "El puto quake", + "Tiránica": "Bosses tochos", + "Volcánica": "El puto volcanic" +} + +affix_rotation = [ + ["Furibunda", "Volcánica", "Tiránica"], + ["Bullente", "Explosiva", "Reforzada"], + ["Potenciante", "Dolorosa", "Tiránica"], + ["Sanguina", "Volcánica", "Reforzada"], + ["Detonante", "Inquieta", "Tiránica"], + ["Bullente", "Sísmica", "Reforzada"], + ["Furibunda", "Necrótica", "Tiránica"], + ["Potenciante", "Inquieta", "Reforzada"], + ["Bullente", "Necrótica", "Tiránica"], + ["Sanguina", "Dolorosa", "Reforzada"], + ["Potenciante", "Explosiva", "Tiránica"], + ["Detonante", "Sísmica", "Reforzada"] +] + +zones = { + "darkheart-thicket": "Arboleda Corazón Oscuro", + "court-of-stars": "Corte de las Estrellas", + "vault-of-the-wardens": "Cámara de las Celadoras", + "halls-of-valor": "Cámaras del Valor", + "maw-of-souls": "Fauce de Almas", + "neltharions-lair": "Guarida de Neltharion", + "the-arcway": "La Arquería", + "eye-of-azshara": "Ojo de Azshara", + "black-rook-hold": "Torreón Grajo Negro", + "cathedral-of-eternal-night": "Catedral de la Noche Eterna", + "return-to-karazhan-lower": "Regreso a Karazhan: inferior", + "return-to-karazhan-upper": "Regreso a Karazhan: superior" +} + +timers = { + "black-rook-hold": ["38:00", "30:24", "22:48"], + "court-of-stars": ["30:00", "24:00", "18:00"], + "darkheart-thicket": ["30:00", "24:00", "18:00"], + "eye-of-azshara": ["35:00", "28:00", "21:00"], + "halls-of-valor": ["45:00", "36:00", "27:00"], + "maw-of-souls": ["24:00", "19:12", "14:24"], + "neltharions-lair": ["33:00", "27:24", "19:48"], + "the-arcway": ["45:00", "36:00", "27:00"], + "vault-of-the-wardens": ["33:00", "26:24", "19:48"], + "cathedral-of-eternal-night": ["33:00", "27:24", "19:48"], + "return-to-karazhan-lower": ["39:00", "31:12", "23:24"], + "return-to-karazhan-upper": ["39:00", "31:12", "23:24"] +} + +class_icons = { + "Character--WARRIOR": "<:class_warrior:278565187257237505>", + "Character--DRUID": "<:class_druid:278565188381442048>", + "Character--HUNTER": "<:class_hunter:278565187605364737>", + "Character--DEATHKNIGHT": "<:class_deathknight:278565187903029248>", + "Character--MAGE": "<:class_mage:278565187919937537>", + "Character--DEMONHUNTER": "<:class_demonhunter:278565187500376065>", + "Character--PRIEST": "<:class_priest:278565187970269184>", + "Character--PALADIN": "<:class_paladin:278565187588587521>", + "Character--SHAMAN": "<:class_shaman:278565187831726081>", + "Character--ROGUE": "<:class_rogue:278565187940909056>", + "Character--WARLOCK": "<:class_warlock:278565187596976130>", + "Character--MONK": "<:class_monk:278565187618078722>" +} + +#stop here! + +def battle_net_url(pattern): + return pattern.format(battle_net_region, battle_net_apikey) diff --git a/discord-icons/affixes/m_bolstering.jpg b/discord-icons/affixes/m_bolstering.jpg new file mode 100644 index 0000000..ee35d9a Binary files /dev/null and b/discord-icons/affixes/m_bolstering.jpg differ diff --git a/discord-icons/affixes/m_bursting.jpg b/discord-icons/affixes/m_bursting.jpg new file mode 100644 index 0000000..6d9cb38 Binary files /dev/null and b/discord-icons/affixes/m_bursting.jpg differ diff --git a/discord-icons/affixes/m_explosive.jpg b/discord-icons/affixes/m_explosive.jpg new file mode 100644 index 0000000..757598a Binary files /dev/null and b/discord-icons/affixes/m_explosive.jpg differ diff --git a/discord-icons/affixes/m_forti.jpg b/discord-icons/affixes/m_forti.jpg new file mode 100644 index 0000000..4f15b08 Binary files /dev/null and b/discord-icons/affixes/m_forti.jpg differ diff --git a/discord-icons/affixes/m_grievous.jpg b/discord-icons/affixes/m_grievous.jpg new file mode 100644 index 0000000..99a7382 Binary files /dev/null and b/discord-icons/affixes/m_grievous.jpg differ diff --git a/discord-icons/affixes/m_necro.jpg b/discord-icons/affixes/m_necro.jpg new file mode 100644 index 0000000..0b64c0d Binary files /dev/null and b/discord-icons/affixes/m_necro.jpg differ diff --git a/discord-icons/affixes/m_over.jpg b/discord-icons/affixes/m_over.jpg new file mode 100644 index 0000000..24e489f Binary files /dev/null and b/discord-icons/affixes/m_over.jpg differ diff --git a/discord-icons/affixes/m_quaking.jpg b/discord-icons/affixes/m_quaking.jpg new file mode 100644 index 0000000..b7e3a47 Binary files /dev/null and b/discord-icons/affixes/m_quaking.jpg differ diff --git a/discord-icons/affixes/m_raging.jpg b/discord-icons/affixes/m_raging.jpg new file mode 100644 index 0000000..fba3bd7 Binary files /dev/null and b/discord-icons/affixes/m_raging.jpg differ diff --git a/discord-icons/affixes/m_sanguine.jpg b/discord-icons/affixes/m_sanguine.jpg new file mode 100644 index 0000000..2446625 Binary files /dev/null and b/discord-icons/affixes/m_sanguine.jpg differ diff --git a/discord-icons/affixes/m_skittish.jpg b/discord-icons/affixes/m_skittish.jpg new file mode 100644 index 0000000..9f3f868 Binary files /dev/null and b/discord-icons/affixes/m_skittish.jpg differ diff --git a/discord-icons/affixes/m_teeming.jpg b/discord-icons/affixes/m_teeming.jpg new file mode 100644 index 0000000..9807dc5 Binary files /dev/null and b/discord-icons/affixes/m_teeming.jpg differ diff --git a/discord-icons/affixes/m_tyra.jpg b/discord-icons/affixes/m_tyra.jpg new file mode 100644 index 0000000..b61e166 Binary files /dev/null and b/discord-icons/affixes/m_tyra.jpg differ diff --git a/discord-icons/affixes/m_volcanic.jpg b/discord-icons/affixes/m_volcanic.jpg new file mode 100644 index 0000000..6120502 Binary files /dev/null and b/discord-icons/affixes/m_volcanic.jpg differ diff --git a/discord-icons/boss.gif b/discord-icons/boss.gif new file mode 100644 index 0000000..6b28342 Binary files /dev/null and b/discord-icons/boss.gif differ diff --git a/discord-icons/brands/mmochampion.png b/discord-icons/brands/mmochampion.png new file mode 100644 index 0000000..8a1c6d7 Binary files /dev/null and b/discord-icons/brands/mmochampion.png differ diff --git a/discord-icons/brands/twitch.png b/discord-icons/brands/twitch.png new file mode 100644 index 0000000..71d7a6c Binary files /dev/null and b/discord-icons/brands/twitch.png differ diff --git a/discord-icons/brands/warcraftlogs.png b/discord-icons/brands/warcraftlogs.png new file mode 100644 index 0000000..ecefa2c Binary files /dev/null and b/discord-icons/brands/warcraftlogs.png differ diff --git a/discord-icons/brands/wowhead.png b/discord-icons/brands/wowhead.png new file mode 100644 index 0000000..369d2ee Binary files /dev/null and b/discord-icons/brands/wowhead.png differ diff --git a/discord-icons/classes/class_deathknight.jpg b/discord-icons/classes/class_deathknight.jpg new file mode 100644 index 0000000..8a33bbb Binary files /dev/null and b/discord-icons/classes/class_deathknight.jpg differ diff --git a/discord-icons/classes/class_demonhunter.jpg b/discord-icons/classes/class_demonhunter.jpg new file mode 100644 index 0000000..f19600c Binary files /dev/null and b/discord-icons/classes/class_demonhunter.jpg differ diff --git a/discord-icons/classes/class_druid.jpg b/discord-icons/classes/class_druid.jpg new file mode 100644 index 0000000..72ce002 Binary files /dev/null and b/discord-icons/classes/class_druid.jpg differ diff --git a/discord-icons/classes/class_hunter.jpg b/discord-icons/classes/class_hunter.jpg new file mode 100644 index 0000000..9598a13 Binary files /dev/null and b/discord-icons/classes/class_hunter.jpg differ diff --git a/discord-icons/classes/class_mage.jpg b/discord-icons/classes/class_mage.jpg new file mode 100644 index 0000000..95f378d Binary files /dev/null and b/discord-icons/classes/class_mage.jpg differ diff --git a/discord-icons/classes/class_monk.jpg b/discord-icons/classes/class_monk.jpg new file mode 100644 index 0000000..fc0ad82 Binary files /dev/null and b/discord-icons/classes/class_monk.jpg differ diff --git a/discord-icons/classes/class_paladin.jpg b/discord-icons/classes/class_paladin.jpg new file mode 100644 index 0000000..86cd9f0 Binary files /dev/null and b/discord-icons/classes/class_paladin.jpg differ diff --git a/discord-icons/classes/class_priest.jpg b/discord-icons/classes/class_priest.jpg new file mode 100644 index 0000000..62b91ca Binary files /dev/null and b/discord-icons/classes/class_priest.jpg differ diff --git a/discord-icons/classes/class_rogue.jpg b/discord-icons/classes/class_rogue.jpg new file mode 100644 index 0000000..7e967ff Binary files /dev/null and b/discord-icons/classes/class_rogue.jpg differ diff --git a/discord-icons/classes/class_shaman.jpg b/discord-icons/classes/class_shaman.jpg new file mode 100644 index 0000000..2d386ff Binary files /dev/null and b/discord-icons/classes/class_shaman.jpg differ diff --git a/discord-icons/classes/class_warlock.jpg b/discord-icons/classes/class_warlock.jpg new file mode 100644 index 0000000..fb62098 Binary files /dev/null and b/discord-icons/classes/class_warlock.jpg differ diff --git a/discord-icons/classes/class_warrior.jpg b/discord-icons/classes/class_warrior.jpg new file mode 100644 index 0000000..67b4095 Binary files /dev/null and b/discord-icons/classes/class_warrior.jpg differ diff --git a/discord-icons/mushroom.png b/discord-icons/mushroom.png new file mode 100644 index 0000000..cf543ba Binary files /dev/null and b/discord-icons/mushroom.png differ diff --git a/discord-icons/races/race_bloodelf.jpg b/discord-icons/races/race_bloodelf.jpg new file mode 100644 index 0000000..fabf231 Binary files /dev/null and b/discord-icons/races/race_bloodelf.jpg differ diff --git a/discord-icons/races/race_bloodelf_female.jpg b/discord-icons/races/race_bloodelf_female.jpg new file mode 100644 index 0000000..aeeb543 Binary files /dev/null and b/discord-icons/races/race_bloodelf_female.jpg differ diff --git a/discord-icons/races/race_draenei.jpg b/discord-icons/races/race_draenei.jpg new file mode 100644 index 0000000..33cd606 Binary files /dev/null and b/discord-icons/races/race_draenei.jpg differ diff --git a/discord-icons/races/race_draenei_female.jpg b/discord-icons/races/race_draenei_female.jpg new file mode 100644 index 0000000..bc34ca1 Binary files /dev/null and b/discord-icons/races/race_draenei_female.jpg differ diff --git a/discord-icons/races/race_dwarf.jpg b/discord-icons/races/race_dwarf.jpg new file mode 100644 index 0000000..62a6a3e Binary files /dev/null and b/discord-icons/races/race_dwarf.jpg differ diff --git a/discord-icons/races/race_dwarf_female.jpg b/discord-icons/races/race_dwarf_female.jpg new file mode 100644 index 0000000..c1e3725 Binary files /dev/null and b/discord-icons/races/race_dwarf_female.jpg differ diff --git a/discord-icons/races/race_gnome.jpg b/discord-icons/races/race_gnome.jpg new file mode 100644 index 0000000..c76e9a2 Binary files /dev/null and b/discord-icons/races/race_gnome.jpg differ diff --git a/discord-icons/races/race_gnome_female.jpg b/discord-icons/races/race_gnome_female.jpg new file mode 100644 index 0000000..6a0a787 Binary files /dev/null and b/discord-icons/races/race_gnome_female.jpg differ diff --git a/discord-icons/races/race_goblin.jpg b/discord-icons/races/race_goblin.jpg new file mode 100644 index 0000000..9604c64 Binary files /dev/null and b/discord-icons/races/race_goblin.jpg differ diff --git a/discord-icons/races/race_goblin_female.jpg b/discord-icons/races/race_goblin_female.jpg new file mode 100644 index 0000000..0e2049d Binary files /dev/null and b/discord-icons/races/race_goblin_female.jpg differ diff --git a/discord-icons/races/race_human.jpg b/discord-icons/races/race_human.jpg new file mode 100644 index 0000000..66fa8e8 Binary files /dev/null and b/discord-icons/races/race_human.jpg differ diff --git a/discord-icons/races/race_human_female.jpg b/discord-icons/races/race_human_female.jpg new file mode 100644 index 0000000..f47247f Binary files /dev/null and b/discord-icons/races/race_human_female.jpg differ diff --git a/discord-icons/races/race_nightelf.jpg b/discord-icons/races/race_nightelf.jpg new file mode 100644 index 0000000..85bd682 Binary files /dev/null and b/discord-icons/races/race_nightelf.jpg differ diff --git a/discord-icons/races/race_nightelf_female.jpg b/discord-icons/races/race_nightelf_female.jpg new file mode 100644 index 0000000..057239d Binary files /dev/null and b/discord-icons/races/race_nightelf_female.jpg differ diff --git a/discord-icons/races/race_orc.jpg b/discord-icons/races/race_orc.jpg new file mode 100644 index 0000000..57deb32 Binary files /dev/null and b/discord-icons/races/race_orc.jpg differ diff --git a/discord-icons/races/race_orc_female.jpg b/discord-icons/races/race_orc_female.jpg new file mode 100644 index 0000000..238baa3 Binary files /dev/null and b/discord-icons/races/race_orc_female.jpg differ diff --git a/discord-icons/races/race_pandaren.jpg b/discord-icons/races/race_pandaren.jpg new file mode 100644 index 0000000..b6ebb18 Binary files /dev/null and b/discord-icons/races/race_pandaren.jpg differ diff --git a/discord-icons/races/race_pandaren_female.jpg b/discord-icons/races/race_pandaren_female.jpg new file mode 100644 index 0000000..3541729 Binary files /dev/null and b/discord-icons/races/race_pandaren_female.jpg differ diff --git a/discord-icons/races/race_scourge.jpg b/discord-icons/races/race_scourge.jpg new file mode 100644 index 0000000..ecb7f71 Binary files /dev/null and b/discord-icons/races/race_scourge.jpg differ diff --git a/discord-icons/races/race_scourge_female.jpg b/discord-icons/races/race_scourge_female.jpg new file mode 100644 index 0000000..b7eba5a Binary files /dev/null and b/discord-icons/races/race_scourge_female.jpg differ diff --git a/discord-icons/races/race_tauren.jpg b/discord-icons/races/race_tauren.jpg new file mode 100644 index 0000000..0c148b2 Binary files /dev/null and b/discord-icons/races/race_tauren.jpg differ diff --git a/discord-icons/races/race_tauren_female.jpg b/discord-icons/races/race_tauren_female.jpg new file mode 100644 index 0000000..d89e50f Binary files /dev/null and b/discord-icons/races/race_tauren_female.jpg differ diff --git a/discord-icons/races/race_troll.jpg b/discord-icons/races/race_troll.jpg new file mode 100644 index 0000000..41e5f83 Binary files /dev/null and b/discord-icons/races/race_troll.jpg differ diff --git a/discord-icons/races/race_troll_female.jpg b/discord-icons/races/race_troll_female.jpg new file mode 100644 index 0000000..2a70366 Binary files /dev/null and b/discord-icons/races/race_troll_female.jpg differ diff --git a/discord-icons/races/race_worgen.jpg b/discord-icons/races/race_worgen.jpg new file mode 100644 index 0000000..41b85d1 Binary files /dev/null and b/discord-icons/races/race_worgen.jpg differ diff --git a/discord-icons/races/race_worgen_female.jpg b/discord-icons/races/race_worgen_female.jpg new file mode 100644 index 0000000..e74e253 Binary files /dev/null and b/discord-icons/races/race_worgen_female.jpg differ diff --git a/discord-icons/raidmarks/mark_blue.png b/discord-icons/raidmarks/mark_blue.png new file mode 100644 index 0000000..966d459 Binary files /dev/null and b/discord-icons/raidmarks/mark_blue.png differ diff --git a/discord-icons/raidmarks/mark_cross.png b/discord-icons/raidmarks/mark_cross.png new file mode 100644 index 0000000..8fbf838 Binary files /dev/null and b/discord-icons/raidmarks/mark_cross.png differ diff --git a/discord-icons/raidmarks/mark_green.png b/discord-icons/raidmarks/mark_green.png new file mode 100644 index 0000000..1e1f25b Binary files /dev/null and b/discord-icons/raidmarks/mark_green.png differ diff --git a/discord-icons/raidmarks/mark_moon.png b/discord-icons/raidmarks/mark_moon.png new file mode 100644 index 0000000..d4991ac Binary files /dev/null and b/discord-icons/raidmarks/mark_moon.png differ diff --git a/discord-icons/raidmarks/mark_orange.png b/discord-icons/raidmarks/mark_orange.png new file mode 100644 index 0000000..be937a7 Binary files /dev/null and b/discord-icons/raidmarks/mark_orange.png differ diff --git a/discord-icons/raidmarks/mark_purple.png b/discord-icons/raidmarks/mark_purple.png new file mode 100644 index 0000000..b22dcd9 Binary files /dev/null and b/discord-icons/raidmarks/mark_purple.png differ diff --git a/discord-icons/raidmarks/mark_skull.png b/discord-icons/raidmarks/mark_skull.png new file mode 100644 index 0000000..551ee36 Binary files /dev/null and b/discord-icons/raidmarks/mark_skull.png differ diff --git a/discord-icons/raidmarks/mark_star.png b/discord-icons/raidmarks/mark_star.png new file mode 100644 index 0000000..f2aaca2 Binary files /dev/null and b/discord-icons/raidmarks/mark_star.png differ diff --git a/discord-icons/roles/rol_dps.png b/discord-icons/roles/rol_dps.png new file mode 100644 index 0000000..6022b24 Binary files /dev/null and b/discord-icons/roles/rol_dps.png differ diff --git a/discord-icons/roles/rol_healer.png b/discord-icons/roles/rol_healer.png new file mode 100644 index 0000000..02e9dee Binary files /dev/null and b/discord-icons/roles/rol_healer.png differ diff --git a/discord-icons/roles/rol_tank.png b/discord-icons/roles/rol_tank.png new file mode 100644 index 0000000..d5c89f0 Binary files /dev/null and b/discord-icons/roles/rol_tank.png differ diff --git a/discord-icons/roles/role_dps.gif b/discord-icons/roles/role_dps.gif new file mode 100644 index 0000000..76acbc1 Binary files /dev/null and b/discord-icons/roles/role_dps.gif differ diff --git a/discord-icons/roles/role_healer.gif b/discord-icons/roles/role_healer.gif new file mode 100644 index 0000000..cca3436 Binary files /dev/null and b/discord-icons/roles/role_healer.gif differ diff --git a/discord-icons/roles/role_tank.gif b/discord-icons/roles/role_tank.gif new file mode 100644 index 0000000..18133fd Binary files /dev/null and b/discord-icons/roles/role_tank.gif differ diff --git a/guild.py b/guild.py new file mode 100755 index 0000000..dcdee85 --- /dev/null +++ b/guild.py @@ -0,0 +1,64 @@ +#! /usr/bin/python3 + +import redis +import time +import requests +import sys +import webhook +import conf + +now = time.time() + +wh = webhook.Webhook(conf.url_discord_webhook) + +r = redis.StrictRedis(host='localhost', charset="utf-8", decode_responses=True) + +bnet_guild = conf.battle_net_url("https://{0}.api.battle.net/wow/guild/dun%20modr/vagrant%20story?fields=news,members,achievements&locale=es_ES&apikey={1}") + +g = requests.get(url=bnet_guild).json() + + +if "members" not in g: + print("'members' not in g") + sys.exit() + +members = r.smembers("bot:members") # members database, used by other scripts +chars = set() + +# how join the guild, how leaves + +for member in g["members"]: + chars.add(member["character"]["name"]) + +for new in chars.difference(members): + r.sadd("bot:members", new) + members.add(new) + wh.send(":inbox_tray: **{0}** ha entrado a la guild! 🎉".format(new)) + +for kick in members.difference(chars): + r.srem("bot:members", kick) + wh.send(":outbox_tray: **{0}** ha salido a la guild :confused:".format(kick)) + + +if "news" not in g: + print("'news' not in g") + sys.exit() + +g["news"].reverse() +r.zremrangebyscore("bot:guild", "-inf", now-(60*60*24*2)) + +for news in g["news"]: + fid = None + push = None + + if news["timestamp"]/1000 < now-(60*60*24): # oooold, check 1 day only + continue + + if news["type"] in ["playerAchievement", "guildAchievement"]: + fid = "{} {} {}".format(news["type"], news["character"], news["achievement"]["title"]) + push = ":medal: **{0}** gana el logro **{1}**!".format(news["character"], news["achievement"]["title"]) + + if fid is None or r.zadd("bot:guild", now, fid) == 0 or push is None: + continue + + wh.send(push) diff --git a/items_legend.json b/items_legend.json new file mode 100644 index 0000000..ee46da7 --- /dev/null +++ b/items_legend.json @@ -0,0 +1,246 @@ +[ +{"item_id": 132357, "name_eses":"Pilares del Portal Oscuro","quality":5,"icon":"inv_pants_cloth_raidwarlock_i_01","screenshot":577124,"jsonequip":{"appearances":{"0":[81958,"inv_pants_robe_raidmage_i_01"]},"armor":282,"classes":256,"critstrkrtng":980,"displayid":81958,"dura":145,"hastertng":588,"int":2382,"mastrtng":735,"reqlevel":101,"sellprice":875743,"slotbak":7,"sta":3573},"attainable":0,"flags2":12352}, +{"item_id": 132365, "name_eses":"Grilletes de Bryndaor","quality":5,"icon":"inv_bracer_plate_pvpdeathknight_o_01","screenshot":0,"jsonequip":{"appearances":{"0":[52637,"inv_bracer_07"]},"armor":341,"classes":32,"critstrkrtng":551,"displayid":52637,"dura":70,"mastrtng":413,"reqlevel":101,"sellprice":466099,"slotbak":9,"sta":2010,"str":1340},"attainable":0,"flags2":12352}, +{"item_id": 132366, "name_eses":"Nueva voluntad de Koltira","quality":5,"icon":"inv_belt_14","screenshot":0,"jsonequip":{"appearances":{"0":[38137,""]},"armor":438,"classes":32,"critstrkrtng":459,"displayid":38137,"dura":70,"hastertng":827,"reqlevel":101,"sellprice":467756,"slotbak":6,"sta":2680,"str":1786},"attainable":0,"flags2":12352}, +{"item_id": 132367, "name_eses":"Servicio de Sanguino","quality":5,"icon":"inv_belt_plate_deathknight_m_01","screenshot":564977,"jsonequip":{"appearances":{"0":[120805,""]},"armor":438,"classes":32,"displayid":120805,"dura":70,"lifesteal":1103,"mastrtng":827,"reqlevel":101,"sellprice":469459,"slotbak":6,"sta":2680,"str":1786,"versatility":459},"attainable":0,"flags2":12352}, +{"item_id": 132369, "name_eses":"Sigilo de invocaci\u00f3n superior de Wilfred","quality":5,"icon":"inv_jewelry_ring_78","screenshot":0,"jsonequip":{"appearances":{"0":[0,""]},"classes":256,"hastertng":1781,"mastrtng":1336,"nsockets":1,"reqlevel":101,"sellprice":591081,"slotbak":11,"socket1":7,"sta":2010},"attainable":0,"flags2":12352}, +{"item_id": 132374, "name_eses":"\u00daltima maldici\u00f3n de Kazzak","quality":5,"icon":"inv_belt_cloth_raidwarlock_i_01","screenshot":603569,"jsonequip":{"appearances":{"0":[82055,""]},"armor":181,"classes":256,"displayid":82055,"dura":70,"hastertng":551,"int":1786,"mastrtng":735,"reqlevel":101,"sellprice":481286,"slotbak":6,"sta":2680},"attainable":0,"flags2":12352}, +{"item_id": 132375, "name_eses":"Odr, chal de los Ymirjar","quality":5,"icon":"inv_misc_cape_cataclysm_tank_b_01","screenshot":0,"jsonequip":{"appearances":{"0":[138737,"inv_cape_draenordungeon_c_04leather_base"]},"armor":161,"classes":256,"critstrkrtng":620,"displayid":138737,"hastertng":344,"int":1340,"reqlevel":101,"sellprice":668573,"slotbak":16,"sta":2010},"attainable":0,"flags2":12352}, +{"item_id": 132376, "name_eses":"Mant\u00f3n de Acherus","quality":5,"icon":"inv_cape_pandaria_d_01","screenshot":619380,"jsonequip":{"appearances":{"0":[111653,""]},"armor":161,"classes":32,"critstrkrtng":551,"displayid":111653,"hastertng":413,"mastrtng":689,"reqlevel":101,"sellprice":671108,"slotbak":16,"sta":2010,"str":1340},"attainable":0,"flags2":12352}, +{"item_id": 132378, "name_eses":"Golpe oscuro de Sacrolash","quality":5,"icon":"inv_jewelry_ring_66","screenshot":0,"jsonequip":{"appearances":{"0":[0,""]},"classes":256,"critstrkrtng":1514,"mastrtng":1603,"nsockets":1,"reqlevel":101,"sellprice":567725,"slotbak":11,"socket1":7,"sta":2010},"attainable":0,"flags2":12352}, +{"item_id": 132379, "name_eses":"Maldad sin'dorei","quality":5,"icon":"inv_bracer_44","screenshot":0,"jsonequip":{"appearances":{"0":[63795,""]},"armor":141,"classes":256,"critstrkrtng":620,"displayid":63795,"dura":70,"hastertng":344,"int":1340,"reqlevel":101,"sellprice":455883,"slotbak":9,"sta":2010},"attainable":0,"flags2":12352}, +{"item_id": 132381, "name_eses":"Grilletes insomnes de Streten","quality":5,"icon":"inv_bracer_cloth_raidwarlock_p_01","screenshot":0,"jsonequip":{"appearances":{"0":[142600,""]},"armor":141,"classes":256,"displayid":142600,"dura":70,"hastertng":551,"int":1340,"mastrtng":413,"reqlevel":101,"sellprice":459242,"slotbak":9,"sta":2010},"attainable":0,"flags2":12352}, +{"item_id": 132393, "name_eses":"Ritual recurrente","quality":5,"icon":"inv_shoulder_cloth_raidwarlock_l_01","screenshot":566509,"jsonequip":{"appearances":{"0":[109557,""]},"armor":242,"classes":256,"critstrkrtng":827,"displayid":109557,"dura":120,"int":1786,"mastrtng":459,"reqlevel":101,"sellprice":663435,"slotbak":3,"sta":2680},"attainable":0,"flags2":12352}, +{"item_id": 132394, "name_eses":"Caperuza de desd\u00e9n eterno","quality":5,"icon":"inv_helmet_152","screenshot":612754,"jsonequip":{"appearances":{"0":[64302,""]},"armor":262,"classes":256,"critstrkrtng":735,"displayid":64302,"dura":120,"int":2382,"mastrtng":980,"reqlevel":101,"sellprice":665970,"slotbak":1,"sta":3573},"attainable":0,"flags2":12352}, +{"item_id": 132406, "name_eses":"Ataduras preeminentes del Rey del Sol","quality":5,"icon":"inv_bracer_robe_raidwarlock_j_01","screenshot":577016,"jsonequip":{"appearances":{"0":[99986,""]},"armor":141,"classes":128,"critstrkrtng":620,"displayid":99986,"dura":70,"hastertng":344,"int":1340,"reqlevel":101,"sellprice":467664,"slotbak":9,"sta":2010},"attainable":0,"flags2":12352}, +{"item_id": 132407, "name_eses":"Ataduras de magigolpe","quality":5,"icon":"inv_bracer_31b","screenshot":0,"jsonequip":{"appearances":{"0":[4302,"inv_bracer_07"]},"armor":141,"classes":256,"critstrkrtng":620,"displayid":4302,"dura":70,"int":1340,"mastrtng":344,"reqlevel":101,"sellprice":469367,"slotbak":9,"sta":2010},"attainable":0,"flags2":12352}, +{"item_id": 132409, "name_eses":"Grilletes chamuscados de Anund","quality":5,"icon":"inv_bracer_leather_firelandsdruid_d_01","screenshot":584422,"jsonequip":{"appearances":{"0":[132797,"inv_bracer_47"]},"armor":141,"classes":16,"critstrkrtng":551,"displayid":132797,"dura":70,"int":1340,"mastrtng":413,"reqlevel":101,"sellprice":438855,"slotbak":9,"sta":2010},"attainable":0,"flags2":12352}, +{"item_id": 132410, "name_eses":"Fragmento de El Exodar","quality":5,"icon":"inv_6_2raid_ring_2a","screenshot":0,"jsonequip":{"appearances":{"0":[0,""]},"classes":128,"critstrkrtng":2004,"hastertng":1114,"nsockets":1,"reqlevel":101,"sellprice":550697,"slotbak":11,"socket1":7,"sta":2010},"attainable":0,"flags2":12352}, +{"item_id": 132411, "name_eses":"Agarre de lady Vashj","quality":5,"icon":"inv_cloth_raidpriest_q_01_glove","screenshot":0,"jsonequip":{"appearances":{"0":[53312,"inv_gauntlets_52"]},"armor":201,"classes":128,"critstrkrtng":735,"displayid":53312,"dura":70,"int":1786,"mastrtng":551,"reqlevel":101,"sellprice":442260,"slotbak":10,"sta":2680},"attainable":0,"flags2":12352}, +{"item_id": 132413, "name_eses":"Brazaletes de asalto de Rhonin","quality":5,"icon":"inv_bracer_cloth_pvpmage_c_02","screenshot":0,"jsonequip":{"appearances":{"0":[43188,"inv_jewelry_ring_35"]},"armor":141,"classes":128,"critstrkrtng":413,"displayid":43188,"dura":70,"hastertng":551,"int":1340,"reqlevel":101,"sellprice":445620,"slotbak":9,"sta":2010},"attainable":0,"flags2":12352}, +{"item_id": 132436, "name_eses":"Skjoldr, Santuario de Ivagont","quality":5,"icon":"inv_bracer_56","screenshot":0,"jsonequip":{"appearances":{"0":[52731,"inv_bracer_13"]},"armor":141,"classes":16,"displayid":52731,"dura":70,"hastertng":620,"int":1340,"mastrtng":344,"reqlevel":101,"sellprice":450636,"slotbak":9,"sta":2010},"attainable":0,"flags2":12352}, +{"item_id": 132437, "name_eses":"Seducci\u00f3n de madre Shahraz","quality":5,"icon":"inv_shoulder_53","screenshot":573040,"jsonequip":{"appearances":{"0":[135257,"inv_shoulder_cloth_raidmage_o_01"]},"armor":242,"classes":16,"critstrkrtng":827,"displayid":135257,"dura":120,"int":1786,"mastrtng":459,"reqlevel":101,"sellprice":673368,"slotbak":3,"sta":2680},"attainable":0,"flags2":12352}, +{"item_id": 132441, "name_eses":"Draugr, faja del rey eterno","quality":5,"icon":"inv_belt_plate_raiddeathknight_k_01","screenshot":0,"jsonequip":{"appearances":{"0":[106561,""]},"armor":438,"classes":32,"displayid":106561,"dura":70,"hastertng":827,"mastrtng":459,"reqlevel":101,"sellprice":471300,"slotbak":6,"sta":2680,"str":1786},"attainable":0,"flags2":12352}, +{"item_id": 132442, "name_eses":"Cord\u00f3n de infinidad","quality":5,"icon":"inv_belt_44c","screenshot":0,"jsonequip":{"appearances":{"0":[5788,"inv_belt_31"]},"armor":181,"classes":128,"critstrkrtng":735,"displayid":5788,"dura":70,"int":1786,"mastrtng":551,"reqlevel":101,"sellprice":472956,"slotbak":6,"sta":2680},"attainable":0,"flags2":12352}, +{"item_id": 132443, "name_eses":"Zancada de Aggramar","quality":5,"icon":"inv_boots_plate_raidpaladin_i_01","screenshot":566338,"jsonequip":{"appearances":{"0":[79838,""]},"armor":536,"classes":35,"critstrkrtng":551,"displayid":79838,"dura":95,"hastertng":459,"int":1786,"mastrtng":827,"reqlevel":101,"sellprice":706595,"slotbak":8,"sta":2680,"str":1786,"strint":1786},"attainable":0,"flags2":12352}, +{"item_id": 132444, "name_eses":"Prydaz, obra maestra de Xavaric","quality":5,"icon":"inv_misc_necklace15","screenshot":592253,"jsonequip":{"appearances":{"0":[0,""]},"critstrkrtng":1247,"hastertng":1247,"mastrtng":1247,"nsockets":1,"reqlevel":101,"sellprice":405990,"slotbak":2,"socket1":7,"sta":2010},"attainable":0,"flags2":12352}, +{"item_id": 132445, "name_eses":"Al'maiesh, la Cuerda de la Esperanza","quality":5,"icon":"inv_belt_51","screenshot":0,"jsonequip":{"appearances":{"0":[34628,"inv_belt_10"]},"armor":181,"classes":16,"displayid":34628,"dura":70,"hastertng":459,"int":1786,"mastrtng":827,"reqlevel":101,"sellprice":478019,"slotbak":6,"sta":2680},"attainable":0,"flags2":12352}, +{"item_id": 132447, "name_eses":"Calzas fascinantes de An'juna","quality":5,"icon":"inv_pants_robe_raidwarlock_j_01","screenshot":0,"jsonequip":{"appearances":{"0":[118369,"inv_pant_cloth_pvppriest_f_01"]},"armor":282,"classes":16,"displayid":118369,"dura":145,"hastertng":980,"int":2382,"mastrtng":735,"reqlevel":101,"sellprice":957378,"slotbak":7,"sta":3573},"attainable":0,"flags2":12352}, +{"item_id": 132448, "name_eses":"Cuarta lecci\u00f3n del instructor","quality":5,"icon":"inv_bracer_26b","screenshot":0,"jsonequip":{"appearances":{"0":[53916,""]},"armor":341,"classes":32,"critstrkrtng":620,"displayid":53916,"dura":70,"hastertng":344,"reqlevel":101,"sellprice":483127,"slotbak":9,"sta":2010,"str":1340},"attainable":0,"flags2":12352}, +{"item_id": 132449, "name_eses":"Abrazo de Phyrix","quality":5,"icon":"inv_jewelry_ring_94","screenshot":0,"jsonequip":{"appearances":{"0":[0,""]},"classes":16,"hastertng":2004,"mastrtng":1114,"nsockets":1,"reqlevel":101,"sellprice":548396,"slotbak":11,"socket1":7,"sta":2010},"attainable":0,"flags2":12352}, +{"item_id": 132450, "name_eses":"Voluntad inquebrantable de Muze","quality":5,"icon":"inv_bracer_cloth_panda_b_01","screenshot":0,"jsonequip":{"appearances":{"0":[30693,"inv_bracer_09"]},"armor":141,"classes":16,"critstrkrtng":413,"displayid":30693,"dura":70,"hastertng":551,"int":1340,"reqlevel":101,"sellprice":440420,"slotbak":9,"sta":2010},"attainable":0,"flags2":12352}, +{"item_id": 132451, "name_eses":"Falda m\u00edstica del maestro de runas","quality":5,"icon":"inv_kilt_cloth_02","screenshot":0,"jsonequip":{"appearances":{"0":[63793,""]},"armor":282,"classes":128,"displayid":63793,"dura":145,"hastertng":1103,"int":2382,"mastrtng":612,"reqlevel":101,"sellprice":879221,"slotbak":7,"sta":3573},"attainable":0,"flags2":12352}, +{"item_id": 132452, "name_eses":"Secreto de Sephuz","quality":5,"icon":"inv_jewelry_ring_149","screenshot":0,"jsonequip":{"appearances":{"0":[0,""]},"critstrkrtng":2227,"hastertng":890,"mlehastepct":2,"nsockets":1,"reqlevel":101,"rgdhastepct":2,"sellprice":554782,"slotbak":11,"socket1":7,"splhastepct":2,"sta":2010},"attainable":0,"flags2":12352}, +{"item_id": 132453, "name_eses":"Quijotes de hueso de Traquesangre","quality":5,"icon":"inv_pants_plate_raidwarrior_i_01","screenshot":0,"jsonequip":{"appearances":{"0":[82101,""]},"armor":682,"classes":32,"displayid":82101,"dura":145,"hastertng":735,"mastrtng":980,"reqlevel":101,"sellprice":885902,"slotbak":7,"sta":3573,"str":2382},"attainable":0,"flags2":12352}, +{"item_id": 132454, "name_eses":"Toque ardiente de Koralon","quality":5,"icon":"inv_belt_cloth_pvppriest_f_01","screenshot":569637,"jsonequip":{"appearances":{"0":[126108,"inv_belt_cloth_raidmage_m_01"]},"armor":181,"classes":128,"critstrkrtng":735,"displayid":126108,"dura":70,"hastertng":551,"int":1786,"reqlevel":101,"sellprice":447185,"slotbak":6,"sta":2680},"attainable":0,"flags2":12352}, +{"item_id": 132455, "name_eses":"Previsi\u00f3n de Norgannon","quality":5,"icon":"inv_boots_cloth_31","screenshot":617487,"jsonequip":{"appearances":{"0":[45601,"inv_boots_fabric_01"]},"armor":222,"classes":400,"critstrkrtng":551,"displayid":45601,"dura":95,"hastertng":735,"int":1786,"mastrtng":551,"reqlevel":101,"sellprice":668230,"slotbak":8,"sta":2680},"attainable":0,"flags2":12352}, +{"item_id": 132456, "name_eses":"Relicario de almas","quality":5,"icon":"inv_belt_cloth_raidwarlock_n_01","screenshot":0,"jsonequip":{"appearances":{"0":[126023,""]},"armor":181,"classes":256,"displayid":126023,"dura":70,"hastertng":735,"int":1786,"mastrtng":551,"reqlevel":101,"sellprice":462786,"slotbak":6,"sta":2680},"attainable":0,"flags2":12352}, +{"item_id": 132457, "name_eses":"Cord\u00f3n de energ\u00eda de Lethtendris","quality":5,"icon":"inv_belt_30","screenshot":583588,"jsonequip":{"appearances":{"0":[25306,"inv_belt_04"]},"armor":181,"classes":256,"critstrkrtng":459,"displayid":25306,"dura":70,"hastertng":827,"int":1786,"reqlevel":101,"sellprice":464442,"slotbak":6,"sta":2680},"attainable":0,"flags2":12352}, +{"item_id": 132458, "name_eses":"Ataduras de nieve de Toravon","quality":5,"icon":"inv_bracer_plate_raidpaladin_l_01","screenshot":0,"jsonequip":{"appearances":{"0":[109526,""]},"armor":341,"classes":32,"displayid":109526,"dura":70,"hastertng":551,"mastrtng":413,"reqlevel":101,"sellprice":466145,"slotbak":9,"sta":2010,"str":1340},"attainable":0,"flags2":12352}, +{"item_id": 132459, "name_eses":"Perseverancia del m\u00e1rtir de \u00c9bano","quality":5,"icon":"inv_helm_plate_raiddeathknight_k_01","screenshot":575819,"jsonequip":{"appearances":{"0":[106557,""]},"armor":633,"classes":32,"displayid":106557,"dura":120,"hastertng":980,"mastrtng":735,"reqlevel":101,"sellprice":696456,"slotbak":1,"sta":3573,"str":2382},"attainable":0,"flags2":12352}, +{"item_id": 132460, "name_eses":"Pirog\u00e9nica de Alythess","quality":5,"icon":"inv_jewelry_ring_65","screenshot":0,"jsonequip":{"appearances":{"0":[0,""]},"classes":256,"critstrkrtng":1781,"hastertng":1336,"nsockets":1,"reqlevel":101,"sellprice":586881,"slotbak":11,"socket1":7,"sta":2010},"attainable":0,"flags2":12352}, +{"item_id": 132461, "name_eses":"Captura de Xalan el Temible","quality":5,"icon":"inv_gauntlets_14","screenshot":0,"jsonequip":{"appearances":{"0":[96396,"inv_gauntlets_robe_pvppriest_c_02"]},"armor":201,"classes":16,"critstrkrtng":827,"displayid":96396,"dura":70,"int":1786,"mastrtng":459,"reqlevel":101,"sellprice":471208,"slotbak":10,"sta":2680},"attainable":0,"flags2":12352}, +{"item_id": 132466, "name_eses":"Ra\u00edces de Shaladrassil","quality":5,"icon":"inv_robe_pants_pvpwarlock_c_02","screenshot":0,"jsonequip":{"agi":2382,"agiint":2382,"appearances":{"0":[97193,"inv_pants_mail_17"]},"armor":437,"classes":68,"critstrkrtng":588,"displayid":97193,"dura":145,"hastertng":1103,"int":2382,"mastrtng":612,"reqlevel":101,"sellprice":953900,"slotbak":7,"sta":3573},"attainable":0,"flags2":12352}, +{"item_id": 132861, "name_eses":"Estel, Inspiraci\u00f3n de Dejahna","quality":5,"icon":"inv_chest_cloth_43","screenshot":563160,"jsonequip":{"appearances":{"0":[55075,""]},"armor":322,"classes":16,"critstrkrtng":980,"displayid":55075,"dura":200,"int":2382,"mastrtng":735,"reqlevel":101,"sellprice":872723,"slotbak":20,"sta":3573},"attainable":0,"flags2":12352}, +{"item_id": 132863, "name_eses":"Diadema de fuego de drag\u00f3n de Darckli","quality":5,"icon":"spell_fire_fire","screenshot":0,"jsonequip":{"appearances":{"0":[22029,""]},"armor":262,"classes":128,"critstrkrtng":1103,"displayid":22029,"dura":120,"hastertng":612,"int":2382,"reqlevel":101,"sellprice":658297,"slotbak":1,"sta":3573},"attainable":0,"flags2":12352}, +{"item_id": 132864, "name_eses":"Locura de Mangaza","quality":5,"icon":"inv_belt_92v4","screenshot":576851,"jsonequip":{"appearances":{"0":[44402,"inv_belt_01"]},"armor":181,"classes":16,"critstrkrtng":827,"displayid":44402,"dura":70,"hastertng":459,"int":1786,"reqlevel":101,"sellprice":443917,"slotbak":6,"sta":2680},"attainable":0,"flags2":12352}, +{"item_id": 133800, "name_eses":"Cord\u00f3n de Maiev, sacerdotisa de la luna","quality":5,"icon":"inv_belt_leather_panda_b_02_crimson","screenshot":577827,"jsonequip":{"appearances":{"0":[109330,"inv_belt_03"]},"armor":181,"classes":16,"critstrkrtng":735,"displayid":109330,"dura":70,"int":1786,"mastrtng":551,"reqlevel":101,"sellprice":476362,"slotbak":6,"sta":2680},"attainable":0,"flags2":12352}, +{"item_id": 133970, "name_eses":"Viaje de Zann'esu","quality":5,"icon":"inv_belt_71","screenshot":0,"jsonequip":{"appearances":{"0":[102015,"inv_belt_robe_pvpmage_d_01"]},"armor":181,"classes":128,"critstrkrtng":551,"displayid":102015,"dura":70,"hastertng":735,"int":1786,"reqlevel":101,"sellprice":437198,"slotbak":6,"sta":2680},"attainable":0,"flags2":12352}, +{"item_id": 133971, "name_eses":"Zenk'aram, guirnalda de Iridi","quality":5,"icon":"inv_helm_robe_raidwarlock_j_01","screenshot":580930,"jsonequip":{"appearances":{"0":[100224,""]},"armor":262,"classes":16,"critstrkrtng":980,"displayid":100224,"dura":120,"hastertng":735,"int":2382,"reqlevel":101,"sellprice":653364,"slotbak":1,"sta":3573},"attainable":0,"flags2":12352}, +{"item_id": 133973, "name_eses":"Toque doloroso de las gemelas","quality":5,"icon":"inv_ringwod_d4_2","screenshot":0,"jsonequip":{"appearances":{"0":[0,""]},"classes":16,"critstrkrtng":1781,"hastertng":1336,"nsockets":1,"reqlevel":101,"sellprice":552883,"slotbak":11,"socket1":7,"sta":2010},"attainable":0,"flags2":12352}, +{"item_id": 133974, "name_eses":"Lamento de Lana'thel","quality":5,"icon":"inv_jewelry_ring_118","screenshot":0,"jsonequip":{"appearances":{"0":[0,""]},"classes":32,"hastertng":2004,"nsockets":1,"reqlevel":101,"sellprice":554954,"slotbak":11,"socket1":7,"sta":2010,"versatility":1114},"attainable":0,"flags2":12352}, +{"item_id": 133976, "name_eses":"Cinidaria, la Simbionte","quality":5,"icon":"inv_leather_raiddruid_m_01belt","screenshot":562943,"jsonequip":{"agi":1786,"agiint":1786,"appearances":{"0":[118745,""]},"armor":226,"classes":3592,"critstrkrtng":827,"displayid":118745,"dura":70,"int":1786,"mastrtng":459,"reqlevel":101,"sellprice":447369,"slotbak":6,"sta":2680},"attainable":0,"flags2":12352}, +{"item_id": 133977, "name_eses":"Batalla final de Belo'vir","quality":5,"icon":"inv_chest_cloth_80","screenshot":0,"jsonequip":{"appearances":{"0":[64162,""]},"armor":322,"classes":128,"critstrkrtng":980,"displayid":64162,"dura":200,"hastertng":735,"int":2382,"mastrtng":588,"reqlevel":101,"sellprice":893040,"slotbak":20,"sta":3573},"attainable":0,"flags2":12352}, +{"item_id": 137014, "name_eses":"Achor, el hambre eterna","quality":5,"icon":"inv_chest_mail_raidhuntermythic_p_01","screenshot":595607,"jsonequip":{"agi":2382,"agiint":2382,"appearances":{"0":[55355,"inv_chest_leather_05"]},"armor":402,"classes":2048,"critstrkrtng":735,"displayid":55355,"dura":200,"hastertng":980,"int":2382,"mastrtng":588,"reqlevel":101,"sellprice":937519,"slotbak":5,"sta":3573},"attainable":0,"flags2":12352}, +{"item_id": 137015, "name_eses":"Ekowraith, Creador de Mundos","quality":5,"icon":"inv_chest_leather_13","screenshot":601489,"jsonequip":{"agi":2382,"agiint":2382,"appearances":{"0":[142390,"inv_chest_plate_raiddeathknightmythic_p_01"]},"armor":402,"classes":1024,"critstrkrtng":612,"displayid":142390,"dura":200,"hastertng":588,"int":2382,"mastrtng":1103,"reqlevel":101,"sellprice":940905,"slotbak":5,"sta":3573},"attainable":0,"flags2":12352}, +{"item_id": 137016, "name_eses":"Guerrera perdida de Sal'salabim","quality":5,"icon":"inv_chest_leather_raidrogue_j_01","screenshot":572610,"jsonequip":{"agi":2382,"agiint":2382,"appearances":{"0":[137077,"inv_chest_leather_pvpmonk_o_01"]},"armor":402,"classes":512,"displayid":137077,"dura":200,"hastertng":980,"int":2382,"mastrtng":735,"reqlevel":101,"sellprice":944291,"slotbak":5,"sta":3573},"attainable":0,"flags2":12352}, +{"item_id": 137017, "name_eses":"Coraza de la Val'kyr dorada","quality":5,"icon":"inv_chest_plate_panda_b_01gold","screenshot":0,"jsonequip":{"appearances":{"0":[46080,"inv_chest_plate05"]},"armor":779,"classes":2,"displayid":46080,"dura":200,"hastertng":1103,"int":2382,"reqlevel":101,"sellprice":947586,"slotbak":5,"sta":3573,"str":2382,"strint":2382,"versatility":612},"attainable":0,"flags2":12352}, +{"item_id": 137018, "name_eses":"Impulsor del destino","quality":5,"icon":"inv_chest_plate_pvpwarrior_c_01","screenshot":0,"jsonequip":{"appearances":{"0":[52643,"inv_chest_plate07"]},"armor":779,"classes":1,"displayid":52643,"dura":200,"hastertng":1103,"mastrtng":612,"reqlevel":101,"sellprice":950972,"slotbak":5,"sta":3573,"str":2382},"attainable":0,"flags2":12352}, +{"item_id": 137019, "name_eses":"Cenedril, Reflejo de odio","quality":5,"icon":"inv_cape_pandaria_b_02","screenshot":0,"jsonequip":{"agi":1340,"agiint":1340,"appearances":{"0":[113025,""]},"armor":161,"classes":512,"displayid":113025,"hastertng":620,"int":1340,"mastrtng":344,"reqlevel":101,"sellprice":714405,"slotbak":16,"sta":2010},"attainable":0,"flags2":12352}, +{"item_id": 137020, "name_eses":"Susurro de los Nathrezim","quality":5,"icon":"inv_cape_pandaria_d_04","screenshot":592518,"jsonequip":{"appearances":{"0":[111849,""]},"armor":161,"classes":2,"critstrkrtng":620,"displayid":111849,"hastertng":344,"int":1340,"reqlevel":101,"sellprice":666449,"slotbak":16,"sta":2010,"str":1340,"strint":1340},"attainable":0,"flags2":12352}, +{"item_id": 137021, "name_eses":"Enga\u00f1o del Se\u00f1or del Terror","quality":5,"icon":"inv_cape_pandaria_d_03","screenshot":0,"jsonequip":{"agi":1340,"appearances":{"0":[117009,""]},"armor":161,"classes":8,"critstrkrtng":551,"displayid":117009,"mastrtng":413,"reqlevel":101,"sellprice":668984,"slotbak":16,"sta":2010},"attainable":0,"flags2":12352}, +{"item_id": 137022, "name_eses":"Sacrificio de Loramus Thalimedes","quality":5,"icon":"inv_boot_leather_raiddruid_k_01","screenshot":594209,"jsonequip":{"agi":1786,"appearances":{"0":[103226,""]},"armor":276,"classes":2048,"critstrkrtng":459,"displayid":103226,"dura":95,"hastertng":827,"reqlevel":101,"sellprice":671519,"slotbak":8,"sta":2680},"attainable":0,"flags2":12352}, +{"item_id": 137023, "name_eses":"Promesa de Elune, diosa de la luna","quality":5,"icon":"inv_boots_leather_raiddruid_j_01","screenshot":0,"jsonequip":{"agi":1786,"agiint":1786,"appearances":{"0":[99921,""]},"armor":276,"classes":1024,"displayid":99921,"dura":95,"hastertng":735,"int":1786,"mastrtng":551,"reqlevel":101,"sellprice":674053,"slotbak":8,"sta":2680},"attainable":0,"flags2":12352}, +{"item_id": 137024, "name_eses":"Abalanzadores Ailuro","quality":5,"icon":"inv_boots_leather_05red","screenshot":0,"jsonequip":{"agi":1786,"agiint":1786,"appearances":{"0":[65681,"inv_boots_leather_8"]},"armor":276,"classes":1024,"critstrkrtng":827,"displayid":65681,"dura":95,"hastertng":459,"int":1786,"reqlevel":101,"sellprice":676520,"slotbak":8,"sta":2680},"attainable":0,"flags2":12352}, +{"item_id": 137025, "name_eses":"Resistencia de Skysec","quality":5,"icon":"inv_boots_mail_02","screenshot":0,"jsonequip":{"agi":1786,"agiint":1786,"appearances":{"0":[96766,"inv_boots_cloth_07"]},"armor":276,"classes":1024,"displayid":96766,"dura":95,"int":1786,"mastrtng":827,"reqlevel":101,"sellprice":679055,"slotbak":8,"sta":2680,"versatility":459},"attainable":0,"flags2":12352}, +{"item_id": 137026, "name_eses":"Esencia de infusi\u00f3n","quality":5,"icon":"inv_boots_leather_10v3","screenshot":0,"jsonequip":{"agi":1786,"agiint":1786,"appearances":{"0":[141429,"inv_boot_leather_raiddruid_p_01"]},"armor":276,"classes":1024,"displayid":141429,"dura":95,"hastertng":827,"int":1786,"mastrtng":459,"reqlevel":101,"sellprice":681589,"slotbak":8,"sta":2680},"attainable":0,"flags2":12352}, +{"item_id": 137027, "name_eses":"Botas de piedra \u00edgnea","quality":5,"icon":"inv_boots_leather_13v1","screenshot":0,"jsonequip":{"agi":1786,"agiint":1786,"appearances":{"0":[120284,"inv_boot_leather_raidmonk_m_01"]},"armor":276,"classes":512,"critstrkrtng":827,"displayid":120284,"dura":95,"hastertng":459,"int":1786,"reqlevel":101,"sellprice":684124,"slotbak":8,"sta":2680},"attainable":0,"flags2":12352}, +{"item_id": 137028, "name_eses":"Ei'thas, deslizadores lunares de Eramas","quality":5,"icon":"inv_boots_mail_04black","screenshot":0,"jsonequip":{"agi":1786,"agiint":1786,"appearances":{"0":[107658,"inv_boots_leather_panda_b_01dark"]},"armor":276,"classes":512,"critstrkrtng":735,"displayid":107658,"dura":95,"int":1786,"mastrtng":551,"reqlevel":101,"sellprice":686591,"slotbak":8,"sta":2680},"attainable":0,"flags2":12352}, +{"item_id": 137029, "name_eses":"Eclipse de Katsuo","quality":5,"icon":"inv_boots_cloth_33v4","screenshot":0,"jsonequip":{"agi":1786,"agiint":1786,"appearances":{"0":[42961,"inv_boots_05"]},"armor":276,"classes":512,"displayid":42961,"dura":95,"hastertng":735,"int":1786,"mastrtng":551,"reqlevel":101,"sellprice":689125,"slotbak":8,"sta":2680},"attainable":0,"flags2":12352}, +{"item_id": 137030, "name_eses":"Escarpines de caminocaso","quality":5,"icon":"inv_boots_leather_8","screenshot":0,"jsonequip":{"agi":1786,"appearances":{"0":[98421,""]},"armor":276,"classes":8,"displayid":98421,"dura":95,"hastertng":735,"mastrtng":551,"reqlevel":101,"sellprice":691660,"slotbak":8,"sta":2680},"attainable":0,"flags2":12352}, +{"item_id": 137031, "name_eses":"Botines astutos de Thraxi","quality":5,"icon":"inv_boots_leather_03a","screenshot":0,"jsonequip":{"agi":1786,"appearances":{"0":[2990,"inv_boots_cloth_05"]},"armor":276,"classes":8,"critstrkrtng":827,"displayid":2990,"dura":95,"mastrtng":459,"reqlevel":101,"sellprice":694195,"slotbak":8,"sta":2680},"attainable":0,"flags2":12352}, +{"item_id": 137032, "name_eses":"Andar del s\u00e1tiro de las Sombras","quality":5,"icon":"inv_boots_mail_dungeonmail_c_04","screenshot":0,"jsonequip":{"agi":1786,"appearances":{"0":[97910,"inv_boots_leather01"]},"armor":276,"classes":8,"displayid":97910,"dura":95,"hastertng":827,"mastrtng":459,"reqlevel":101,"sellprice":696661,"slotbak":8,"sta":2680},"attainable":0,"flags2":12352}, +{"item_id": 137033, "name_eses":"Zapatos para la nieve con plumas de Ullr","quality":5,"icon":"inv_boots_mail_08","screenshot":589809,"jsonequip":{"agi":1786,"appearances":{"0":[65461,""]},"armor":343,"classes":4,"critstrkrtng":735,"displayid":65461,"dura":95,"mastrtng":551,"reqlevel":101,"sellprice":699196,"slotbak":8,"sta":2680},"attainable":0,"flags2":12352}, +{"item_id": 137034, "name_eses":"Botines atrapadores de Nesingwary","quality":5,"icon":"inv_boots_mail_panda_b_02","screenshot":592315,"jsonequip":{"agi":1786,"appearances":{"0":[45098,"inv_boots_chain_12"]},"armor":343,"classes":4,"displayid":45098,"dura":95,"hastertng":459,"mastrtng":827,"reqlevel":101,"sellprice":701731,"slotbak":8,"sta":2680},"attainable":0,"flags2":12352}, +{"item_id": 137035, "name_eses":"Pacto de sangre del Impostor","quality":5,"icon":"inv_boots_chain_07","screenshot":0,"jsonequip":{"agi":1786,"agiint":1786,"appearances":{"0":[104107,""]},"armor":343,"classes":64,"critstrkrtng":827,"displayid":104107,"dura":95,"hastertng":459,"int":1786,"reqlevel":101,"sellprice":704197,"slotbak":8,"sta":2680},"attainable":0,"flags2":12352}, +{"item_id": 137036, "name_eses":"Restabilizadores elementales","quality":5,"icon":"inv_boots_mail_raidshaman_j_01","screenshot":0,"jsonequip":{"agi":1786,"agiint":1786,"appearances":{"0":[100183,""]},"armor":343,"classes":64,"displayid":100183,"dura":95,"hastertng":459,"int":1786,"mastrtng":827,"reqlevel":101,"sellprice":656310,"slotbak":8,"sta":2680},"attainable":0,"flags2":12352}, +{"item_id": 137037, "name_eses":"Uvanimor, el Horripilante","quality":5,"icon":"inv_jewelry_ring_121","screenshot":0,"jsonequip":{"appearances":{"0":[0,""]},"classes":32,"hastertng":1781,"mastrtng":1336,"nsockets":1,"reqlevel":101,"sellprice":553228,"slotbak":11,"socket1":7,"sta":2010},"attainable":0,"flags2":12352}, +{"item_id": 137038, "name_eses":"Inquina de los semigigantes","quality":5,"icon":"inv_60pvp_ring1a","screenshot":0,"jsonequip":{"appearances":{"0":[0,""]},"classes":2048,"critstrkrtng":2004,"hastertng":1114,"nsockets":1,"reqlevel":101,"sellprice":555357,"slotbak":11,"socket1":7,"sta":2010},"attainable":0,"flags2":12352}, +{"item_id": 137039, "name_eses":"Esencia vil impecable","quality":5,"icon":"inv_misc_ring_mop13","screenshot":0,"jsonequip":{"appearances":{"0":[0,""]},"classes":1024,"hastertng":2004,"mastrtng":1114,"nsockets":1,"reqlevel":101,"sellprice":557428,"slotbak":11,"socket1":7,"sta":2010},"attainable":0,"flags2":12352}, +{"item_id": 137040, "name_eses":"Sello titilador","quality":5,"icon":"inv_misc_ring_firelands_2","screenshot":0,"jsonequip":{"appearances":{"0":[0,""]},"classes":1024,"critstrkrtng":1781,"hastertng":1336,"nsockets":1,"reqlevel":101,"sellprice":559556,"slotbak":11,"socket1":7,"sta":2010},"attainable":0,"flags2":12352}, +{"item_id": 137041, "name_eses":"Determinaci\u00f3n dual","quality":5,"icon":"inv_6_2raid_ring_4b","screenshot":0,"jsonequip":{"appearances":{"0":[0,""]},"classes":1024,"critstrkrtng":2004,"mastrtng":1114,"nsockets":1,"reqlevel":101,"sellprice":561685,"slotbak":11,"socket1":7,"sta":2010},"attainable":0,"flags2":12352}, +{"item_id": 137042, "name_eses":"Piedra lacrimal de Elune","quality":5,"icon":"inv_misc_pearlring2","screenshot":0,"jsonequip":{"appearances":{"0":[0,""]},"classes":1024,"hastertng":2004,"mastrtng":1114,"nsockets":1,"reqlevel":101,"sellprice":563813,"slotbak":11,"socket1":7,"sta":2010},"attainable":0,"flags2":12352}, +{"item_id": 137043, "name_eses":"Trampa para dedos de Frizzo","quality":5,"icon":"inv_archaeology_ogres_sorcerer_king_toe_ring","screenshot":0,"jsonequip":{"appearances":{"0":[0,""]},"classes":4,"hastertng":2004,"mastrtng":1114,"nsockets":1,"reqlevel":101,"sellprice":565884,"slotbak":11,"socket1":7,"sta":2010},"attainable":0,"flags2":12352}, +{"item_id": 137044, "name_eses":"Joya de la Abad\u00eda Perdida","quality":5,"icon":"inv_jewelry_ring_138","screenshot":0,"jsonequip":{"appearances":{"0":[0,""]},"classes":512,"critstrkrtng":1781,"mastrtng":1336,"nsockets":1,"reqlevel":101,"sellprice":568013,"slotbak":11,"socket1":7,"sta":2010},"attainable":0,"flags2":12352}, +{"item_id": 137045, "name_eses":"Ojo de Collidus el Vig\u00eda","quality":5,"icon":"inv_jewelry_ring_45","screenshot":0,"jsonequip":{"appearances":{"0":[0,""]},"classes":512,"hastertng":1781,"mastrtng":1336,"nsockets":1,"reqlevel":101,"sellprice":570141,"slotbak":11,"socket1":7,"sta":2010},"attainable":0,"flags2":12352}, +{"item_id": 137046, "name_eses":"Ilterendi, joya de la corona de Lunargenta","quality":5,"icon":"inv_jewelry_ring_firelandsraid_03a","screenshot":0,"jsonequip":{"appearances":{"0":[0,""]},"classes":2,"critstrkrtng":1781,"mastrtng":1336,"nsockets":1,"reqlevel":101,"sellprice":572269,"slotbak":11,"socket1":7,"sta":2010},"attainable":0,"flags2":12352}, +{"item_id": 137047, "name_eses":"Inmortalidad de Riscop\u00e1ramo","quality":5,"icon":"inv_jewelry_ring_72","screenshot":0,"jsonequip":{"appearances":{"0":[0,""]},"classes":2,"hastertng":1781,"mastrtng":1336,"nsockets":1,"reqlevel":101,"sellprice":574340,"slotbak":11,"socket1":7,"sta":2010},"attainable":0,"flags2":12352}, +{"item_id": 137048, "name_eses":"Furia desatada de Liadrin","quality":5,"icon":"inv_jewelry_ring_61","screenshot":0,"jsonequip":{"appearances":{"0":[0,""]},"classes":2,"critstrkrtng":1781,"hastertng":1336,"nsockets":1,"reqlevel":101,"sellprice":576469,"slotbak":11,"socket1":7,"sta":2010},"attainable":0,"flags2":12352}, +{"item_id": 137049, "name_eses":"Insignia de Ravenholdt","quality":5,"icon":"inv_misc_epicring_a2","screenshot":0,"jsonequip":{"appearances":{"0":[0,""]},"classes":8,"critstrkrtng":2004,"hastertng":1114,"nsockets":1,"reqlevel":101,"sellprice":578597,"slotbak":11,"socket1":7,"sta":2010},"attainable":0,"flags2":12352}, +{"item_id": 137050, "name_eses":"Ojo del Vac\u00edo Abisal","quality":5,"icon":"inv_jewelry_ring_ahnqiraj_02","screenshot":0,"jsonequip":{"appearances":{"0":[0,""]},"classes":64,"hastertng":2004,"mastrtng":1114,"nsockets":1,"reqlevel":101,"sellprice":580668,"slotbak":11,"socket1":7,"sta":2010},"attainable":0,"flags2":12352}, +{"item_id": 137051, "name_eses":"Enfocador de Jonat, el Ancestro","quality":5,"icon":"inv_jewelry_ring_96","screenshot":0,"jsonequip":{"appearances":{"0":[0,""]},"classes":64,"critstrkrtng":2004,"hastertng":1114,"nsockets":1,"reqlevel":101,"sellprice":582797,"slotbak":11,"socket1":7,"sta":2010},"attainable":0,"flags2":12352}, +{"item_id": 137052, "name_eses":"Coraz\u00f3n de piedra de Ayala","quality":5,"icon":"inv_misc_ring_firelands_1","screenshot":0,"jsonequip":{"appearances":{"0":[0,""]},"classes":1,"critstrkrtng":1781,"mastrtng":1336,"nsockets":1,"reqlevel":101,"sellprice":584925,"slotbak":11,"socket1":7,"sta":2010},"attainable":0,"flags2":12352}, +{"item_id": 137053, "name_eses":"Kazzalax, Furia de Fujieda","quality":5,"icon":"inv_cape_pandaria_c_04","screenshot":0,"jsonequip":{"appearances":{"0":[117035,""]},"armor":161,"classes":1,"critstrkrtng":551,"displayid":117035,"mastrtng":413,"reqlevel":101,"sellprice":717282,"slotbak":16,"sta":2010,"str":1340},"attainable":0,"flags2":12352}, +{"item_id": 137054, "name_eses":"Ca\u00edda de los muros","quality":5,"icon":"inv_jewelry_ring_142","screenshot":0,"jsonequip":{"appearances":{"0":[0,""]},"classes":1,"critstrkrtng":1781,"hastertng":1336,"nsockets":1,"reqlevel":101,"sellprice":546785,"slotbak":11,"socket1":7,"sta":2010},"attainable":0,"flags2":12352}, +{"item_id": 137055, "name_eses":"Hambre de Zevrim","quality":5,"icon":"inv_jewelry_ring_36","screenshot":0,"jsonequip":{"appearances":{"0":[0,""]},"classes":4,"critstrkrtng":2004,"mastrtng":1114,"nsockets":1,"reqlevel":101,"sellprice":548914,"slotbak":11,"socket1":7,"sta":2010},"attainable":0,"flags2":12352}, +{"item_id": 137056, "name_eses":"Envolturas de lufa","quality":5,"icon":"inv_bracer_cloth_raidpriest_o_01","screenshot":0,"jsonequip":{"agi":1340,"agiint":1340,"appearances":{"0":[141438,"inv_bracer_leather_raiddruid_p_01"]},"armor":176,"classes":1024,"critstrkrtng":413,"displayid":141438,"dura":70,"hastertng":551,"int":1340,"reqlevel":101,"sellprice":440834,"slotbak":9,"sta":2010},"attainable":0,"flags2":12352}, +{"item_id": 137057, "name_eses":"Toque prohibido del maestro oculto","quality":5,"icon":"inv_gauntlet_leather_raidrogue_j_01","screenshot":0,"jsonequip":{"agi":1786,"agiint":1786,"appearances":{"0":[99233,""]},"armor":251,"classes":512,"displayid":99233,"dura":70,"hastertng":551,"int":1786,"mastrtng":735,"reqlevel":101,"sellprice":442537,"slotbak":10,"sta":2680},"attainable":0,"flags2":12352}, +{"item_id": 137058, "name_eses":"Clamamareas del pretoriano","quality":5,"icon":"inv_gauntlets_plate_raidpaladin_i_01","screenshot":0,"jsonequip":{"agi":1786,"agiint":1786,"appearances":{"0":[51584,"inv_gauntlets_26"]},"armor":312,"classes":64,"displayid":51584,"dura":70,"hastertng":735,"int":1786,"mastrtng":551,"reqlevel":101,"sellprice":444193,"slotbak":10,"sta":2680},"attainable":0,"flags2":12352}, +{"item_id": 137059, "name_eses":"Mano de fe de Tyr","quality":5,"icon":"inv_glove_plate_panda_b_01blue","screenshot":563942,"jsonequip":{"appearances":{"0":[23404,"inv_gauntlets_28"]},"armor":487,"classes":2,"critstrkrtng":827,"displayid":23404,"dura":70,"hastertng":459,"int":1786,"reqlevel":101,"sellprice":445896,"slotbak":10,"sta":2680,"str":1786,"strint":1786},"attainable":0,"flags2":12352}, +{"item_id": 137060, "name_eses":"Mano dura de Archavon","quality":5,"icon":"inv_gloves_plate_raidwarrior_m_01","screenshot":570642,"jsonequip":{"appearances":{"0":[119967,""]},"armor":487,"classes":1,"critstrkrtng":551,"displayid":119967,"dura":70,"hastertng":735,"reqlevel":101,"sellprice":447599,"slotbak":10,"sta":2680,"str":1786},"attainable":0,"flags2":12352}, +{"item_id": 137061, "name_eses":"Ojos torrenciales de Raddon","quality":5,"icon":"inv_misc_bandana_01","screenshot":563387,"jsonequip":{"agi":2382,"appearances":{"0":[97270,"inv_misc_bandana_03"]},"armor":326,"classes":2048,"critstrkrtng":980,"displayid":97270,"dura":120,"hastertng":735,"reqlevel":101,"sellprice":668847,"slotbak":1,"sta":3573},"attainable":0,"flags2":12352}, +{"item_id": 137062, "name_eses":"El atrapasue\u00f1os esmeralda","quality":5,"icon":"inv_helmet_81","screenshot":635916,"jsonequip":{"agi":2382,"agiint":2382,"appearances":{"0":[97037,""]},"armor":326,"classes":1024,"critstrkrtng":612,"displayid":97037,"dura":120,"int":2382,"mastrtng":1103,"reqlevel":101,"sellprice":671313,"slotbak":1,"sta":3573},"attainable":0,"flags2":12352}, +{"item_id": 137063, "name_eses":"Observaci\u00f3n fundamental","quality":5,"icon":"inv_helmet_cloth_pvpmage_c_02","screenshot":0,"jsonequip":{"agi":2382,"agiint":2382,"appearances":{"0":[115132,"inv_helm_leather_challengemonk_d_01"]},"armor":326,"classes":512,"critstrkrtng":612,"displayid":115132,"dura":120,"int":2382,"mastrtng":1103,"reqlevel":101,"sellprice":673848,"slotbak":1,"sta":3573},"attainable":0,"flags2":12352}, +{"item_id": 137064, "name_eses":"M\u00e1scara vud\u00fa de cazador de las Sombras","quality":5,"icon":"inv_helmet_116","screenshot":605356,"jsonequip":{"agi":2382,"appearances":{"0":[47037,""]},"armor":405,"classes":4,"critstrkrtng":588,"displayid":47037,"dura":120,"hastertng":612,"mastrtng":1103,"reqlevel":101,"sellprice":676383,"slotbak":1,"sta":3573},"attainable":0,"flags2":12352}, +{"item_id": 137065, "name_eses":"Mirada de la justicia","quality":5,"icon":"inv_helmet_134","screenshot":0,"jsonequip":{"appearances":{"0":[52642,""]},"armor":633,"classes":2,"displayid":52642,"dura":120,"hastertng":980,"int":2382,"mastrtng":735,"reqlevel":101,"sellprice":678918,"slotbak":1,"sta":3573,"str":2382,"strint":2382},"attainable":0,"flags2":12352}, +{"item_id": 137066, "name_eses":"Capa de llamas viles","quality":5,"icon":"inv_misc_cape_09","screenshot":562203,"jsonequip":{"agi":1340,"appearances":{"0":[45339,"inv_misc_cape_15"]},"armor":161,"classes":2048,"displayid":45339,"hastertng":551,"reqlevel":101,"sellprice":681384,"slotbak":16,"sta":2010,"versatility":413},"attainable":0,"flags2":12352}, +{"item_id": 137067, "name_eses":"Encierro eterno de Elize","quality":5,"icon":"inv_pants_leather_panda_b_02","screenshot":568781,"jsonequip":{"agi":2382,"agiint":2382,"appearances":{"0":[107403,""]},"armor":352,"classes":1024,"critstrkrtng":980,"displayid":107403,"dura":145,"int":2382,"mastrtng":735,"reqlevel":101,"sellprice":913632,"slotbak":7,"sta":3573},"attainable":0,"flags2":12352}, +{"item_id": 137068, "name_eses":"Leotardos de la Llama Negra","quality":5,"icon":"inv_pants_leather_27","screenshot":0,"jsonequip":{"agi":2382,"agiint":2382,"appearances":{"0":[54184,""]},"armor":352,"classes":512,"critstrkrtng":1103,"displayid":54184,"dura":145,"hastertng":612,"int":2382,"reqlevel":101,"sellprice":917018,"slotbak":7,"sta":3573},"attainable":0,"flags2":12352}, +{"item_id": 137069, "name_eses":"Voluntad de Valeera","quality":5,"icon":"inv_pants_cloth_02","screenshot":629732,"jsonequip":{"agi":2382,"appearances":{"0":[9266,"inv_pants_06"]},"armor":352,"classes":8,"critstrkrtng":980,"displayid":9266,"dura":145,"hastertng":735,"mastrtng":588,"reqlevel":101,"sellprice":944565,"slotbak":7,"sta":3573},"attainable":0,"flags2":12352}, +{"item_id": 137070, "name_eses":"Tyelca, talla de Ferren Marcus","quality":5,"icon":"inv_pants_plate_raidwarrior_n_01","screenshot":0,"jsonequip":{"appearances":{"0":[126322,""]},"armor":682,"classes":2,"critstrkrtng":735,"displayid":126322,"dura":145,"int":2382,"mastrtng":980,"reqlevel":101,"sellprice":947952,"slotbak":7,"sta":3573,"str":2382,"strint":2382},"attainable":0,"flags2":12352}, +{"item_id": 137071, "name_eses":"Espaldares de maestro de runas","quality":5,"icon":"inv_shoulder_105","screenshot":0,"jsonequip":{"agi":1786,"appearances":{"0":[66091,""]},"armor":301,"classes":2048,"critstrkrtng":827,"displayid":66091,"dura":120,"hastertng":459,"reqlevel":101,"sellprice":712144,"slotbak":3,"sta":2680},"attainable":0,"flags2":12352}, +{"item_id": 137072, "name_eses":"Sabidur\u00eda de Aman'thul","quality":5,"icon":"inv_shoulder_leather_raidmonk_n_01","screenshot":0,"jsonequip":{"agi":1786,"agiint":1786,"appearances":{"0":[126807,""]},"armor":301,"classes":1024,"critstrkrtng":551,"displayid":126807,"dura":120,"int":1786,"mastrtng":735,"reqlevel":101,"sellprice":714679,"slotbak":3,"sta":2680},"attainable":0,"flags2":12352}, +{"item_id": 137073, "name_eses":"Bufas simult\u00e1neas","quality":5,"icon":"inv_shoulder_leather_legionquest100_b_01","screenshot":0,"jsonequip":{"agi":1786,"agiint":1786,"appearances":{"0":[143674,""]},"armor":301,"classes":512,"displayid":143674,"dura":120,"hastertng":827,"int":1786,"mastrtng":459,"reqlevel":101,"sellprice":717145,"slotbak":3,"sta":2680},"attainable":0,"flags2":12352}, +{"item_id": 137074, "name_eses":"Ecos del Gran Cataclismo","quality":5,"icon":"inv_shoulder_plate_raidwarrior_j_01","screenshot":0,"jsonequip":{"agi":1786,"agiint":1786,"appearances":{"0":[42910,"inv_shoulder_23"]},"armor":374,"classes":64,"displayid":42910,"dura":120,"hastertng":551,"int":1786,"mastrtng":735,"reqlevel":101,"sellprice":651103,"slotbak":3,"sta":2680},"attainable":0,"flags2":12352}, +{"item_id": 137075, "name_eses":"Hombreras de Tak'theritrix","quality":5,"icon":"inv_shoulder_plate_deathknight_m_01","screenshot":0,"jsonequip":{"appearances":{"0":[120812,""]},"armor":585,"classes":32,"displayid":120812,"dura":120,"hastertng":551,"mastrtng":735,"reqlevel":101,"sellprice":653638,"slotbak":3,"sta":2680,"str":1786},"attainable":0,"flags2":12352}, +{"item_id": 137076, "name_eses":"Bufas de piedra de obsidiana","quality":5,"icon":"inv_shoulder_plate_pvppaladin_o_01","screenshot":574883,"jsonequip":{"appearances":{"0":[136471,""]},"armor":585,"classes":2,"critstrkrtng":827,"displayid":136471,"dura":120,"hastertng":459,"int":1786,"reqlevel":101,"sellprice":656173,"slotbak":3,"sta":2680,"str":1786,"strint":1786},"attainable":0,"flags2":12352}, +{"item_id": 137077, "name_eses":"Peso de la tierra","quality":5,"icon":"inv_pants_plate_pvpdeathknight_f_01","screenshot":0,"jsonequip":{"appearances":{"0":[59697,"inv_pants_plate_25"]},"armor":682,"classes":1,"critstrkrtng":1103,"displayid":59697,"dura":145,"mastrtng":612,"reqlevel":101,"sellprice":879862,"slotbak":7,"sta":3573,"str":2382},"attainable":0,"flags2":12352}, +{"item_id": 137078, "name_eses":"Consejo del tit\u00e1n oscuro","quality":5,"icon":"inv_belt_leather_raidrogue_l_01","screenshot":0,"jsonequip":{"agi":1786,"agiint":1786,"appearances":{"0":[112762,""]},"armor":226,"classes":1024,"critstrkrtng":735,"displayid":112762,"dura":70,"hastertng":551,"int":1786,"reqlevel":101,"sellprice":444147,"slotbak":6,"sta":2680},"attainable":0,"flags2":12352}, +{"item_id": 137079, "name_eses":"Faj\u00edn reconfortante de Gai Plin","quality":5,"icon":"inv_belt_49","screenshot":0,"jsonequip":{"agi":1786,"agiint":1786,"appearances":{"0":[54792,"inv_belt_15"]},"armor":226,"classes":512,"displayid":54792,"dura":70,"int":1786,"mastrtng":827,"reqlevel":101,"sellprice":445850,"slotbak":6,"sta":2680,"versatility":459},"attainable":0,"flags2":12352}, +{"item_id": 137080, "name_eses":"Rugido de los siete leones","quality":5,"icon":"inv_belt_plate_pvpdeathknight_c_02","screenshot":592313,"jsonequip":{"agi":1786,"appearances":{"0":[101744,"inv_belt_48c"]},"armor":281,"classes":4,"displayid":101744,"dura":70,"hastertng":735,"mastrtng":551,"reqlevel":101,"sellprice":447553,"slotbak":6,"sta":2680},"attainable":0,"flags2":12352}, +{"item_id": 137081, "name_eses":"Cintur\u00f3n de guerra del ej\u00e9rcito de los centinelas","quality":5,"icon":"inv_belt_66green","screenshot":592311,"jsonequip":{"agi":1786,"appearances":{"0":[63494,"inv_belt_60"]},"armor":281,"classes":4,"displayid":63494,"dura":70,"hastertng":735,"mastrtng":551,"reqlevel":101,"sellprice":449210,"slotbak":6,"sta":2680},"attainable":0,"flags2":12352}, +{"item_id": 137082, "name_eses":"Salinfierno, cuerda del merodeador de la bruma","quality":5,"icon":"inv_belt_mail_draenordungeon_c_01","screenshot":592317,"jsonequip":{"agi":1786,"appearances":{"0":[30054,"inv_belt_18"]},"armor":281,"classes":4,"critstrkrtng":735,"displayid":30054,"dura":70,"hastertng":551,"reqlevel":101,"sellprice":450912,"slotbak":6,"sta":2680},"attainable":0,"flags2":12352}, +{"item_id": 137083, "name_eses":"Faja de protoescama pr\u00edstina","quality":5,"icon":"inv_belt_mail_panda_b_01white","screenshot":0,"jsonequip":{"agi":1786,"agiint":1786,"appearances":{"0":[113740,""]},"armor":281,"classes":64,"critstrkrtng":735,"displayid":113740,"dura":70,"int":1786,"mastrtng":551,"reqlevel":101,"sellprice":452615,"slotbak":6,"sta":2680},"attainable":0,"flags2":12352}, +{"item_id": 137084, "name_eses":"Justicia absoluta de Akainu","quality":5,"icon":"inv_bracer_mail_pvphunter_c_02","screenshot":0,"jsonequip":{"agi":1340,"agiint":1340,"appearances":{"0":[100189,""]},"armor":218,"classes":64,"critstrkrtng":620,"displayid":100189,"dura":70,"int":1340,"mastrtng":344,"reqlevel":101,"sellprice":454272,"slotbak":9,"sta":2010},"attainable":0,"flags2":12352}, +{"item_id": 137085, "name_eses":"Muda intacta de Nazjatar","quality":5,"icon":"inv_leather_raiddruid_m_01belt","screenshot":0,"jsonequip":{"agi":1786,"agiint":1786,"appearances":{"0":[7807,"inv_belt_24"]},"armor":281,"classes":64,"critstrkrtng":827,"displayid":7807,"dura":70,"hastertng":459,"int":1786,"reqlevel":101,"sellprice":468170,"slotbak":6,"sta":2680},"attainable":0,"flags2":12352}, +{"item_id": 137086, "name_eses":"Cadena de Thrayn","quality":5,"icon":"inv_belt_leather_firelandsdruid_d_01","screenshot":0,"jsonequip":{"appearances":{"0":[46048,"inv_belt_20"]},"armor":438,"classes":2,"critstrkrtng":459,"displayid":46048,"dura":70,"hastertng":827,"int":1786,"reqlevel":101,"sellprice":469873,"slotbak":6,"sta":2680,"str":1786,"strint":1786},"attainable":0,"flags2":12352}, +{"item_id": 137087, "name_eses":"V\u00e9rtebras de Naj'entus","quality":5,"icon":"inv_misc_bone_03","screenshot":610643,"jsonequip":{"appearances":{"0":[144706,"inv_belt_plate_legionquest100_b_01"]},"armor":438,"classes":1,"critstrkrtng":459,"displayid":144706,"dura":70,"mastrtng":827,"reqlevel":101,"sellprice":471576,"slotbak":6,"sta":2680,"str":1786},"attainable":0,"flags2":12352}, +{"item_id": 137088, "name_eses":"Destrero Ceann-Ar","quality":5,"icon":"inv_helm_leather_pvpdruid_g_01","screenshot":0,"jsonequip":{"appearances":{"0":[97088,"inv_helmet_03"]},"armor":633,"classes":1,"displayid":97088,"dura":120,"hastertng":1103,"mastrtng":612,"reqlevel":101,"sellprice":704471,"slotbak":1,"sta":3573,"str":2382},"attainable":0,"flags2":12352}, +{"item_id": 137089, "name_eses":"Vigor del dios del Trueno","quality":5,"icon":"inv_belt_plate_raiddeathknight_j_01","screenshot":0,"jsonequip":{"appearances":{"0":[99614,""]},"armor":438,"classes":1,"displayid":99614,"dura":70,"hastertng":827,"reqlevel":101,"sellprice":474935,"slotbak":6,"sta":2680,"str":1786,"versatility":459},"attainable":0,"flags2":12352}, +{"item_id": 137090, "name_eses":"Estabilizadores bi\u00f3nicos Mo'arg","quality":5,"icon":"inv_plate_raiddeathknightmythic_o_01bracer","screenshot":604275,"jsonequip":{"agi":1340,"appearances":{"0":[125796,"inv_bracer_leather_raidrogue_n_01"]},"armor":176,"classes":2048,"critstrkrtng":620,"displayid":125796,"dura":70,"mastrtng":344,"reqlevel":101,"sellprice":476638,"slotbak":9,"sta":2010},"attainable":0,"flags2":12352}, +{"item_id": 137091, "name_eses":"Avambrazos perdidos del Rapi\u00f1ador","quality":5,"icon":"inv_bracer_plate_pvpdeathknight_c_02","screenshot":0,"jsonequip":{"agi":1340,"appearances":{"0":[143742,"inv_bracer_leather_legionquest100_b_01"]},"armor":176,"avoidance":482,"classes":2048,"displayid":143742,"dura":70,"hastertng":413,"mastrtng":551,"reqlevel":101,"sellprice":478341,"slotbak":9,"sta":2010},"attainable":0,"flags2":12352}, +{"item_id": 137092, "name_eses":"Intuici\u00f3n de Oneth","quality":5,"icon":"inv_bracer_40","screenshot":587912,"jsonequip":{"agi":1340,"agiint":1340,"appearances":{"0":[63486,""]},"armor":176,"classes":1024,"critstrkrtng":551,"displayid":63486,"dura":70,"hastertng":413,"int":1340,"reqlevel":101,"sellprice":479998,"slotbak":9,"sta":2010},"attainable":0,"flags2":12352}, +{"item_id": 137094, "name_eses":"Nidada del Formaferal","quality":5,"icon":"inv_leather_raiddruid_o_01glove","screenshot":0,"jsonequip":{"agi":1786,"agiint":1786,"appearances":{"0":[15839,"inv_gauntlets_20"]},"armor":251,"classes":1024,"critstrkrtng":735,"displayid":15839,"dura":70,"hastertng":551,"int":1786,"reqlevel":101,"sellprice":437336,"slotbak":10,"sta":2680},"attainable":0,"flags2":12352}, +{"item_id": 137095, "name_eses":"Edraith, ataduras de Aglaya","quality":5,"icon":"inv_bracer_57","screenshot":596351,"jsonequip":{"agi":1340,"agiint":1340,"appearances":{"0":[145310,"inv_bracer_leather_legionendgame_c_01"]},"armor":176,"classes":1024,"critstrkrtng":551,"displayid":145310,"dura":70,"hastertng":413,"int":1340,"reqlevel":101,"sellprice":439039,"slotbak":9,"sta":2010},"attainable":0,"flags2":12352}, +{"item_id": 137096, "name_eses":"Detalle de petricor","quality":5,"icon":"inv_bracer_41","screenshot":568215,"jsonequip":{"agi":1340,"agiint":1340,"appearances":{"0":[63542,""]},"armor":176,"classes":512,"displayid":63542,"dura":70,"hastertng":620,"int":1340,"mastrtng":344,"reqlevel":101,"sellprice":440696,"slotbak":9,"sta":2010},"attainable":0,"flags2":12352}, +{"item_id": 137097, "name_eses":"Tapa de cuerno para beber","quality":5,"icon":"inv_bracer_26","screenshot":0,"jsonequip":{"agi":1340,"agiint":1340,"appearances":{"0":[49179,"inv_bracer_08"]},"armor":176,"classes":512,"critstrkrtng":344,"displayid":49179,"dura":70,"hastertng":620,"int":1340,"reqlevel":101,"sellprice":442398,"slotbak":9,"sta":2010},"attainable":0,"flags2":12352}, +{"item_id": 137098, "name_eses":"Grilletes de entrenamiento de la familia Zoldyck","quality":5,"icon":"inv_bracer_leather_raiddruid_i_01","screenshot":632223,"jsonequip":{"agi":1340,"appearances":{"0":[143742,"inv_bracer_leather_legionquest100_b_01"]},"armor":176,"classes":8,"displayid":143742,"dura":70,"hastertng":276,"mastrtng":689,"reqlevel":101,"sellprice":444101,"slotbak":9,"sta":2010},"attainable":0,"flags2":12352}, +{"item_id": 137099, "name_eses":"Manillas encharcadas de piel verde","quality":5,"icon":"inv_bracer_leather_raidrogue_k_01","screenshot":0,"jsonequip":{"agi":1340,"appearances":{"0":[103145,""]},"armor":176,"classes":8,"critstrkrtng":551,"displayid":103145,"dura":70,"hastertng":413,"reqlevel":101,"sellprice":445758,"slotbak":9,"sta":2010},"attainable":0,"flags2":12352}, +{"item_id": 137100, "name_eses":"Negaci\u00f3n de los semigigantes","quality":5,"icon":"inv_bracer_leather_panda_b_02_crimson","screenshot":0,"jsonequip":{"agi":1340,"appearances":{"0":[107480,""]},"armor":176,"classes":8,"critstrkrtng":276,"displayid":107480,"dura":70,"mastrtng":689,"reqlevel":101,"sellprice":447461,"slotbak":9,"sta":2010},"attainable":0,"flags2":12352}, +{"item_id": 137101, "name_eses":"Llamada de lo salvaje","quality":5,"icon":"inv_bracer_36b","screenshot":597560,"jsonequip":{"agi":1340,"appearances":{"0":[101746,"inv_bracer_28b"]},"armor":218,"classes":4,"critstrkrtng":551,"displayid":101746,"dura":70,"hastertng":413,"reqlevel":101,"sellprice":461359,"slotbak":9,"sta":2010},"attainable":0,"flags2":12352}, +{"item_id": 137102, "name_eses":"Acrimonia de Al'Akir","quality":5,"icon":"inv_bracer_plate_pvpdeathknight_e_01","screenshot":0,"jsonequip":{"agi":1340,"agiint":1340,"appearances":{"0":[57072,"inv_bracer_07"]},"armor":218,"classes":64,"displayid":57072,"dura":70,"hastertng":551,"int":1340,"mastrtng":413,"reqlevel":101,"sellprice":463062,"slotbak":9,"sta":2010},"attainable":0,"flags2":12352}, +{"item_id": 137103, "name_eses":"Tempestades tormentosas","quality":5,"icon":"inv_belt_plate_pvpdeathknight_e_01","screenshot":564769,"jsonequip":{"agi":1786,"agiint":1786,"appearances":{"0":[82037,"inv_belt_mail_raidshaman_i_01"]},"armor":281,"classes":64,"critstrkrtng":735,"displayid":82037,"dura":70,"hastertng":551,"int":1786,"reqlevel":101,"sellprice":464719,"slotbak":6,"sta":2680},"attainable":0,"flags2":12352}, +{"item_id": 137104, "name_eses":"Redenci\u00f3n de Nobundo","quality":5,"icon":"inv_bracer_leather_cataclysm_b_01","screenshot":0,"jsonequip":{"agi":1340,"agiint":1340,"appearances":{"0":[97310,"inv_bracer_02"]},"armor":218,"classes":64,"critstrkrtng":551,"displayid":97310,"dura":70,"int":1340,"mastrtng":413,"reqlevel":101,"sellprice":466421,"slotbak":9,"sta":2010},"attainable":0,"flags2":12352}, +{"item_id": 137105, "name_eses":"Guardia de Uther","quality":5,"icon":"inv_bracer_17","screenshot":0,"jsonequip":{"appearances":{"0":[57437,""]},"armor":341,"classes":2,"critstrkrtng":551,"displayid":57437,"dura":70,"hastertng":551,"int":1340,"mastrtng":413,"reqlevel":101,"sellprice":468124,"slotbak":9,"sta":2010,"str":1340,"strint":1340},"attainable":0,"flags2":12352}, +{"item_id": 137107, "name_eses":"Esposas sanguinarias de Mannoroth","quality":5,"icon":"inv_bracer_plate_pvpwarrior_d_01","screenshot":0,"jsonequip":{"appearances":{"0":[99659,"inv_bracer_plate_raiddeathknight_j_01"]},"armor":341,"classes":1,"displayid":99659,"dura":70,"hastertng":413,"mastrtng":551,"reqlevel":101,"sellprice":471484,"slotbak":9,"sta":2010,"str":1340,"versatility":689},"attainable":0,"flags2":12352}, +{"item_id": 137108, "name_eses":"Guanteletes de escama tormentosa de Kakushan","quality":5,"icon":"inv_gloves_plate_deathknight_m_01","screenshot":0,"jsonequip":{"appearances":{"0":[3085,"inv_gauntlets_05"]},"armor":487,"classes":1,"displayid":3085,"dura":70,"mastrtng":735,"reqlevel":101,"sellprice":473186,"slotbak":10,"sta":2680,"str":1786,"versatility":551},"attainable":0,"flags2":12352}, +{"item_id": 137109, "name_eses":"X'anshi, embozo del arzobispo Benedictus","quality":5,"icon":"inv_misc_cape_20","screenshot":0,"jsonequip":{"appearances":{"0":[13963,""]},"armor":161,"classes":16,"critstrkrtng":620,"displayid":13963,"int":1340,"mastrtng":344,"reqlevel":101,"sellprice":706938,"slotbak":16,"sta":2010},"attainable":0,"flags2":12352}, +{"item_id": 137220, "name_eses":"Marcha de la Legi\u00f3n","quality":5,"icon":"inv_ringwod_d4_3","screenshot":0,"jsonequip":{"appearances":{"0":[0,""]},"classes":512,"critstrkrtng":1781,"hastertng":1069,"mastrtng":890,"nsockets":1,"reqlevel":101,"sellprice":589355,"slotbak":11,"socket1":7,"sta":2010},"attainable":0,"flags2":12352}, +{"item_id": 137223, "name_eses":"Sello de necrofantas\u00eda","quality":5,"icon":"inv_jewelry_ring_86","screenshot":0,"jsonequip":{"appearances":{"0":[0,""]},"classes":32,"critstrkrtng":2004,"mastrtng":1114,"nsockets":1,"reqlevel":101,"sellprice":595740,"slotbak":11,"socket1":7,"sta":2010},"attainable":0,"flags2":12352}, +{"item_id": 137227, "name_eses":"Qa'pla, orden de guerra en eredun","quality":5,"icon":"inv_boot_mail_raidhunter_n_01","screenshot":573419,"jsonequip":{"agi":1786,"appearances":{"0":[124368,""]},"armor":343,"classes":4,"critstrkrtng":551,"displayid":124368,"dura":95,"mastrtng":735,"reqlevel":101,"sellprice":650898,"slotbak":8,"sta":2680},"attainable":0,"flags2":12352}, +{"item_id": 137276, "name_eses":"N'ero, sortija de promesas","quality":5,"icon":"inv_jewelry_ring_54","screenshot":0,"jsonequip":{"appearances":{"0":[0,""]},"classes":16,"critstrkrtng":1781,"mastrtng":1336,"nsockets":1,"reqlevel":101,"sellprice":580668,"slotbak":11,"socket1":7,"sta":2010},"attainable":0,"flags2":12352}, +{"item_id": 137382, "name_eses":"Garra del superdepredador","quality":5,"icon":"inv_jewelry_ring_100","screenshot":0,"jsonequip":{"appearances":{"0":[0,""]},"classes":4,"critstrkrtng":2004,"mastrtng":1114,"nsockets":1,"reqlevel":101,"sellprice":565884,"slotbak":11,"socket1":7,"sta":2010},"attainable":0,"flags2":12352}, +{"item_id": 137616, "name_eses":"N\u00facleo cargado de Emalon","quality":5,"icon":"inv_chest_mail_dungeonmail_c_04","screenshot":605717,"jsonequip":{"agi":2382,"agiint":2382,"appearances":{"0":[112171,"inv_chest_mail_raidshaman_l_01"]},"armor":499,"classes":64,"critstrkrtng":612,"displayid":112171,"dura":200,"int":2382,"mastrtng":1103,"reqlevel":101,"sellprice":951429,"slotbak":5,"sta":3573},"attainable":0,"flags2":12352}, +{"item_id": 138117, "name_eses":"Viaje espiritual","quality":5,"icon":"inv_boot_mail_raidhunter_m_01","screenshot":0,"jsonequip":{"agi":1786,"agiint":1786,"appearances":{"0":[118733,""]},"armor":343,"classes":64,"critstrkrtng":735,"displayid":118733,"dura":95,"hastertng":551,"int":1786,"mastrtng":551,"reqlevel":101,"sellprice":684261,"slotbak":8,"sta":2680},"attainable":0,"flags2":12352}, +{"item_id": 138140, "name_eses":"Brazales desterrados de Magtheridon","quality":5,"icon":"inv_bracer_64v1","screenshot":0,"jsonequip":{"appearances":{"0":[41265,"inv_bracer_07"]},"armor":141,"classes":128,"displayid":41265,"dura":70,"hastertng":344,"int":1340,"mastrtng":620,"reqlevel":101,"sellprice":464673,"slotbak":9,"sta":2010},"attainable":0,"flags2":12352}, +{"item_id": 138854, "name_eses":"Fragmento de la Prisi\u00f3n del Traidor","quality":5,"icon":"inv_jewelry_ring_134","screenshot":0,"jsonequip":{"classes":2048,"critstrkrtng":1781,"mastrtng":1336,"nsockets":1,"reqlevel":101,"sellprice":587456,"slotbak":11,"socket1":7,"sta":2010},"attainable":0,"flags2":12352}, +{"item_id": 138879, "name_eses":"Envoltura de invierno de Ovyd","quality":5,"icon":"inv_belt_leather_raiddruid_i_01","screenshot":0,"jsonequip":{"agi":1786,"agiint":1786,"appearances":{"0":[112762,"inv_belt_leather_raidrogue_l_01"]},"armor":226,"classes":512,"displayid":112762,"dura":70,"hastertng":551,"int":1786,"mastrtng":735,"reqlevel":101,"sellprice":478387,"slotbak":6,"sta":2680},"attainable":0,"flags2":12352}, +{"item_id": 138949, "name_eses":"Kirel narak","quality":5,"icon":"inv_boots_leather_dungeonleather_c_06","screenshot":0,"jsonequip":{"agi":1786,"appearances":{"0":[109540,""]},"armor":276,"classes":2048,"displayid":109540,"dura":95,"mastrtng":827,"reqlevel":101,"sellprice":704745,"slotbak":8,"sta":2680,"versatility":459},"attainable":0,"flags2":12352}, +{"item_id": 140846, "name_eses":"Aegisjalmur, los guardabrazos del sobrecogimiento","quality":5,"icon":"inv_bracer_plate_raidpaladin_m_01","screenshot":0,"jsonequip":{"appearances":{"0":[118773,""]},"armor":341,"classes":2,"critstrkrtng":551,"displayid":118773,"dura":70,"hastertng":551,"int":1340,"mastrtng":413,"reqlevel":101,"sellprice":466698,"slotbak":9,"sta":2010,"str":1340,"strint":1340},"attainable":0,"flags2":12352}, +{"item_id": 141321, "name_eses":"Simetr\u00eda de shivarra","quality":5,"icon":"inv_gauntlets_83","screenshot":0,"jsonequip":{"agi":1786,"appearances":{"0":[64494,""]},"armor":251,"classes":8,"displayid":64494,"dura":70,"hastertng":551,"mastrtng":735,"reqlevel":101,"sellprice":471714,"slotbak":10,"sta":2680},"attainable":0,"flags2":12352}, +{"item_id": 141353, "name_eses":"Lanzacartuchos explosivos magnetizados","quality":5,"icon":"inv_bracer_mail_raidhunter_j_01","screenshot":0,"jsonequip":{"agi":1340,"appearances":{"0":[99390,""]},"armor":218,"classes":4,"critstrkrtng":551,"displayid":99390,"dura":70,"hastertng":413,"reqlevel":101,"sellprice":458092,"slotbak":9,"sta":2010},"attainable":0,"flags2":12352}, +{"item_id": 143728, "name_eses":"Estratagema intemporal","quality":5,"icon":"inv_shoulder_plate_dungeonplate_c_06","screenshot":604224,"jsonequip":{"appearances":{"0":[103205,""]},"armor":585,"classes":1,"displayid":103205,"dura":120,"hastertng":643,"mastrtng":643,"reqlevel":101,"sellprice":705088,"slotbak":3,"sta":2680,"str":1786,"versatility":643},"attainable":0,"flags2":12352}, +{"item_id": 143732, "name_eses":"Recordatorio incierto","quality":5,"icon":"inv_helm_mail_korkronshaman_d_01","screenshot":612795,"jsonequip":{"agi":2382,"agiint":2382,"appearances":{"0":[124870,""]},"armor":405,"classes":64,"critstrkrtng":612,"displayid":124870,"dura":120,"int":2382,"mastrtng":1103,"reqlevel":101,"sellprice":715159,"slotbak":1,"sta":3573},"attainable":0,"flags2":12352}, +{"item_id": 144236, "name_eses":"Manto del maestro asesino","quality":5,"icon":"inv_shoulder_leather_raidrogue_k_01","screenshot":600203,"jsonequip":{"agi":1786,"appearances":{"0":[103663,""]},"armor":301,"classes":8,"displayid":103663,"dura":120,"hastertng":367,"mastrtng":919,"reqlevel":101,"sellprice":694743,"slotbak":3,"sta":2680},"attainable":0,"flags2":12352}, +{"item_id": 144239, "name_eses":"Condensador del Emperador","quality":5,"icon":"inv_chest_leather_raidrogue_l_01","screenshot":0,"jsonequip":{"agi":2382,"agiint":2382,"appearances":{"0":[112571,""]},"armor":402,"classes":512,"critstrkrtng":980,"displayid":112571,"dura":200,"int":2382,"mastrtng":735,"reqlevel":101,"sellprice":870801,"slotbak":5,"sta":3573},"attainable":0,"flags2":12352}, +{"item_id": 144242, "name_eses":"Caricia de X'oni","quality":5,"icon":"inv_glove_leather_raidrogue_m_01","screenshot":0,"jsonequip":{"agi":1786,"agiint":1786,"appearances":{"0":[119914,""]},"armor":251,"classes":1024,"displayid":119914,"dura":70,"hastertng":735,"int":1786,"mastrtng":551,"reqlevel":101,"sellprice":442951,"slotbak":10,"sta":2680},"attainable":0,"flags2":12352}, +{"item_id": 144244, "name_eses":"Kam Xi'raff","quality":5,"icon":"inv_helmet_robe_raidpriest_j_01","screenshot":0,"jsonequip":{"appearances":{"0":[99515,""]},"armor":262,"classes":16,"critstrkrtng":612,"displayid":99515,"dura":120,"hastertng":1103,"int":2382,"reqlevel":101,"sellprice":664462,"slotbak":1,"sta":3573},"attainable":0,"flags2":12352}, +{"item_id": 144247, "name_eses":"Motivo oculto de Rammal","quality":5,"icon":"inv_cloth_draenorcrafted_d_01gloves_horde","screenshot":0,"jsonequip":{"appearances":{"0":[131914,""]},"armor":201,"classes":16,"critstrkrtng":459,"displayid":131914,"dura":70,"int":1786,"mastrtng":827,"reqlevel":101,"sellprice":451419,"slotbak":10,"sta":2680},"attainable":0,"flags2":12352}, +{"item_id": 144249, "name_eses":"Odio renacido de Archimonde","quality":5,"icon":"spell_nature_elementalshields","screenshot":0,"jsonequip":{"agi":2264,"agistrint":2264,"appearances":{"0":[0,""]},"cooldown":75000,"int":2264,"mastrtng":612,"reqlevel":101,"sellprice":775269,"slotbak":12,"str":2264,"versatility":612},"attainable":0,"flags2":12352}, +{"item_id": 144258, "name_eses":"Visi\u00f3n futura de Velen","quality":5,"icon":"spell_holy_healingfocus","screenshot":0,"jsonequip":{"agi":2264,"agistrint":2264,"appearances":{"0":[0,""]},"cooldown":75000,"critstrkrtng":408,"hastertng":408,"int":2264,"mastrtng":408,"reqlevel":101,"sellprice":821943,"slotbak":12,"str":2264},"attainable":0,"flags2":12352}, +{"item_id": 144259, "name_eses":"Voluntad ardiente de Kil'jaeden","quality":5,"icon":"sha_spell_fire_bluepyroblast_nightmare","screenshot":0,"jsonequip":{"agi":2264,"agistrint":2264,"appearances":{"0":[0,""]},"cooldown":75000,"critstrkrtng":408,"hastertng":408,"int":2264,"mastrtng":408,"reqlevel":101,"sellprice":746323,"slotbak":12,"str":2264},"attainable":0,"flags2":12352}, +{"item_id": 144260, "name_eses":"T\u00e9mpanos","quality":5,"icon":"inv_shoulder_110","screenshot":0,"jsonequip":{"appearances":{"0":[61121,""]},"armor":242,"classes":128,"critstrkrtng":827,"displayid":61121,"dura":120,"hastertng":459,"int":1786,"reqlevel":101,"sellprice":654323,"slotbak":3,"sta":2680},"attainable":0,"flags2":12352}, +{"item_id": 144273, "name_eses":"\u00daltimo aliento de Maraad","quality":5,"icon":"item_icecrowncape","screenshot":599786,"jsonequip":{"appearances":{"0":[18131,"inv_chest_cloth_41"]},"armor":161,"classes":2,"critstrkrtng":620,"displayid":18131,"int":1340,"mastrtng":344,"reqlevel":101,"sellprice":705156,"slotbak":16,"sta":2010,"str":1340,"strint":1340},"attainable":0,"flags2":12352}, +{"item_id": 144274, "name_eses":"Espiral de gravedad","quality":5,"icon":"inv_helm_cloth_witchhat_b_01","screenshot":600912,"jsonequip":{"appearances":{"0":[15924,"inv_helmet_14"]},"armor":262,"classes":128,"critstrkrtng":612,"displayid":15924,"dura":120,"int":2382,"mastrtng":1103,"reqlevel":101,"sellprice":707691,"slotbak":1,"sta":3573},"attainable":0,"flags2":12352}, +{"item_id": 144275, "name_eses":"Resoluci\u00f3n de Saruan","quality":5,"icon":"inv_plate_draenorcrafted_d_01helm","screenshot":611554,"jsonequip":{"appearances":{"0":[154304,""]},"armor":633,"classes":2,"displayid":154304,"dura":120,"hastertng":612,"int":2382,"reqlevel":101,"sellprice":710226,"slotbak":1,"sta":3573,"str":2382,"strint":2382,"versatility":1103},"attainable":0,"flags2":12352}, +{"item_id": 144277, "name_eses":"Cubremu\u00f1ecas endurecidos en yunque","quality":5,"icon":"inv_bracer_leather_panda_b_01","screenshot":0,"jsonequip":{"agi":1340,"agiint":1340,"appearances":{"0":[141426,"inv_bracer_leather_raiddruid_p_01"]},"armor":176,"classes":512,"displayid":141426,"dura":70,"hastertng":344,"int":1340,"mastrtng":620,"reqlevel":101,"sellprice":480458,"slotbak":9,"sta":2010},"attainable":0,"flags2":12352}, +{"item_id": 144279, "name_eses":"Delirios de grandeza","quality":5,"icon":"inv_shoulder_51","screenshot":0,"jsonequip":{"agi":1786,"appearances":{"0":[63989,""]},"armor":301,"classes":2048,"critstrkrtng":735,"displayid":63989,"dura":120,"mastrtng":551,"reqlevel":101,"sellprice":651720,"slotbak":3,"sta":2680},"attainable":0,"flags2":12352}, +{"item_id": 144280, "name_eses":"Marcha f\u00fanebre","quality":5,"icon":"inv_helm_plate_pvpdeathknight_c_01","screenshot":620427,"jsonequip":{"appearances":{"0":[76807,""]},"armor":633,"classes":32,"critstrkrtng":1103,"displayid":76807,"dura":120,"mastrtng":612,"reqlevel":101,"sellprice":654186,"slotbak":1,"sta":3573,"str":2382},"attainable":0,"flags2":12352}, +{"item_id": 144281, "name_eses":"Hemostasia de Huesoflor","quality":5,"icon":"inv_shoulder_plate_raiddeathknight_l_01","screenshot":0,"jsonequip":{"appearances":{"0":[117481,""]},"armor":585,"classes":32,"displayid":117481,"dura":120,"hastertng":735,"reqlevel":101,"sellprice":656721,"slotbak":3,"sta":2680,"str":1786,"versatility":551},"attainable":0,"flags2":12352}, +{"item_id": 144292, "name_eses":"Esp\u00edritu de la Llama Oscura","quality":5,"icon":"inv_glove_leather_legionendgame_c_01","screenshot":0,"jsonequip":{"agi":1786,"appearances":{"0":[145297,""]},"armor":251,"classes":2048,"displayid":145297,"dura":70,"mastrtng":551,"reqlevel":101,"sellprice":471944,"slotbak":10,"sta":2680,"versatility":735},"attainable":0,"flags2":12352}, +{"item_id": 144293, "name_eses":"N\u00facleo fr\u00edo de la consorte","quality":5,"icon":"inv_pants_plate_03","screenshot":0,"jsonequip":{"appearances":{"0":[97253,"inv_pants_plate_10"]},"armor":682,"classes":32,"displayid":97253,"dura":145,"hastertng":735,"mastrtng":980,"reqlevel":101,"sellprice":941911,"slotbak":7,"sta":3573,"str":2382},"attainable":0,"flags2":12352}, +{"item_id": 144295, "name_eses":"La Dama y el Ni\u00f1o","quality":5,"icon":"inv_shoulder_leather_draenorcrafted_d_01_alliance","screenshot":0,"jsonequip":{"agi":1786,"agiint":1786,"appearances":{"0":[131990,""]},"armor":301,"classes":1024,"critstrkrtng":551,"displayid":131990,"dura":120,"hastertng":735,"int":1786,"reqlevel":101,"sellprice":710089,"slotbak":3,"sta":2680},"attainable":0,"flags2":12352}, +{"item_id": 144303, "name_eses":"Estabilizador girosc\u00f3pico Mk. II","quality":5,"icon":"inv_glove_mail_raidshamanmythic_o_01","screenshot":636030,"jsonequip":{"agi":1786,"appearances":{"0":[136365,""]},"armor":312,"classes":4,"critstrkrtng":735,"displayid":136365,"dura":70,"mastrtng":551,"reqlevel":101,"sellprice":456665,"slotbak":10,"sta":2680},"attainable":0,"flags2":12352}, +{"item_id": 144326, "name_eses":"Manto de mando","quality":5,"icon":"inv_shoulder_mail_raidshaman_m_01","screenshot":626049,"jsonequip":{"agi":1786,"appearances":{"0":[120874,""]},"armor":374,"classes":4,"critstrkrtng":551,"displayid":120874,"dura":120,"mastrtng":735,"reqlevel":101,"sellprice":687276,"slotbak":3,"sta":2680},"attainable":0,"flags2":12352}, +{"item_id": 144340, "name_eses":"Refugio de Rin","quality":5,"icon":"inv_chest_plate27v2","screenshot":0,"jsonequip":{"agi":2382,"agiint":2382,"appearances":{"0":[138793,"inv_leather_pvpdruid_o_01robe"]},"armor":402,"classes":512,"critstrkrtng":919,"displayid":138793,"dura":200,"int":2382,"reqlevel":101,"sellprice":897799,"slotbak":5,"sta":3573,"versatility":796},"attainable":0,"flags2":12352}, +{"item_id": 144354, "name_eses":"Amputadoras rojas \u00edgneas","quality":5,"icon":"inv_pants_leather_40v1","screenshot":604937,"jsonequip":{"agi":2382,"agiint":2382,"appearances":{"0":[37006,"inv_pants_leather_03"]},"armor":352,"classes":1024,"critstrkrtng":980,"displayid":37006,"dura":145,"int":2382,"mastrtng":735,"reqlevel":101,"sellprice":877574,"slotbak":7,"sta":3573},"attainable":0,"flags2":12352}, +{"item_id": 144355, "name_eses":"Tela de ignici\u00f3n pirotex","quality":5,"icon":"inv_gauntlets_16","screenshot":0,"jsonequip":{"appearances":{"0":[142173,"inv_glove_cloth_raidpriest_p_01"]},"armor":201,"classes":128,"critstrkrtng":735,"displayid":142173,"dura":70,"hastertng":551,"int":1786,"reqlevel":101,"sellprice":442951,"slotbak":10,"sta":2680},"attainable":0,"flags2":12352}, +{"item_id": 144358, "name_eses":"Cenizas polvorientas","quality":5,"icon":"inv_plate_firelands_d_01","screenshot":601718,"jsonequip":{"appearances":{"0":[100049,""]},"armor":585,"classes":2,"critstrkrtng":735,"displayid":100049,"dura":120,"hastertng":551,"int":1786,"reqlevel":101,"sellprice":666997,"slotbak":3,"sta":2680,"str":1786,"strint":1786},"attainable":0,"flags2":12352}, +{"item_id": 144361, "name_eses":"Delantal de huesos del carnicero","quality":5,"icon":"inv_chest_chain_15","screenshot":0,"jsonequip":{"agi":2382,"appearances":{"0":[27004,"inv_chest_chain_07"]},"armor":499,"classes":4,"critstrkrtng":980,"displayid":27004,"dura":200,"mastrtng":735,"reqlevel":101,"sellprice":901094,"slotbak":5,"sta":3573},"attainable":0,"flags2":12352}, +{"item_id": 144364, "name_eses":"La Siembra","quality":5,"icon":"inv_cape_pandaria_c_02","screenshot":612631,"jsonequip":{"appearances":{"0":[111203,"inv_misc_cape_18"]},"armor":161,"classes":256,"displayid":111203,"hastertng":344,"int":1340,"mastrtng":620,"reqlevel":101,"sellprice":682069,"slotbak":16,"sta":2010},"attainable":0,"flags2":12352}, +{"item_id": 144369, "name_eses":"Lecciones del espacio-tiempo","quality":5,"icon":"inv_shoulder_robe_pvpwarlock_d_01","screenshot":0,"jsonequip":{"appearances":{"0":[101393,""]},"armor":242,"classes":256,"displayid":101393,"dura":120,"hastertng":735,"int":1786,"mastrtng":551,"reqlevel":101,"sellprice":712829,"slotbak":3,"sta":2680},"attainable":0,"flags2":12352}, +{"item_id": 144385, "name_eses":"Lealtad del Heraldo","quality":5,"icon":"inv_helm_cloth_raidwarlock_p_01","screenshot":0,"jsonequip":{"appearances":{"0":[144444,""]},"armor":262,"classes":256,"critstrkrtng":735,"displayid":144444,"dura":120,"hastertng":980,"int":2382,"reqlevel":101,"sellprice":702621,"slotbak":1,"sta":3573},"attainable":0,"flags2":12352}, +{"item_id": 144432, "name_eses":"Cabeza de Coraz\u00f3n de Roble","quality":5,"icon":"inv_helm_leather_raiddruid_m_01","screenshot":0,"jsonequip":{"agi":2382,"agiint":2382,"appearances":{"0":[120448,""]},"armor":326,"classes":1024,"displayid":120448,"dura":120,"int":2382,"mastrtng":1103,"reqlevel":101,"sellprice":669669,"slotbak":1,"sta":3573,"versatility":612},"attainable":0,"flags2":12352}, +{"item_id": 144438, "name_eses":"Exterminatus de Zek","quality":5,"icon":"inv_cape_pandariapvp_d_01","screenshot":620171,"jsonequip":{"appearances":{"0":[111851,""]},"armor":161,"classes":16,"critstrkrtng":551,"displayid":111851,"hastertng":413,"int":1340,"reqlevel":101,"sellprice":684741,"slotbak":16,"sta":2010},"attainable":0,"flags2":12352}, +{"item_id": 146666, "name_eses":"Celumbra, la dicotom\u00eda de la noche","quality":5,"icon":"inv_cloth_raidmage_p_01shoulder","screenshot":619974,"jsonequip":{"appearances":{"0":[160483,"inv_shoulder_cloth_raidwarlock_l_01"]},"armor":242,"avgbuyout":100000,"classes":400,"critstrkrtng":551,"displayid":160483,"dura":120,"hastertng":735,"int":1786,"nsockets":3,"reqlevel":101,"sellprice":654666,"slotbak":3,"socket1":7,"socket2":7,"socket3":7,"sta":2680},"attainable":0,"flags2":12352}, +{"item_id": 146667, "name_eses":"Coraje incesante de Rethu","quality":5,"icon":"inv_plate_draenorcrafted_d_01buckle","screenshot":0,"jsonequip":{"appearances":{"0":[138594,""]},"armor":438,"avgbuyout":820000,"classes":35,"displayid":138594,"dura":70,"hastertng":735,"int":1786,"mastrtng":551,"nsockets":3,"reqlevel":101,"sellprice":441432,"slotbak":6,"socket1":7,"socket2":7,"socket3":7,"sta":2680,"str":1786,"strint":1786},"attainable":0,"flags2":12352}, +{"item_id": 146668, "name_eses":"Percha de vigilancia","quality":5,"icon":"inv_glove_mail_vrykuldragonrider_b_01","screenshot":620074,"jsonequip":{"agi":1786,"agiint":1786,"appearances":{"0":[147833,""]},"armor":312,"classes":68,"displayid":147833,"dura":70,"hastertng":551,"int":1786,"mastrtng":735,"nsockets":3,"reqlevel":101,"sellprice":443135,"slotbak":10,"socket1":7,"socket2":7,"socket3":7,"sta":2680},"attainable":0,"flags2":12352}, +{"item_id": 146669, "name_eses":"Refugio eterno de la Centinela","quality":5,"icon":"inv_leather_raiddemonhuntermythic_q_02boots","screenshot":0,"jsonequip":{"agi":1786,"agiint":1786,"appearances":{"0":[155941,""]},"armor":276,"avgbuyout":1039999,"classes":3592,"critstrkrtng":551,"displayid":155941,"dura":95,"int":1786,"mastrtng":735,"nsockets":3,"reqlevel":101,"sellprice":662202,"slotbak":8,"socket1":7,"socket2":7,"socket3":7,"sta":2680},"attainable":0,"flags2":12352}, +{"item_id": 150936, "name_eses":"Alma de Hoja de las Sombras","quality":5,"icon":"inv_jewelry_ring_56","screenshot":0,"jsonequip":{"appearances":{"0":[0,""]},"classes":8,"critstrkrtng":712,"hastertng":534,"mastrtng":890,"nsockets":1,"reqlevel":101,"sellprice":598904,"slotbak":11,"socket1":7,"sta":2010},"attainable":0,"flags2":12352}, +{"item_id": 151636, "name_eses":"Alma del Archidruida","quality":5,"icon":"inv_70_raid_ring6a","screenshot":0,"jsonequip":{"appearances":{"0":[0,""]},"classes":1024,"critstrkrtng":534,"hastertng":890,"mastrtng":712,"nsockets":1,"reqlevel":101,"sellprice":560707,"slotbak":11,"socket1":7,"sta":2010},"attainable":0,"flags2":12352}, +{"item_id": 151639, "name_eses":"Alma del Asesino","quality":5,"icon":"inv_70_dungeon_ring6a","screenshot":0,"jsonequip":{"appearances":{"0":[0,""]},"classes":2048,"critstrkrtng":712,"hastertng":534,"mastrtng":890,"nsockets":1,"reqlevel":101,"sellprice":567035,"slotbak":11,"socket1":7,"sta":2010},"attainable":0,"flags2":12352}, +{"item_id": 151640, "name_eses":"Alma del Se\u00f1or de la Muerte","quality":5,"icon":"inv_70_pvp_ring2b","screenshot":0,"jsonequip":{"appearances":{"0":[0,""]},"classes":32,"critstrkrtng":712,"hastertng":534,"mastrtng":890,"nsockets":1,"reqlevel":101,"sellprice":569163,"slotbak":11,"socket1":7,"sta":2010},"attainable":0,"flags2":12352}, +{"item_id": 151641, "name_eses":"Alma del Maestro de caza","quality":5,"icon":"inv_70_quest_ring8a","screenshot":0,"jsonequip":{"appearances":{"0":[0,""]},"classes":4,"critstrkrtng":534,"hastertng":712,"mastrtng":890,"nsockets":1,"reqlevel":101,"sellprice":571234,"slotbak":11,"socket1":7,"sta":2010},"attainable":0,"flags2":12352}, +{"item_id": 151642, "name_eses":"Alma del Archimago","quality":5,"icon":"inv_70_raid_ring2d","screenshot":0,"jsonequip":{"appearances":{"0":[0,""]},"classes":128,"critstrkrtng":802,"hastertng":1158,"mastrtng":979,"nsockets":1,"reqlevel":101,"sellprice":573362,"slotbak":11,"socket1":7,"sta":2010},"attainable":0,"flags2":12352}, +{"item_id": 151643, "name_eses":"Alma del Gran maestro","quality":5,"icon":"inv_jewelry_ring_119","screenshot":0,"jsonequip":{"appearances":{"0":[0,""]},"classes":512,"critstrkrtng":802,"hastertng":979,"mastrtng":1158,"nsockets":1,"reqlevel":101,"sellprice":575491,"slotbak":11,"socket1":7,"sta":2010},"attainable":0,"flags2":12352}, +{"item_id": 151644, "name_eses":"Alma del Alto Se\u00f1or","quality":5,"icon":"inv_jewelry_ring_68","screenshot":0,"jsonequip":{"appearances":{"0":[0,""]},"classes":2,"critstrkrtng":712,"hastertng":534,"mastrtng":890,"nsockets":1,"reqlevel":101,"sellprice":577619,"slotbak":11,"socket1":7,"sta":2010},"attainable":0,"flags2":12352}, +{"item_id": 151646, "name_eses":"Alma del Sumo sacerdote","quality":5,"icon":"inv_jewelry_ring_67","screenshot":0,"jsonequip":{"appearances":{"0":[0,""]},"classes":16,"critstrkrtng":712,"hastertng":890,"mastrtng":534,"nsockets":1,"reqlevel":101,"sellprice":581819,"slotbak":11,"socket1":7,"sta":2010},"attainable":0,"flags2":12352}, +{"item_id": 151647, "name_eses":"Alma del Clarividente","quality":5,"icon":"inv_70_quest_ring2b","screenshot":0,"jsonequip":{"appearances":{"0":[0,""]},"classes":64,"critstrkrtng":855,"hastertng":676,"mastrtng":1033,"nsockets":1,"reqlevel":101,"sellprice":599192,"slotbak":11,"socket1":7,"sta":2010},"attainable":0,"flags2":12352}, +{"item_id": 151649, "name_eses":"Alma del Se\u00f1or abisal","quality":5,"icon":"inv_70_quest_ring7c","screenshot":0,"jsonequip":{"appearances":{"0":[0,""]},"classes":256,"critstrkrtng":534,"hastertng":890,"mastrtng":712,"nsockets":1,"reqlevel":101,"sellprice":603391,"slotbak":11,"socket1":7,"sta":2010},"attainable":0,"flags2":12352}, +{"item_id": 151650, "name_eses":"Alma del Se\u00f1or de la batalla","quality":5,"icon":"inv_misc_ring_4","screenshot":0,"jsonequip":{"appearances":{"0":[0,""]},"classes":1,"critstrkrtng":534,"hastertng":712,"mastrtng":890,"nsockets":1,"reqlevel":101,"sellprice":547936,"slotbak":11,"socket1":7,"sta":2010},"attainable":0,"flags2":12352}, +{"item_id": 151782, "name_eses":"Torre sin l\u00edmites","quality":5,"icon":"inv_helm_plate_raidpaladin_n_01","screenshot":0,"jsonequip":{"appearances":{"0":[141857,""]},"armor":633,"classes":2,"critstrkrtng":919,"displayid":141857,"int":2382,"mastrtng":796,"reqlevel":101,"sellprice":718515,"slotbak":1,"sta":3573,"str":2382,"strint":2382},"attainable":0,"flags2":12352}, +{"item_id": 151783, "name_eses":"Canci\u00f3n camale\u00f3nica","quality":5,"icon":"inv_helmet_153","screenshot":0,"jsonequip":{"agi":2382,"agiint":2382,"appearances":{"0":[64949,""]},"armor":326,"classes":1024,"displayid":64949,"dura":120,"hastertng":919,"int":2382,"mastrtng":796,"reqlevel":101,"sellprice":652473,"slotbak":1,"sta":3573},"attainable":0,"flags2":12352}, +{"item_id": 151784, "name_eses":"Puerta a ninguna parte","quality":5,"icon":"inv_misc_cape_cataclysm_healer_b_01","screenshot":0,"jsonequip":{"agi":1340,"agiint":1340,"appearances":{"0":[83951,""]},"armor":161,"classes":512,"displayid":83951,"hastertng":517,"int":1340,"mastrtng":448,"reqlevel":101,"sellprice":654940,"slotbak":16,"sta":2010},"attainable":0,"flags2":12352}, +{"item_id": 151785, "name_eses":"Fuego en las profundidades","quality":5,"icon":"inv_chest_mail_raidshaman_m_01","screenshot":0,"jsonequip":{"agi":2382,"agiint":2382,"appearances":{"0":[120651,""]},"armor":499,"classes":64,"critstrkrtng":919,"displayid":120651,"dura":200,"int":2382,"mastrtng":796,"reqlevel":101,"sellprice":878306,"slotbak":5,"sta":3573},"attainable":0,"flags2":12352}, +{"item_id": 151786, "name_eses":"Halo interno","quality":5,"icon":"inv_shoulder_robe_raidpriest_k_01","screenshot":0,"jsonequip":{"appearances":{"0":[104443,""]},"armor":242,"classes":16,"displayid":104443,"hastertng":689,"int":1786,"mastrtng":597,"reqlevel":101,"sellprice":660009,"slotbak":3,"sta":2680},"attainable":0,"flags2":12352}, +{"item_id": 151787, "name_eses":"Gu\u00eda de alabastro","quality":5,"icon":"inv_helmet_136","screenshot":0,"jsonequip":{"appearances":{"0":[157945,""]},"armor":262,"classes":16,"critstrkrtng":796,"displayid":157945,"dura":120,"int":2382,"mastrtng":919,"reqlevel":101,"sellprice":662544,"slotbak":1,"sta":3573},"attainable":0,"flags2":12352}, +{"item_id": 151788, "name_eses":"\u00daltimo aliento de Cerveza de Trueno","quality":5,"icon":"inv_shoulder_leather_pvpmonk_g_01","screenshot":0,"jsonequip":{"agi":1786,"agiint":1786,"appearances":{"0":[123584,""]},"armor":301,"classes":512,"displayid":123584,"dura":120,"hastertng":597,"int":1786,"reqlevel":101,"sellprice":665010,"slotbak":3,"sta":2680,"versatility":689},"attainable":0,"flags2":12352}, +{"item_id": 151795, "name_eses":"Corrupci\u00f3n del Cazador de Almas","quality":5,"icon":"inv_plate_raidwarrior_o_01chest","screenshot":0,"jsonequip":{"appearances":{"0":[132724,""]},"armor":779,"classes":32,"critstrkrtng":796,"displayid":132724,"dura":200,"mastrtng":919,"reqlevel":101,"sellprice":936237,"slotbak":5,"sta":3573,"str":2382},"attainable":0,"flags2":12352}, +{"item_id": 151796, "name_eses":"Coraz\u00f3n fr\u00edo","quality":5,"icon":"inv_chest_plate_raiddeathknight_p_01","screenshot":0,"jsonequip":{"appearances":{"0":[143412,""]},"armor":779,"classes":32,"critstrkrtng":919,"displayid":143412,"dura":200,"mastrtng":796,"reqlevel":101,"sellprice":939532,"slotbak":5,"sta":3573,"str":2382},"attainable":0,"flags2":12352}, +{"item_id": 151797, "name_eses":"[Death Screamers]","quality":5,"icon":"","screenshot":0,"jsonequip":{"classes":32,"hastertng":689,"mastrtng":597,"reqlevel":101,"sellprice":474153,"slotbak":10,"sta":2680,"str":1786},"attainable":0,"flags2":12352}, +{"item_id": 151798, "name_eses":"Teor\u00eda del caos","quality":5,"icon":"inv_cape_draenorraid_d_01plate_dk","screenshot":0,"jsonequip":{"agi":1340,"appearances":{"0":[141339,""]},"armor":161,"classes":2048,"critstrkrtng":448,"displayid":141339,"hastertng":517,"reqlevel":101,"sellprice":708376,"slotbak":16,"sta":2010},"attainable":0,"flags2":12352}, +{"item_id": 151799, "name_eses":"Abrazo del olvido","quality":5,"icon":"inv_leather_raiddruid_m_01pant","screenshot":0,"jsonequip":{"agi":2382,"appearances":{"0":[118311,""]},"armor":352,"classes":2048,"displayid":118311,"dura":145,"mastrtng":919,"reqlevel":101,"sellprice":949599,"slotbak":7,"sta":3573,"versatility":796},"attainable":0,"flags2":12352}, +{"item_id": 151800, "name_eses":"Luz de luna radiante","quality":5,"icon":"inv_cape_felfire_raid_d_01","screenshot":0,"jsonequip":{"agi":1340,"agiint":1340,"appearances":{"0":[144305,""]},"armor":161,"classes":1024,"displayid":144305,"hastertng":517,"int":1340,"mastrtng":448,"reqlevel":101,"sellprice":713377,"slotbak":16,"sta":2010},"attainable":0,"flags2":12352}, +{"item_id": 151801, "name_eses":"Ornato de behemoth","quality":5,"icon":"inv_helmet_leather_draenorhonors2_c_01","screenshot":0,"jsonequip":{"agi":2382,"agiint":2382,"appearances":{"0":[142284,""]},"armor":326,"classes":1024,"critstrkrtng":919,"displayid":142284,"dura":120,"int":2382,"mastrtng":796,"reqlevel":101,"sellprice":715912,"slotbak":1,"sta":3573},"attainable":0,"flags2":12352}, +{"item_id": 151802, "name_eses":"Furia de la Naturaleza","quality":5,"icon":"inv_cape_draenorquest90_b_03_mail","screenshot":0,"jsonequip":{"agi":1340,"agiint":1340,"appearances":{"0":[137908,""]},"armor":161,"classes":1024,"critstrkrtng":448,"displayid":137908,"int":1340,"mastrtng":517,"reqlevel":101,"sellprice":718447,"slotbak":16,"sta":2010},"attainable":0,"flags2":12352}, +{"item_id": 151803, "name_eses":"Celeridad de los Brisaveloz","quality":5,"icon":"inv_cape_430dungeon_c_04","screenshot":0,"jsonequip":{"agi":1340,"appearances":{"0":[101364,""]},"armor":161,"classes":4,"displayid":101364,"hastertng":517,"mastrtng":448,"reqlevel":101,"sellprice":652336,"slotbak":16,"sta":2010},"attainable":0,"flags2":12352}, +{"item_id": 151805, "name_eses":"P\u00e1rsel","quality":5,"icon":"inv_chest_mail_dungeonmail_c_03","screenshot":0,"jsonequip":{"agi":2382,"appearances":{"0":[76418,""]},"armor":499,"classes":4,"displayid":76418,"dura":200,"hastertng":919,"mastrtng":796,"reqlevel":101,"sellprice":878214,"slotbak":5,"sta":3573},"attainable":0,"flags2":12352}, +{"item_id": 151807, "name_eses":"Capa de depredador oculto","quality":5,"icon":"inv_cape_leather_raiddemonhunter_r_01_long","screenshot":0,"jsonequip":{"agi":1340,"appearances":{"0":[70727,"inv_misc_cape_05"]},"armor":161,"classes":4,"displayid":70727,"hastertng":448,"mastrtng":517,"reqlevel":101,"sellprice":680562,"slotbak":16,"sta":2010},"attainable":0,"flags2":12352}, +{"item_id": 151808, "name_eses":"Manto del Kirin Tor inicial","quality":5,"icon":"inv_shoulder_97","screenshot":0,"jsonequip":{"appearances":{"0":[97754,"inv_shoulder_94"]},"armor":242,"classes":128,"critstrkrtng":689,"displayid":97754,"dura":120,"hastertng":597,"int":1786,"reqlevel":101,"sellprice":683097,"slotbak":3,"sta":2680},"attainable":0,"flags2":12352}, +{"item_id": 151809, "name_eses":"N\u00facleo infernal contenido","quality":5,"icon":"inv_shoulder_robe_raidpriest_j_01","screenshot":0,"jsonequip":{"appearances":{"0":[149573,"inv_shoulder_cloth_raidwarlock_q_01"]},"armor":242,"classes":128,"critstrkrtng":689,"displayid":149573,"dura":120,"hastertng":597,"int":1786,"reqlevel":101,"sellprice":685631,"slotbak":3,"sta":2680},"attainable":0,"flags2":12352}, +{"item_id": 151810, "name_eses":"Fragmentos rotos de Sindragosa","quality":5,"icon":"inv_helmet_133","screenshot":0,"jsonequip":{"appearances":{"0":[97601,""]},"armor":262,"classes":128,"critstrkrtng":919,"displayid":97601,"dura":120,"hastertng":796,"int":2382,"reqlevel":101,"sellprice":688166,"slotbak":1,"sta":3573},"attainable":0,"flags2":12352}, +{"item_id": 151811, "name_eses":"Sopla el viento","quality":5,"icon":"inv_helmet_leather_raidmonk_l_01","screenshot":0,"jsonequip":{"agi":2382,"agiint":2382,"appearances":{"0":[111375,""]},"armor":326,"classes":512,"critstrkrtng":796,"displayid":111375,"dura":120,"int":2382,"mastrtng":919,"reqlevel":101,"sellprice":690633,"slotbak":1,"sta":3573},"attainable":0,"flags2":12352}, +{"item_id": 151812, "name_eses":"Pilares de luz rec\u00f3ndita","quality":5,"icon":"inv_shoulder_126","screenshot":0,"jsonequip":{"appearances":{"0":[65268,""]},"armor":585,"classes":2,"critstrkrtng":689,"displayid":65268,"dura":120,"hastertng":597,"int":1786,"reqlevel":101,"sellprice":693167,"slotbak":3,"sta":2680,"str":1786,"strint":1786},"attainable":0,"flags2":12352}, +{"item_id": 151813, "name_eses":"Expurgaci\u00f3n de inquisidor Escarlata","quality":5,"icon":"inv_chest_plate_raidpaladin_j_01","screenshot":0,"jsonequip":{"appearances":{"0":[100664,""]},"armor":779,"classes":2,"displayid":100664,"dura":200,"hastertng":796,"int":2382,"mastrtng":919,"reqlevel":101,"sellprice":929373,"slotbak":5,"sta":3573,"str":2382,"strint":2382},"attainable":0,"flags2":12352}, +{"item_id": 151814, "name_eses":"Coraz\u00f3n del Vac\u00edo","quality":5,"icon":"inv_chest_cloth_raidpriestmythic_o_01","screenshot":0,"jsonequip":{"appearances":{"0":[119514,"inv_cloth_raidpriest_m_01robe"]},"armor":322,"classes":16,"critstrkrtng":919,"displayid":119514,"dura":200,"hastertng":796,"int":2382,"reqlevel":101,"sellprice":932668,"slotbak":20,"sta":3573},"attainable":0,"flags2":12352}, +{"item_id": 151815, "name_eses":"Corona vac\u00eda","quality":5,"icon":"inv_crown_02","screenshot":634917,"jsonequip":{"agi":2382,"appearances":{"0":[39275,""]},"armor":326,"classes":8,"critstrkrtng":796,"displayid":39275,"dura":120,"mastrtng":919,"reqlevel":101,"sellprice":700703,"slotbak":1,"sta":3573},"attainable":0,"flags2":12352}, +{"item_id": 151817, "name_eses":"Maldici\u00f3n de inquietud","quality":5,"icon":"inv_qiraj_draperegal","screenshot":0,"jsonequip":{"agi":1340,"appearances":{"0":[48558,"inv_misc_cape_21"]},"armor":161,"classes":8,"critstrkrtng":517,"displayid":48558,"mastrtng":448,"reqlevel":101,"sellprice":705773,"slotbak":16,"sta":2010},"attainable":0,"flags2":12352}, +{"item_id": 151818, "name_eses":"Primeros muertos","quality":5,"icon":"inv_glove_cloth_raidwarlockmythic_q_01","screenshot":0,"jsonequip":{"agi":1786,"appearances":{"0":[45593,"inv_gauntlets_65"]},"armor":251,"classes":8,"critstrkrtng":597,"displayid":45593,"dura":70,"mastrtng":689,"reqlevel":101,"sellprice":475764,"slotbak":10,"sta":2680},"attainable":0,"flags2":12352}, +{"item_id": 151819, "name_eses":"Coraz\u00f3n en llamas","quality":5,"icon":"inv_gauntlets_85","screenshot":0,"jsonequip":{"agi":1786,"agiint":1786,"appearances":{"0":[62253,"inv_gauntlets_25"]},"armor":312,"classes":64,"displayid":62253,"dura":70,"hastertng":689,"int":1786,"mastrtng":597,"reqlevel":101,"sellprice":477466,"slotbak":10,"sta":2680},"attainable":0,"flags2":12352}, +{"item_id": 151820, "name_eses":"[Primal Ascendant's Stormcallers]","quality":5,"icon":"","screenshot":0,"jsonequip":{"agi":1786,"agiint":1786,"classes":64,"hastertng":597,"int":1786,"mastrtng":689,"reqlevel":101,"sellprice":713309,"slotbak":3,"sta":2680},"attainable":0,"flags2":12352}, +{"item_id": 151821, "name_eses":"Maestro cosechador","quality":5,"icon":"inv_chest_cloth_raidmage_q_01","screenshot":0,"jsonequip":{"appearances":{"0":[61420,"inv_chest_cloth_74"]},"armor":322,"classes":256,"displayid":61420,"dura":200,"hastertng":919,"int":2382,"mastrtng":796,"reqlevel":101,"sellprice":956280,"slotbak":20,"sta":3573},"attainable":0,"flags2":12352}, +{"item_id": 151822, "name_eses":"Espejo de sangre de Ararat","quality":5,"icon":"inv_pants_plate_39v1","screenshot":0,"jsonequip":{"appearances":{"0":[38134,"inv_pants_plate_15"]},"armor":682,"classes":1,"displayid":38134,"dura":145,"mastrtng":919,"reqlevel":101,"sellprice":959575,"slotbak":7,"sta":3573,"str":2382,"versatility":796},"attainable":0,"flags2":12352}, +{"item_id": 151823, "name_eses":"Gran ojo de la tormenta","quality":5,"icon":"inv_plate_raiddeathknight_o_01helm","screenshot":0,"jsonequip":{"appearances":{"0":[136966,""]},"armor":633,"classes":1,"displayid":136966,"dura":120,"hastertng":919,"mastrtng":796,"reqlevel":101,"sellprice":670423,"slotbak":1,"sta":3573,"str":2382},"attainable":0,"flags2":12352}, +{"item_id": 151824, "name_eses":"Rabiosos Valarjar","quality":5,"icon":"inv_pants_plate_raiddeathknight_i_01","screenshot":0,"jsonequip":{"appearances":{"0":[78788,""]},"armor":682,"classes":1,"critstrkrtng":673,"displayid":78788,"dura":145,"hastertng":1041,"reqlevel":101,"sellprice":898989,"slotbak":7,"sta":3573,"str":2382},"attainable":0,"flags2":12352}, +{"item_id": 138489, "name_eses":"[Kargath's Sacrificed Hands]","quality":5,"icon":"","screenshot":0,"jsonequip":{"classes":1,"critstrkrtng":782,"mastrtng":434,"reqlevel":110,"sellprice":431597,"slotbak":10,"sta":2329,"str":1553},"attainable":0,"flags2":12288} +] \ No newline at end of file diff --git a/loot.py b/loot.py new file mode 100755 index 0000000..b8ddec1 --- /dev/null +++ b/loot.py @@ -0,0 +1,59 @@ +#! /usr/bin/python3 + +import redis +import time +import json +import requests +import traceback +import os +import webhook +import conf + +now = time.time() + +wh = webhook.Webhook(conf.url_discord_webhook) + +r = redis.StrictRedis(host='localhost', charset="utf-8", decode_responses=True) + +bnet_member = "https://{1}.api.battle.net/wow/character/dun%20modr/{0}?fields=feed,items&locale=es_ES&apikey={2}" + +# legends database +items = {} +with open(os.path.join(os.path.dirname(os.path.abspath(__file__)), "items_legend.json"), 'r') as f: + js = json.load(f) + + for item in js: + items[item["item_id"]] = item + + +members = r.smembers("bot:members") # i need all guild members +request = requests.Session() + +for m in members: + try: + member = request.get(url=bnet_member.format(m, conf.battle_net_region, conf.battle_net_apikey)).json() + + if "feed" not in member: + continue + + for feed in member["feed"]: + if feed["type"] != "LOOT": + continue + + fid = "{}-{}".format(m, feed["itemId"]) + + if feed["itemId"] in items and r.sadd("bot:legends", fid): + #r.rpush("bot:rss:new", ":unicorn: **{0}** pilla legendario! **{1}**! ".format(member["name"], items[feed["itemId"]]["name_eses"], feed["itemId"]) ) + wh.send(":unicorn: **{0}** pilla legendario! **[{1}]()**".format(member["name"], items[feed["itemId"]]["name_eses"], feed["itemId"])) + + except: + traceback.print_exc() + +""" +Vamos a generar el archivo items_legend.json +Sacar la lista de legends de aquí: view-source:http://es.wowhead.com/items/quality:5/slot:16:5:8:11:10:1:7:2:3:12:6:9?filter=166;7;0 +Buscar: 'var _ = {};' y copiar toda la línea siguiente +Reemplazar: '_\[(\d+)\]=\{' por '\n{"item_id": \1, ' +Reemplazar: ';$' por ',' +Añadir los [ ... ] +""" diff --git a/mythics.py b/mythics.py new file mode 100755 index 0000000..d696732 --- /dev/null +++ b/mythics.py @@ -0,0 +1,94 @@ +#! /usr/bin/python3 + +import redis +import time +import requests +import traceback +import datetime +from lxml import html +from lxml import etree +import webhook +import conf + +now = time.time() + +wh = webhook.Webhook(conf.url_discord_webhook) + +r = redis.StrictRedis(host='localhost', charset="utf-8", decode_responses=True) + +warcraft_api = "https://worldofwarcraft.com/es-es/game/pve/leaderboards/dun-modr/{}" + +members = r.smembers("bot:members") +r.zremrangebyscore("bot:m+", "-inf", now-(60*60*24*7*2)) # 2 semanas + +for zone, instance in conf.zones.items(): + try: + page = requests.get(warcraft_api.format(zone)) + hp = etree.HTMLParser(encoding=page.encoding) + tree = html.fromstring(page.content, parser=hp) # .decode(page.encoding) + + top = tree.xpath('//div[@class="Media-text"]/div[@class="font-semp-medium-white"]/text()') + if len(top) < 3: + print("no affix?") + continue + + affix = "" if top[0] not in conf.affixes else conf.affixes[top[0]] + affix += "" if top[1] not in conf.affixes else conf.affixes[top[1]] + affix += "" if top[2] not in conf.affixes else conf.affixes[top[2]] + + rows = tree.xpath('//div[@class="SortTable-body"]/div[@class="SortTable-row"]') + #print("rows", len(rows)) + + for row in rows: + #print("tiempo", row.xpath('./div[5]/text()')) + #print("row", html.tostring(row)) + pos = row.xpath('./div[1]/text()')[0] + lvl = int(row.xpath('./div[2]/text()')[0]) + record = row.xpath('./div[3]/text()')[0] + datee = row.xpath('./div[5]/text()')[0] #row.xpath('./div[5]/@data-value')[0] + team = row.xpath('./div[4]/div/div[@class="List-item gutter-tiny"]') + #print("row", pos, lvl, time, datee, len(team)) + + k = "{0}.{1}.{2}.{3}".format(zone, lvl, record, datee) + inguild = False + party = [] + + if lvl < 15 or r.zadd("bot:m+", now, k) == 0: + continue + + for player in team: + #print("player", html.tostring(player)) + name = player.xpath('.//div[@class="Character-name"]/text()')[0] + url = str(player.xpath('./a/@href')[0]) + clss = str(player.xpath('./a/@class')[0]) + spec = "" + for key in conf.class_icons.keys(): + if key in clss: + spec = conf.class_icons[key] + #party.append("{2}{0}{1}".format(name, "" if "dun-modr" in url else " *({})*".format(url.split("/")[6]), roles[len(party)])) + party.append("{1}{0}".format(name if "dun-modr" in url else "*{}*".format(name), spec)) + + for member in members: + if "/{}".format(member).lower() in url and "dun-modr" in url: + inguild = True + + if inguild: + chests = 0 + for timer in conf.timers[zone]: + delta = datetime.datetime.strptime(record, '%H:%M:%S') - datetime.datetime.strptime(timer, '%M:%S') + if delta.total_seconds() > 0: + break + chests += 1 + if chests == 3: + delta = datetime.datetime.strptime(timer, '%M:%S') - datetime.datetime.strptime(record, '%H:%M:%S') + + #tip = "(piedra +{0} por {1})".format(chests, delta) + tip = "(piedra +{0})".format(chests, delta) + msg = "{6} **[{0}](<{7}>) +{1}** hecha en **{2}** {3} por {4} / **rank {5}** de Dun Modr".format(instance, lvl, record, tip, " ".join(party), pos, affix, warcraft_api.format(zone)) + #r.rpush("bot:rss:new", msg) + #print(msg) + wh.send(msg) + + except: + traceback.print_exc() + time.sleep(1) diff --git a/rss.py b/rss.py new file mode 100755 index 0000000..cdce32a --- /dev/null +++ b/rss.py @@ -0,0 +1,47 @@ +#! /usr/bin/python3 + +import feedparser +import redis +import time +import traceback +import webhook +import conf + +now = time.time() + +wh = webhook.Webhook(conf.url_discord_webhook) + +r = redis.StrictRedis(host='localhost', charset="utf-8", decode_responses=True) +r.zremrangebyscore("bot:rss", "-inf", now-(60*60*24*30*3)) # 3 meses de caché + +url_feeds = [ + "http://www.wowhead.com/news&rss", + "http://www.mmo-champion.com/external.php?do=rss&type=newcontent§ionid=1&days=120&count=5" +] + +for url in url_feeds: + try: + feed = feedparser.parse(url) + + if "items" not in feed or len(feed["items"]) < 3: + continue + + for i in [0, 1, 2]: # 3 últimas noticias + entry = feed["items"][i] + fid = "{} {}".format(feed["feed"]["title"][0:20], entry["published"]) + if r.zadd("bot:rss", now, fid) == 0: + continue + + if "wowhead.com/" in entry["link"]: + icon = conf.icon_wowhead + elif "mmo-champion.com/" in entry["link"]: + icon = conf.icon_mmoc + else: + icon = ":newspaper2:" + + #r.rpush("bot:rss:new", "{2} {0}\n<{1}>".format(entry["title"], entry["link"], icon)) + wh.send("{2} [{0}](<{1}>)".format(entry["title"], entry["link"], icon)) + + except: + print(url) + traceback.print_exc() diff --git a/streams.py b/streams.py new file mode 100755 index 0000000..4b31b20 --- /dev/null +++ b/streams.py @@ -0,0 +1,31 @@ +#! /usr/bin/python3 + +import redis +import time +import requests +import sys +import webhook +import conf + +now = time.time() + +wh = webhook.Webhook(conf.url_discord_webhook) + +r = redis.StrictRedis(host='localhost', charset="utf-8", decode_responses=True) + +twitch_api = "https://api.twitch.tv/kraken/streams/followed?oauth_token={0}".format(conf.twitch_token) + +r.zremrangebyscore("bot:twitch", "-inf", now-(60*15)) + +t = requests.get(url=twitch_api).json() + +if "streams" not in t: + print(t) + sys.exit() + +for stream in t["streams"]: + if r.zadd("bot:twitch", now, stream["channel"]["name"]) == 0: + continue + + #r.rpush("bot:rss:new", ":projector: **{0}** está stremeando <{1}>".format(stream["channel"]["name"], stream["channel"]["url"])) + wh.send("{3} **{0}** está stremeando! **[{2}](<{1}>)**".format(stream["channel"]["name"], stream["channel"]["url"], stream["channel"]["status"], conf.icon_twitch)) diff --git a/warcraftlogs.py b/warcraftlogs.py new file mode 100755 index 0000000..7a7d257 --- /dev/null +++ b/warcraftlogs.py @@ -0,0 +1,29 @@ +#! /usr/bin/python3 + +import redis +import time +import requests +import webhook +import conf + +now = time.time() + +wh = webhook.Webhook(conf.url_discord_webhook) + +r = redis.StrictRedis(host='localhost', charset="utf-8", decode_responses=True) +r.zremrangebyscore("bot:warcraftlogs", "-inf", now-(60*60*24*30*12)) # 12 meses + +wl_api = "https://www.warcraftlogs.com/v1/reports/guild/vagrant%20story/dun-modr/eu?api_key={0}".format(conf.warcraftlogs_token) + +wl = requests.get(url=wl_api).json() + +for report in wl: + if report["start"]/1000 < now-(60*60*24*7): # oooold, 7 day only + continue + + if not r.zadd("bot:warcraftlogs", now, report["id"]): + continue + + url = "https://www.warcraftlogs.com/reports/{0}".format(report["id"]) + #r.rpush("bot:rss:new", "<:Warcraftlogs:283906655484379138> Log en vivo! **{2}** por **{0}** en <{1}>".format(report["owner"], url, report["title"])) + wh.send("{3} Log en vivo! **[{2}](<{1}>)** por **{0}**".format(report["owner"], url, report["title"], conf.icon_warcraftlogs)) diff --git a/webhook.py b/webhook.py new file mode 100644 index 0000000..ec95c6e --- /dev/null +++ b/webhook.py @@ -0,0 +1,64 @@ + +# https://github.com/Derpolino/discord-webhooks-python/blob/master/discordWebhooks.py + +import requests +import json + +# https://discordapp.com/developers/docs/resources/webhook#execute-webhook +class Webhook(): + + def __init__(self, url, **kwargs): + self.url = url + self.wh = { + "username": kwargs.get("username", None), + "avatar_url": kwargs.get("avatar_url", None), + "content": None, + "embeds": [] + } + + def add_embed(self, embed): + self.wh["embeds"].append(embed) + + def clear_embeds(self): + self.wh["embeds"] = [] + + def send(self, content=None, tts=False): + self.wh["content"] = content + self.wh["tts"] = tts + #print(self.wh) + + r = requests.post(self.url, json=self.wh) + + if r.text != "": + raise Exception("Webhook error: {0}".format(r.text)) + return True + + +# https://discordapp.com/developers/docs/resources/channel#embed-object +def embed(**kwargs): + return { + "title": kwargs.get("title", None), + "description": kwargs.get("description", None), + "url": kwargs.get("url", None), + "color": kwargs.get("color", None), + "footer": kwargs.get("footer", None), + "fields": kwargs.get("fields", []) + } + + +def field(name, value, inline=False): + return { + "name": name, + "value": value, + "inline": inline + } + + +def footer(text, icon_url): + return { + "text": text, + "icon_url": icon_url + } + + +__all__ = ["Webhook", "embed", "field", "footer"] diff --git a/wowprogress.py b/wowprogress.py new file mode 100755 index 0000000..3de64bc --- /dev/null +++ b/wowprogress.py @@ -0,0 +1,36 @@ +#! /usr/bin/python3 + +import redis +import time +import requests +import webhook +import conf + +now = time.time() + +wh = webhook.Webhook(conf.url_discord_webhook) + +r = redis.StrictRedis(host='localhost', charset="utf-8", decode_responses=True) + +wp_api = "http://www.wowprogress.com/guild/eu/dun-modr/VaGRaNT+SToRY/json_rank" + +rank = requests.get(url=wp_api).json() + +if rank is not None and "realm_rank" in rank: + last = r.get("bot:wowprogress") + realm = rank["realm_rank"] + msg = None + + if last is None: + msg = ":arrow_right: Vagrant entra en el ranking de Dun Modr: **{0}**".format(realm) + + elif int(last) > int(rank["realm_rank"]): + msg = ":arrow_up: Vagrant sube en el ranking de Dun Modr: **{0}** (+{1})".format(realm, int(last)-int(realm)) + + elif int(last) < int(realm): + msg = ":arrow_down: Vagrant baja en el ranking de Dun Modr: **{0}** (-{1})".format(realm, int(realm)-int(last)) + + r.set("bot:wowprogress", realm) + + if msg: + wh.send(msg)