HyperNerd
1.0.0
Tsoder의 두 번째 반복. Tsoding 스트림용 채팅 봇.
우리는 nixpkgs의 Haskell 패키지를 사용하지 않는다는 점을 명심하세요. 모든 종속성은 빌드 중에 cabal 또는 스택에 의해 다운로드되어야 합니다.
$ nix-shell
$ cabal sandbox init
$ cabal install happy-1.19.9
$ cabal install --only-dependencies --enable-tests
$ cabal build
$ cabal test
$ cabal run HyperNerd secret.ini database.db
자세한 내용은 Nix 스타일 로컬 빌드를 참조하세요.
$ nix-shell
$ cabal v2-build
$ cabal v2-test
$ cabal v2-run exe:HyperNerd secret.ini database.db
기본 종속성:
$ stack build
$ stack exec hlint .
$ stack exec HyperNerd secret.ini database.db
secret.ini
파일은 세 가지 선택적 섹션으로 구성됩니다.
[twitch]
nick = HyperNerd
channel = Tsoding
password =
clientId =
owner =
[discord]
authToken =
guild =
channels = [, , ... ]
[github]
apiKey =
이름 | 설명 |
---|---|
nick | 봇의 별명입니다. |
owner | 봇의 소유자입니다. 봇은 모드나 방송자가 아니더라도 이 이름을 권위자로 인식합니다. |
password | https://twitchapps.com/tmi/에서 생성된 비밀번호. oauth: 접두사는 비밀번호의 일부입니다. |
channel | 시작 시 봇이 참여할 채널입니다. |
clientId | Twitch API 호출을 위한 클라이언트 ID입니다. |
이름 | 설명 |
---|---|
authToken | 봇용 인증 토큰: https://github.com/reactiflux/discord-irc/wiki/Creating-a-discord-bot-&-getting-a-token |
guild | 봇이 듣고 있는 길드의 아이디 |
channels | 봇이 청취하는 채널의 ID 목록(목록은 Haskell 목록으로 구문 분석됩니다: [ ) |
이름 | 설명 |
---|---|
apiToken | https://help.github.com/en/articles/creating-a-personal-access-token-for-the-command-line |
docker-compose.yaml
에 정의된 볼륨에 비밀이 존재하는 경우,
$ docker-compose up --build
$ docker build --target app -t hypernerd .
$ mkdir hypernerd-state
$ cp secret.ini hypernerd-state
$ docker create -v /absolute/path/to/hypernerd-state/:/tmp/hypernerd/
--name hypernerd-bot hypernerd
$ docker start -a hypernerd-bot
$ docker stop hypernerd-bot
$ docker exec -it hypernerd-bot sh
Markov 체인 응답을 트리거하려면 채팅에서 봇을 언급하기만 하면 됩니다.
Markov 모델은 Markov
CLI 유틸리티를 사용하여 봇 데이터베이스 파일의 로그에서 생성된 csv 파일입니다.
$ cabal exec Markov train database.db markov.csv
이 명령은 markov.csv
파일을 생성합니다.
$ cabal exec HyperNerd secret.ini database.db markov.csv
markov.csv
파일은 자동으로 업데이트되지 않습니다. 새 로그로 파일을 업데이트하려면 Markov
CLI 유틸리티를 다시 실행해야 합니다.
모든 명령에 명령 별칭을 할당할 수 있습니다.
!test
test
!addalias foo test
!foo
test
별칭은 한 수준 깊이로만 "리디렉션"됩니다. 즉, 전이 별칭이 지원되지 않습니다.
!addalias bar foo
!bar
*nothing, because !bar is redirected to !foo, but further redirect from !foo to !test does not happen*
전이적 별칭을 지원하지 않는 이유는 다음과 같습니다.
!addquote
-- 견적 데이터베이스에 견적을 추가합니다. 서브와 모드에서만 사용할 수 있습니다.!delquote
-- ID별로 인용문을 삭제합니다. Tsoding에만 사용 가능합니다.!quote [quote-id]
- 견적 데이터베이스에서 견적을 쿼리합니다. 다음을 통해 내 작업을 지원할 수 있습니다.