# 토스트

토스트를 사용하면 커맨드에 다양한 기능을 추가할 수 있습니다.

# 커맨드

Toast의 모든 키워드, 연산자, 구문, 메서드는 커맨드입니다.

커맨드의 이름을 적고 그 뒤에 파라미터를 적어 커맨드를 사용할 수 있습니다. (괄호나 쉼표를 적지 않습니다.)

> send "Hello, world!"

커맨드를 파라미터로 사용할 수 있습니다.

> send len "Hello, world!"

# 그룹

가독성을 높이기 위해 파라미터를 그룹으로 묶을 수 있습니다.

> send (len "Hello, world!")

> send len ("Hello, world!")

# 타입

토스트에는 여러 타입이 있습니다.

# number

정수를 표현할 수 있는 숫자 타입입니다.

> 1
1
> -123
-123

# float

실수를 표현할 수 있는 숫자 타입입니다.

> 3.14
3.14
> -0.01
-0.01

# text

쌍따옴표(") 또는 따옴표(')로 둘러쌓여진 텍스트 타입입니다.

{, }를 사용해 문자열 포매팅을 사용할 수 있습니다.

> "Hello, World!"
Hello, World!
> 'Toast'
Toast
> "Hello, {1}"
Hello, 1

# boolean

참 또는 거짓을 나타내는 불리언 타입입니다.

> true
true
> false
false

# List

대괄호([ ])로 둘러싸이고 쉼표(,)로 구분되는 리스트 타입입니다.

> [1, 2, 3]
[1, 2, 3]
> ['Hello', 'World', 1, [1, 2, 3]]
[Hello, World, 1, [1, 2, 3]]

# function

함수입니다. 코드 여러 줄을 묶을 수 있습니다. 줄은 세미콜론으로 구분됩니다.

> () {
  print "Wa";
  print "sans"
}
function () { }

# null

비어있는 값을 나타냅니다

> null

# user

디스코드 유저를 저장하는 타입입니다.

# role

디스코드 역할을 저장하는 타입입니다.

# channel

디스코드 텍스트 채널을 저장하는 타입입니다.

# 형변환

Toast의 커맨드는 모두 파라미터와 리턴값의 타입이 미리 정해져있는 정적 타입 언어이기 때문에 명시적 형변환을 할 수 없습니다.

예를 들어 user 타입이 필요한 커맨드에 text 타입을 사용했다면 자동으로 해당 값을 user로 변환합니다.

> id of "OliveToast"
495209098929766400

다음 타입들은 모두 자동으로 변환됩니다.

any -> text
text -> number
text -> float
text -> list

text -> user : 유저네임, 닉네임, 맨션, id를 인식해 유저로 변환합니다.
number -> user : id를 사용해 유저로 변환합니다.

text -> channel : 채널이름, 맨션, id를 인식해 채널로 변환합니다.
number -> channel

text -> role
number -> role