프로그래밍/RiveScript

[Tutorial] TAGS

프리월드 2017. 3. 9. 19:53

지금까지 우리는 RiveScript의 TAG에 대해서 공부 했습니다. 

우리가 공부했던  태그의 예는 <star><get>, {topic}입니다.

실제로는 이 보다 더 많은 태그가 있고 우리는 이를 사용할 수 있습니다!

이번에는 우리가 배우지 않은 태그와 태그 사용 방법을 배워보겠습니다. 

태그는 일반적으로 화살괄호(<>)안에 태그를 입력하는 형태로 사용이 되며 중괄호({})는 주변의 텍스를 수정하는데 사용이 됩니다. 태그는 일반적으로 특별히 명시된 경우를 제외하고 모든 RiveScript 명령과 함께 사용할 수 있습니다.

  • <botstar><botstar1> - <botstarN>

이 <star>태그는 와 비슷하지만 % Previous에 있는 와일드 카드를 가져옵니다. 다음은 그 예입니다.

+ i bought a new *
- Oh? What color is your new <star>?

+ (@colors)
% oh what color is your new *
- <star> is a pretty color for a <botstar>.

실제로 실행해보면 <botstar>태그는 이전의 트리거에 표시된 즉 %에 사용된 와일드카드를 가지고 오게 됩니다. "i bought a new car"라고 입력하게 되면 car = <star>가 됩니다. 그리고 "blue"라고 컬러 값을 입력 했을 때 blue = <star>가 되지만 이전에 car = <botstar>가 되게 됩니다. 잘 이해가 안 될 수도 있지만 자주 사용하다보면 어떤 식으로 구동하는지 잘 알 수 있을 것입니다. 물론 와일드 카드 수에 따라서 <botstar1>로 사용할 수 있습니다.

  • <input><reply>

<input>, <reply> 태그는 사용자 및 봇이 각각 보낸 이전 메시지를 표시하는데 사용됩니다. 이전의 9개 메시지까지가 저장이 되며 <input1> 에서 <input9>까지 <reply1>에서 <reply9>까지 사용이 가능합니다. 다음은 태그가 사용되는 몇가지 예제입니다.

// If the user repeats the bot's previous message
+ <reply>
- Don't repeat what I say.

// If the user keeps repeating themselves over and over.
+ <input1>
* <input1> == <input2> => That's the second time you've repeated yourself.
* <input1> == <input3> => If you repeat yourself again I'll stop talking.
* <input1> == <input4> => That's it. I'm not talking.{topic=sorry}
- Please don't repeat yourself.

// An example that uses both tags
+ why did you say that
- I said, "<reply>", because you said, "<input>".
  • <id>

<id>는 기본적으로  localuser이며 RiveScript는 사용자 ID를 통해서 여러 사용자를 구분합니다. 동일한 RiveScript 인터프리터를 사용하여 여러 사용자에 대한 응답을 제공 할 수 있으며 ID를 기반으로 사용자 변수를 별도로 유지합니다. 다음은 일반 사용자와 관리자를 구분하는 방법의 예입니다.

! var master = kirsle

+ am i your master
* <id> == <bot master> => Yes, you are. Hi Kirsle!
- No, <bot master> is my master, and you are <id>.
  • <bot>

<bot>태그는 봇 변수를 검색하는데 사용됩니다. 또한 봇 변수를 설정하는데 사용할 수도 있습니다. 봇 변수는 RiveScript 인터프리터 인스턴스에 대해 "전역"으로 간주 될 수 있습니다. 즉, 봇의 이름을 Aiden으로 설정하면 사용자의 ID와 상관없이 요청하는 모든 사람의 이름이 Aiden이됩니다. 이것은 특정 사용자 ID에 연결된 사용자 변수와 대조됩니다. 

+ what is your name
- You can call me <bot name>.

+ tell me about yourself
- I am <bot name>, a chatterbot written by <bot master>.

// Setting a bot variable dynamically
+ i hate you
- Aww! You've just ruined my day.<bot mood=depressed>
  • <env>

<env> 태그는 전역 변수를 검색하는 데 사용됩니다. 또한 전역 변수를 설정할 때도 사용할 수 있습니다.

예를 들어 RiveScript 인터프리터가 모든 환경 변수를 RiveScript 전역으로 복사하면 CGI 기반 RiveScript 봇이 사용자에게 자신의 IP 주소를 알릴 수 있습니다.

+ what is my ip
- Your IP address is: <env REMOTE_ADDR>

다음은 전역변수를 설정하는 방법에 대한 예제입니다. 이 예제에서 관리자는 디버그 모드를 켜거나 끌 수 있습니다.

+ set debug mode (true|false)
* <id> == <bot master> => <env debug=<star>>Debug mode set to <star>.
- You're not my master.
  • <add><sub><mult><div>

이 태그는 숫자 변수를 각각 더하거나 빼거나 곱하거나 나눌 수 있습니다.

+ give me 5 points
- <add points=5>You have been given 5 points. Your balance is: <get points>.

정의되지 않는 변수 예를 들어 points를 사용하면 기본 0으로 초기화됩니다. 그리고 숫자가 아닐시에는 오류가 발생합니다. 또한 이 태그는 + Trigger와 함께 사용할 수는 없습니다. 

<formal><sentence><uppercase><lowercase>

<formal>은 각 단어의 첫글자를 대문자로 만듭니다.

<sentence>는 첫 단어를 대문자로 만듭니다.

<uppercase><lowercase>전체 문자열을 대문자 또는 소문자로 만듭니다.

  • <call>

이 태그는 매크로를 호출하는 데 사용됩니다.

// Call a macro named "reverse" and give it an argument
+ say * to me in reverse
- <call>reverse <star></call>

다만 이 예제는 우리가 배우지 않은 "Object Macros"에 해당 되는 내용이기 때문에 자세한 내용은 다음에 다루도록 하겠습니다.



'프로그래밍 > RiveScript' 카테고리의 다른 글

[Tutorial] CONCLUSION  (0) 2017.03.09
[Tutorial] MORE DEFINITIONS  (0) 2017.03.09
[Tutorial] The Begin Block  (0) 2017.03.09
[Tutorial] Topics  (0) 2017.03.09
[Tutorial] Conditionals  (0) 2017.03.09