Skip to content
This repository was archived by the owner on Jun 8, 2023. It is now read-only.
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
91 changes: 91 additions & 0 deletions src/scripts/chess.coffee
Original file line number Diff line number Diff line change
@@ -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 <to> - 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
13 changes: 8 additions & 5 deletions src/scripts/twss.coffee
Original file line number Diff line number Diff line change
Expand Up @@ -2,17 +2,20 @@
# Hubot will respond to (in)appropriate lines with "That's what she said"
#
# Dependencies:
# None
# twss
#
# Configuration:
# None
#
# Commands:
# hubot <anything related to size, speed, quality, specific body parts> - 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."