diff --git a/src/scripts/chess.coffee b/src/scripts/chess.coffee new file mode 100644 index 000000000..7981b535a --- /dev/null +++ b/src/scripts/chess.coffee @@ -0,0 +1,91 @@ +# Description: +# Play a game of chess! +# +# Dependencies: +# "chess": "0.1.3" +# +# Configuration: +# None +# +# Commands: +# hubot chess me - Creates a new game between yourself and another person in the room +# hubot chess status - Gets the current state of the board +# hubot chess move - Moves a piece to the coordinate position using standard chess notation +# +# Author: +# thallium205 +# + +Chess = require 'chess' + +module.exports = (robot) -> + robot.respond /chess me$/i, (msg) -> + robot.brain.data.chess = Chess.create() + boardToFen robot.brain.data.chess.getStatus(), (status, fen) -> + msg.send 'http://webchess.freehostia.com/diag/chessdiag.php?fen=' + encodeURIComponent(fen) + '&size=large&coord=yes&cap=yes&stm=yes&fb=no&theme=classic&format=auto&color1=E3CEAA&color2=635147&color3=000000&.png' + robot.respond /chess status/i, (msg) -> + try + boardToFen robot.brain.data.chess.getStatus(), (status, fen) -> + if status + msg.send status + msg.send 'http://webchess.freehostia.com/diag/chessdiag.php?fen=' + encodeURIComponent(fen) + '&size=large&coord=yes&cap=yes&stm=yes&fb=no&theme=classic&format=auto&color1=E3CEAA&color2=635147&color3=000000&.png' + catch e + msg.send e + + robot.respond /chess move (.*)/i, (msg) -> + try + robot.brain.data.chess.move msg.match[1] + boardToFen robot.brain.data.chess.getStatus(), (status, fen) -> + if status + msg.send status + msg.send 'http://webchess.freehostia.com/diag/chessdiag.php?fen=' + encodeURIComponent(fen) + '&size=large&coord=yes&cap=yes&stm=yes&fb=no&theme=classic&format=auto&color1=E3CEAA&color2=635147&color3=000000&.png' + catch e + msg.send e + +boardToFen = (status, callback) -> + fen = [[],[],[],[],[],[],[],[]] + blank = 0 + lastRank = 0 + for square in status.board.squares + if lastRank isnt square.rank + if blank isnt 0 + fen[lastRank - 1].push(blank) + blank = 0 + if square.piece is null + blank = blank + 1 + else + if square.piece.type is 'pawn' + if blank is 0 + fen[square.rank - 1].push(if square.piece.side.name is 'white' then 'P' else 'p') + else + fen[square.rank - 1].push(blank) + fen[square.rank - 1].push(if square.piece.side.name is 'white' then 'P' else 'p') + blank = 0 + else + if blank is 0 + fen[square.rank - 1].push(if square.piece.side.name is 'white' then square.piece.notation.toUpperCase() else square.piece.notation.toLowerCase()) + else + fen[square.rank - 1].push(blank) + fen[square.rank - 1].push(if square.piece.side.name is 'white' then square.piece.notation.toUpperCase() else square.piece.notation.toLowerCase()) + blank = 0 + lastRank = square.rank + for rank in fen + rank = rank.join() + fen = fen.reverse().join('/').replace(/,/g,'') + + msg = '' + if status.isCheck + msg += 'Check! ' + if status.isCheckmate + msg += 'Checkmate! ' + if status.isRepetition + msg += 'Threefold Repetition! A draw can be called. ' + if status.isStalemate + msg += 'Stalemate! ' + if Object.keys(status.notatedMoves).length > 0 + if status.notatedMoves[Object.keys(status.notatedMoves)[0]].src.piece.side.name is 'white' + fen += ' w'; + else + fen += ' b'; + + callback msg, fen \ No newline at end of file diff --git a/src/scripts/twss.coffee b/src/scripts/twss.coffee index c87bbd4d2..3384473b6 100644 --- a/src/scripts/twss.coffee +++ b/src/scripts/twss.coffee @@ -2,17 +2,20 @@ # Hubot will respond to (in)appropriate lines with "That's what she said" # # Dependencies: -# None +# twss # # Configuration: # None # # Commands: -# hubot - Hubot will "that's what she said" that ish +# Will listen for good opportunities to drop a twss joke. # # Author: -# dhchow +# thallium205 +twss = require('twss') +twss.threshold = .9 module.exports = (robot) -> - robot.respond /.*(big|small|long|hard|soft|mouth|face|good|fast|slow|in there|on there|in that|on that|wet|dry|on the|in the|suck|blow|jaw|all in|fit that|fit it|hurts|hot|huge|balls|stuck)/i, (msg) -> - msg.send "THAT'S WHAT SHE SAID!" + robot.hear /\S/, (msg) -> + if twss.is(msg.message.text) + msg.send "... that's what she said." \ No newline at end of file