generator에서 hubot을 대화식으로 만들기
8152 단어 generatorHubotCoffeeScript
올바른 사용법은 모르지만 hubot에서 사용하면 대화 모드 바람이된다.
코드
calendar.coffee
module.exports = (robot) ->
cal = ->
title = yield 'Creating a schedule. \nWhat?'
attendees = yield 'With whom?'
date = yield 'When?'
while date == 'sat' or date == 'sun'
date = yield 'No meeting on weekend. When?'
place = yield 'Where?'
delete robot.cal
'Set ' + title + ' with ' + attendees+ ' on ' + date + ' at ' + place + '. Enjoy!'
next_value = (input) ->
robot.cal.next(input).value
# respond block
robot.respond /cal$/i, (msg) ->
robot.ignore_input = true
robot.cal = cal()
msg.send(next_value())
# hear block
robot.hear /(.*)\s*$/i, (msg) ->
if !('cal' of robot and robot.cal)
return
if 'ignore_input' of robot and robot.ignore_input
delete robot.ignore_input
return
msg.send(next_value msg.match[1])
robot.cal
로 등록됩니다. yield
에서 generator에서 호출자로 처리가 이동합니다. hear
마다 generator의 next
가 호출된다. 결과
컴파일
hubot의 거동 확인으로는 불필요하지만 처음에는 컴파일하면서 확인하는 것이 좋을지도 모른다.
ht tp // こっふぇえ sc pt. rg/ 의 TRY COFFEESCRIPT에서도 가능하고
/path/to/coffee -c scripts/calendar.coffee
에서도 가능.yield
를 넣어두면 자동으로 generator( function*
)가 생성되는 것이 미소.감상이라든가
yield
그리고 next
그렇다면, 단순한 입력 대기와 같은 느낌으로 사용할 수 있어 간편 robot.brain
하지만 힘내면 할 수 있을 것 같았지만, 프로세스 재기동으로 확실하게 거동을 전환해 주었으면 하기 때문에 우선 robot
의 멤버로서 보았다(지속화할 정도의 데이터는 취급하지 않는 전제 ) respond
와 hear
가 복수 매치 하는 경우, 코드에 쓴 순서로 불린다. 쓰는 순서를 바꾸면 파괴됩니다 respond
바로 뒤에 hear
라고도 불리지만 그대로 return해 주었으면 하는, 같은 불필요한 의도의 코드가 들어간다 환경 구축
본제가 아니다. 사용한 것은 이하의 버젼.
진짜로 generator를 유효하게 하는 곳에 사고팔고.
배드 노하우 같은 움직임이 있기 때문에 제대로 한 절차로하는 것은 일단 후회한다.
--harmony
옵션을 건네주고 싶지만, shebang에서는 파일명 이외의 인수를 건네줄 수 없었기 때문에 간접 파일을 만들어 호출한다. $ vi /path/to/node-harmony
#!/bin/bash
/path/to/node --harmony "$@"
$ vi /path/to/coffee
#!/usr/bin/env /path/to/node-harmony
(물론 패스를 통과해도 좋다고 생각한다)
참고로 한 정보
Reference
이 문제에 관하여(generator에서 hubot을 대화식으로 만들기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/satzz/items/0a5875fae0f5731cc8f8텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)