Rule Examples
These are only a few examples of rules. If you want to share your own rules and show what can be achieved with the bot, head over to the “Share your Rules” discussion board and create a new discussion with the YAML definition and a description what your rule does.
Chat-addable generic text-respond-commands
- uuid: 688e631f-08a8-5544-b4b2-1737ea71ce00
description: Trigger Generic Command
actions:
- type: respond
attributes:
message: '{{ variable (list "genericcmd" .channel (group 1) | join ":") }}'
cooldown: 1m0s
match_channels:
- '#luziferus'
- '#tezrian'
match_message: '^!([^\s]+)(?: |$)'
disable_on_template: '{{ eq (variable (list "genericcmd" .channel (group 1) | join ":")) "" }}'
- uuid: ba4f7bb3-af39-5c57-bb97-216a8af69246
description: Set Generic Command
actions:
- type: setvariable
attributes:
set: '{{ group 2 }}'
variable: '{{ list "genericcmd" .channel (group 1) | join ":" }}'
- type: respond
attributes:
message: '[Admin] Set command !{{ group 1 }} to "{{ group 2 }}"'
match_channels:
- '#luziferus'
- '#tezrian'
match_message: ^!setcmd ([^\s]+) (.*)
enable_on:
- broadcaster
- moderator
- uuid: 21619e80-2c6a-536e-8b83-e5fe6c580356
description: Clear Generic Command
actions:
- type: setvariable
attributes:
clear: true
variable: '{{ list "genericcmd" .channel (group 1) | join ":" }}'
- type: respond
attributes:
message: '[Admin] Deleted command !{{ group 1 }}'
match_channels:
- '#luziferus'
- '#tezrian'
match_message: ^!clearcmd ([^\s]+)
enable_on:
- broadcaster
- moderator
Display Stream-Schedule in Chat
- actions:
- type: respond
attributes:
message: |-
{{- $segs := scheduleSegments .channel 3 -}}
{{- $fmtSegs := list -}}
{{- range $segs -}}
{{- $fmtSegs = mustAppend $fmtSegs (
printf "%s @ %s"
(.Category.Name)
(dateInZone "02.01. 15:40" .StartTime "Europe/Berlin")
) -}}
{{- end -}}
Next streams are: {{ $fmtSegs | join ", " }}
- See more in the Twitch schedule:
https://www.twitch.tv/{{ fixUsername .channel }}/schedule
match_message: '!schedule\b'
Game death counter with dynamic name
- actions:
- type: counter
attributes:
counter: '{{ channelCounter (recentGame .channel) }}'
- type: respond
attributes:
message: >-
I already died {{ counterValue (channelCounter (recentGame .channel)) }}
times in {{ recentGame .channel }}'
cooldown: 60s
enable_on: [broadcaster, moderator]
match_channels: ['#mychannel']
match_message: '^!death'
Notify Discord when stream is live
- actions:
- type: discordhook
attributes:
add_embed: true
avatar_url: '{{ profileImage .channel }}'
content: |
<@&123456789012345678> {{ displayName (fixUsername .channel) (fixUsername .channel) }}
is now live on https://www.twitch.tv/{{ fixUsername .channel }} - join us!
embed_author_icon_url: '{{ profileImage .channel }}'
embed_author_name: '{{ displayName (fixUsername .channel) (fixUsername .channel) }}'
embed_fields: |
{{
toJson (
list
(dict
"name" "Game"
"value" (recentGame .channel))
)
}}
embed_image: https://static-cdn.jtvnw.net/previews-ttv/live_user_{{ fixUsername .channel }}-1280x720.jpg
embed_thumbnail: '{{ profileImage .channel }}'
embed_title: '{{ recentTitle .channel }}'
embed_url: https://twitch.tv/{{ fixUsername .channel }}
hook_url: https://discord.com/api/webhooks/[...]/[...]
username: 'Stream-Live: {{ displayName (fixUsername .channel) (fixUsername .channel) }}'
match_event: stream_online
Post follow date for an user
- actions:
- type: respond
attributes:
message: 'You followed on {{ ( followDate .username ( fixUsername .channel ) ).Format "2006-01-02" }}'
match_channels: ['#mychannel']
match_message: '^!followage'
Respond to a message after random delay
- actions:
# Respond after 30-40s
- type: delay
attributes:
delay: 30s
jitter: 10s
- type: respond
attributes:
message: 'Hey {{ .username }}'
match_channels: ['#mychannel']
match_message: '^Hi'
Send a notification on successful permit
- actions:
- type: respond
attributes:
message: '{{ mention .to }}, you will not get timed out for the next {{ .permitTimeout }} seconds.'
match_channels: ['#mychannel']
match_event: 'permit'
Shoutout command with game query
- actions:
- type: respond
attributes:
message: >-
Check out @{{ fixUsername (group 1) }} and leave a follow,
they were last playing {{ recentGame (fixUsername (group 1)) "something mysterious" }}
at https://twitch.tv/{{ fixUsername (group 1) }}
enable_on: [broadcaster, moderator]
match_channels: ['#mychannel']
match_message: '^!so ([@\w]+)'
VIP of the Month
In this example a channel-point reward for one month of VIP status exists which is automated through the bot. To get the .reward_id
you can use the Debug-Overlay or just use the .reward_title
variable and check against the name of the reward.
- description: 'Channel-Point-Reward: VIP of the month'
actions:
- type: vip
attributes:
channel: '{{ .channel }}'
user: '{{ .user }}'
- type: customevent
attributes:
fields: |-
{{
toJson (
dict
"targetChannel" .channel
"targetUser" .user
"type" "timed_unvip"
)
}}
schedule_in: 744h
match_event: channelpoint_redeem
disable_on_template: '{{ ne .reward_id "aaa66d18-8dab-46f4-a222-6ff228f2fdfb" }}'
disable_on: [moderator, vip]
- description: 'Channel-Point-Reward: Remove VIP of the month'
actions:
- type: unvip
attributes:
channel: '{{ .targetChannel }}'
user: '{{ .targetUser }}'
match_event: custom
disable_on_template: '{{ ne .type "timed_unvip" }}'