All Projects → davidchambers → Tutor

davidchambers / Tutor

Licence: wtfpl
JavaScript interface for the Gatherer card database

Programming Languages

coffeescript
4710 projects

Projects that are alternatives of or similar to Tutor

mtga-utils
Magic the Gathering: Arena related stuff (Card collection export)
Stars: ✭ 47 (-69.08%)
Mutual labels:  magic-the-gathering
Scrython
A python wrapper for the Scryfall API
Stars: ✭ 87 (-42.76%)
Mutual labels:  magic-the-gathering
Mtgdesktopcompanion
Cards manager for magic the gathering
Stars: ✭ 44 (-71.05%)
Mutual labels:  magic-the-gathering
tts-deckconverter
Generate card decks for Tabletop Simulator.
Stars: ✭ 27 (-82.24%)
Mutual labels:  magic-the-gathering
grove
A computer implementation of a trading card game: Magic: The Gathering. The goal of the project is to implement ai algorithms which can play the game at the same level as a casual human player.
Stars: ✭ 76 (-50%)
Mutual labels:  magic-the-gathering
Docker Mtgo
Docker image with ready-to-play MTGO (Magic Online) for Linux and macOS
Stars: ✭ 275 (+80.92%)
Mutual labels:  magic-the-gathering
Mtgatracker
MTGATracker is a deck tracker for MTG Arena, offering an in-game overlay that shows real time info about your deck in MTGA. It can also record & analyze your past matches to show personal aggregated gameplay history information, like lifetime wins/losses by deck, by event, etc.
Stars: ✭ 232 (+52.63%)
Mutual labels:  magic-the-gathering
Whatsinstandard
a Magic: The Gathering format reference
Stars: ✭ 121 (-20.39%)
Mutual labels:  magic-the-gathering
landlord
Magic: The Gathering mulligan and card draw simulator
Stars: ✭ 16 (-89.47%)
Mutual labels:  magic-the-gathering
Manamoji Slack
Slack emojis for Magic card symbols. Used by Scryfall’s Slack bot.
Stars: ✭ 16 (-89.47%)
Mutual labels:  magic-the-gathering
mtgtools
collection of tools for easy handling of Magic: The Gathering data on your computer
Stars: ✭ 35 (-76.97%)
Mutual labels:  magic-the-gathering
python-mtga
MTGA set data & tooling for python
Stars: ✭ 18 (-88.16%)
Mutual labels:  magic-the-gathering
Mtg Arena Tool
An MTG Arena deck and statistics manager
Stars: ✭ 327 (+115.13%)
Mutual labels:  magic-the-gathering
mtgjson-website
MTGJSON Documentation Front-End Application built with Vuepress 1
Stars: ✭ 29 (-80.92%)
Mutual labels:  magic-the-gathering
Cockatrice
A cross-platform virtual tabletop for multiplayer card games
Stars: ✭ 1,053 (+592.76%)
Mutual labels:  magic-the-gathering
Wagic
Wagic the Homebrew
Stars: ✭ 242 (+59.21%)
Mutual labels:  magic-the-gathering
Keyrune
Magic: the Gathering set symbol pictographic font
Stars: ✭ 272 (+78.95%)
Mutual labels:  magic-the-gathering
Uicard
Generic UI for card games like Hearthstone, Magic Arena and Slay the Spire...
Stars: ✭ 142 (-6.58%)
Mutual labels:  magic-the-gathering
Mage
Magic Another Game Engine
Stars: ✭ 1,180 (+676.32%)
Mutual labels:  magic-the-gathering
Mtgjson3
MTGJSON repository for Magic Cards
Stars: ✭ 538 (+253.95%)
Mutual labels:  magic-the-gathering
Tutor

Build Status

Gatherer is the canonical source for Magic: The Gathering card details. While useful, it lacks an interface for retrieving this data programmatically. The lack of an API makes creating Magic-related applications unnecessarily difficult.

Tutor is a simple JavaScript interface for Gatherer.

API

tutor.card

tutor.card(id, callback(err, card))
tutor.card(name, callback(err, card))
tutor.card(details, callback(err, card))

The first and second forms are shorthand for tutor.card({id: id}, ...) and tutor.card({name: name}, ...) respectively. The callback is passed an object representing the specified card. Version-specific metadata such as flavor text and rarity are included for cards specified by id. Attributes not applicable to the card type (e.g. lands have no mana cost) or not present (e.g. certain creatures have no rules text) are omitted.

tutor.card 'Demonic Tutor', (err, card) ->
  console.log card.name
  # => "Demonic Tutor"
  console.log card.mana_cost
  # => "{1}{B}"
  console.log card.text
  # => "Search your library for a card, put that card into your hand, then shuffle your library."

Split cards

Because the two sides of a split card share a Gatherer id, it's necessary to provide the name of the desired side:

tutor.card id: 27165, name: 'Fire', (err, card) ->
  console.log card.name
  # => "Fire"

tutor.card id: 27165, name: 'Ice', (err, card) ->
  console.log card.name
  # => "Ice"

Retrieving either side of a split card by name is straightforward:

tutor.card 'Fire', (err, card) ->
  console.log card.name
  # => "Fire"

tutor.card 'Ice', (err, card) ->
  console.log card.name
  # => "Ice"

Flip cards

Retrieving the top half of a flip card by id is straightforward:

tutor.card 247175, (err, card) ->
  console.log card.name
  # => "Nezumi Graverobber"

Either half of a flip card can be retrieved explicitly by setting which to "a" (for the upper half) or "b" (for the lower half):

tutor.card id: 247175, which: 'b', (err, card) ->
  console.log card.name
  # => "Nighteyes the Desecrator"

When retrieving a flip card by name rather than id, one may simply provide the name of the desired half:

tutor.card 'Nighteyes the Desecrator', (err, card) ->
  console.log card.name
  # => "Nighteyes the Desecrator"

Double-faced cards

Either face of a double-faced card can be retrieved by id:

tutor.card 262675, (err, card) ->
  console.log card.name
  # => "Afflicted Deserter"

tutor.card 262698, (err, card) ->
  console.log card.name
  # => "Werewolf Ransacker"

Or by name:

tutor.card 'Afflicted Deserter', (err, card) ->
  console.log card.name
  # => "Afflicted Deserter"

tutor.card 'Werewolf Ransacker', (err, card) ->
  console.log card.name
  # => "Werewolf Ransacker"

tutor.set

tutor.set(name, callback(err, set))

Scrape cards from the set specified by name. For example:

tutor.set 'Homelands', (err, cards) ->
  console.log cards.length
  # => 115
  console.log Object.keys(cards[0]).sort()
  # => [
  #   "converted_mana_cost",
  #   "expansion",
  #   "gatherer_url",
  #   "image_url",
  #   "mana_cost",
  #   "name",
  #   "power",
  #   "rarity",
  #   "subtypes",
  #   "supertypes",
  #   "text",
  #   "toughness",
  #   "types",
  #   "versions"
  # ]

tutor.formats

tutor.formats(callback(err, formatNames))

Provides the names of all the game's formats:

tutor.formats (err, formatNames) ->
  console.log formatNames
  # => [
  #   "Brawl",
  #   "Commander",
  #   "Legacy",
  #   "Modern",
  #   "Pauper",
  #   "Standard",
  #   "Vintage"
  # ]

tutor.sets

tutor.sets(callback(err, setNames))

Provides the names of all the game's sets:

tutor.sets (err, setNames) ->
  console.log setNames
  # => [
  #   "Aether Revolt"
  #   "Alara Reborn",
  #   ...
  #   "Zendikar",
  #   "Zendikar Expeditions"
  # ]

tutor.types

tutor.types(callback(err, types))

Provides the names of all the game's types:

tutor.types (err, types) ->
  console.log types
  # => [
  #   "Artifact",
  #   "Basic",
  #   ...
  #   "World",
  #   "You'll"
  # ]

CLI

npm install tutor --global will make the tutor command available globally.

$ tutor card 'Demonic Tutor'
Demonic Tutor {1}{B} Search your library for a card, put that card into your hand, then shuffle your library.

$ tutor card 'Demonic Tutor' --format json | jq '{name,mana_cost,types,text}'
{
  "name": "Demonic Tutor",
  "mana_cost": "{1}{B}",
  "types": [
    "Sorcery"
  ],
  "text": "Search your library for a card, put that card into your hand, then shuffle your library."
}

$ tutor card 666 --format json | jq '{name,mana_cost,types,text}'
{
  "name": "Lich",
  "mana_cost": "{B}{B}{B}{B}",
  "types": [
    "Enchantment"
  ],
  "text": "As Lich enters the battlefield, you lose life equal to your life total.\n\nYou don't lose the game for having 0 or less life.\n\nIf you would gain life, draw that many cards instead.\n\nWhenever you're dealt damage, sacrifice that many nontoken permanents. If you can't, you lose the game.\n\nWhen Lich is put into a graveyard from the battlefield, you lose the game."
}

$ tutor set Alliances | head -n 2
Aesthir Glider {3} 2/1 Flying Aesthir Glider can't block.
Agent of Stromgald {R} 1/1 {R}: Add {B}.

Example of using the CLI from other applications:

Link to Wiki

Running the tests

$ make --jobs="$(nproc)" fixtures
$ make test
$ make testcli
Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].