The following rule is about send-message. This action can be used to send messages, which may include an embed, to a variety of destinations. It supports context variables for the destination (edit_message_id too) and the message content / embed.
In this example you will notice that this action supports two formats: simple (a YAML list [ ]) and more complex (a YAML map { }).
Note that when using the more complex format whitespace can be finicky: it is recommended that you use a YAML validator to preserve your sanity.
rank: 1name: message-testevent: on-messageif: - message-matches-any: [test send]do: - send-message: [$channel_id, hello] # Sends a message to the channel in the context - send-message: [$user_id, hello] # Sends a message to the user who triggered the rule - send-message: [133917673317401111, hello] # Sends a message to the specified id (channel or user) - send-message: [general, hello] # Sends a message to the specified channel (channel name) - send-message: {id: $channel_id, title: "My embed", description: "A simple embed"} # Sends a simple embed in the context's channel # The following one sends a (very complex) embed and it's done just to show the syntax # Note that NOT all fields are mandatory: just use the fields you need - send-message: id: $channel_id content: message content # content of the message author_name: $user author_url: $user_avatar_url author_icon_url: $user_avatar_url title: Have you ever wondered what happens if you use all the embed options? description: "Has science gone too far?" # description of the embed footer_text: "Made with Warden" footer_icon_url: $user_avatar_url image: $user_avatar_url add_timestamp: true # Add the current date / time to the embed thumbnail: $user_avatar_url url: $user_avatar_url color: 0x59FF00 # Use a HTML color picker for this, with due adjustments: #59FF00 -> 0x59FF00 fields: [{name: Some, value: might}, {name: think, value: so, inline: false}] # These are the embed fields, you can add more than 2... Or fewer. # edit_message_id: 123456 # You can also edit a message by passing a valid message ID here. Empty values will be ignored. # reply_message_id: 123456 # Reply to a message (ID). Must be in the same channel the message is being sent in # ping_on_reply: true # Whether to ping on reply or not
Notifying the staff
This rule shows how to use notify-staff and its many parameters
rank: 1name: notify-testevent: on-messageif: - message-matches-any: [test notify]do: - notify-staff: "hello" # A basic, text-only, message in the staff channel# An elaborate staff notification. It will send an embed containing the title + description, # a handy link to instantly jump to the message, support for quick reactions# and additional fields with information about the user / the channel - notify-staff: title: "Warning!" content: "A user is spamming" jump_to_ctx_message: true qa_target: $user_id # Quick action target qa_reason: "Spamming messages" # Quick action reason, optional no_repeat_for: 30 seconds # Ensures that this notif. won't be sent again in the next 30 secs no_repeat_key: $rule_name-1 # An unique key that identifies this notif., make sure to set this too# A notification that uses all the parameters for showing purposes. Only use the parameters you need - notify-staff: content: "A user is spamming" title: "Warning!" fields: - {name: "Field1", value: "Foo", inline: true} - {name: "Field2", value: "Bar", inline: true} add_ctx_fields: true thumbnail: $user_avatar_url footer_text: "my footer text" ping: true # Pings the staff role jump_to: channel_id: "$channel_id" message_id: "$message_id" # jump_to_ctx_message: true # This cannot be done if jump_to is used qa_target: $user_id qa_reason: Spamming no_repeat_for: 10 seconds no_repeat_key: $rule_name-2 allow_everyone_ping: false
A simple dehoister
This rule renames users who are attempting to hoist. Hoisting means prepending an exclamation mark to the username with the purpose of showing up at the top of the user list. This rule can also be manually run against every server member ([p]def warden run). Trusted users, staff and users who already have a nickname are ignored.
This rule prevents new users (rank 4) from sending attachments. Staff is also notified about the deletion and is being given precise context about where that happened.
rank: 4name: no-attachments-rank4event: [on-message, on-message-edit]if: - message-has-attachment: truedo: - delete-user-message: - send-message: [$channel_id, "$user_mention Sorry, you are not allowed to send attachments."] - notify-staff: title: "Attachment removed" content: "A new user attempted to send an attachment" jump_to_ctx_message: true add_ctx_fields: true no_repeat_for: 30 seconds no_repeat_key: $rule_name-1
Countering mass mentions
This rule bans any user (except trusted users and staff) who mentions at least 15 different people.
rank: 2name: mention-ban-rank2event: [on-message]if: - message-contains-more-than-unique-mentions: 14do: - ban-user-and-delete: 1 - send-mod-log: "User banned for mentioning too many people."
Taking action after multiple infractions
The following two rules take advantage of the heat level system to kick a user after 3 infractions. Notice the priority parameter in the first rule.
rank: 2name: bad-wordpriority: 1event: on-messageif: - message-matches-any: ["*b?d w?rd*"]do: - delete-user-message: - send-message: [$channel_id, "No bad word here!"] - add-user-heatpoint: 1h