background
AutoResponder - Ducky
Công Cụ AutoResponder (AR)

AutoResponder - Tự Động Phản Hồi

Hệ thống giúp Ducky tự trò chuyện, phản hồi dựa trên quy tắc bạn đặt ra.

AutoResponder (AR) là gì?
Đây là tính năng cực kỳ mạnh mẽ giúp Bot tự động "bắt từ khóa" (trigger) trong tin nhắn của User và "phản hồi" (response) theo kịch bản bạn đã cài đặt trước.
Bạn có thể dùng AR để làm lời chào tự động, mini-game, thông báo, hoặc hệ thống chặn/phản hồi lệnh ẩn rảnh tay cho Server!

Phạm vi: Những quy tắc này (rules) chỉ hoạt động riêng biệt trong Server của bạn.

Cách Tạo Một Rule Đơn Giản Nhất

Luật trả lời AR gồm 2 phần bị ngăn cách bởi dấu gạch đứng | (phím Shift + \ trên bàn phím).

Cấu trúc chuẩn:

mar add <từ_khóa> | <câu_trả_lời>
Admin Hôm nay lúc 10:00
mar add chào bot | Chào {user}, bạn ăn cơm chưa?
Ducky BOT Hôm nay lúc 10:00
Đã thêm AutoResponder thành công!

Ngay sau đó, mỗi khi có ai chat cụm từ "chào bot":

Member Dễ Thương Hôm nay lúc 10:05
hello mọi người, chào bot nha!
Ducky BOT Hôm nay lúc 10:05
Chào @Member Dễ Thương, bạn ăn cơm chưa?

Cấu Hình Đầy Đủ ar add / ar edit

Phần này tổng hợp toàn bộ tùy chọn thiết lập hiện có để bạn copy nhanh và tránh thiếu tham số khi vận hành.

1) ar add (tạo mới)

Cú pháp: <prefix>ar add <trigger> | <response> [--type=...] [--priority=...] [--cooldown=...] [--case=...] [--reply=...]
Tùy chọn Mô tả
--type=exact|contains|startswith|regex Chọn kiểu khớp trigger. Mặc định: exact.
--priority=<số> Độ ưu tiên chọn rule (số càng cao càng được ưu tiên). Mặc định: 0.
--cooldown=<user>[,<global>] Hồi chiêu theo giây. Hỗ trợ tách bằng ,, / hoặc :. Ví dụ: 10,60.
--case=true|false Bật/tắt phân biệt hoa thường. Mặc định: false. Với --type=regex, --case=false sẽ khớp regex không phân biệt hoa/thường.
--reply=true|false Gửi phản hồi ở dạng reply. Mặc định: false.
Case mẫu: mar add .hug | Oke --type=startswith --priority=10 --cooldown=15,60 --case=false --reply=true
Giải thích nhanh: khớp đầu câu, ưu tiên cao, user cooldown 15s, global cooldown 60s, không phân biệt hoa thường, bot phản hồi dạng reply.

2) ar edit (chỉnh sửa)

Cú pháp: <prefix>ar edit <id> field=value [field=value ...]
ID có thể dùng đầy đủ hoặc rút gọn từ 4 ký tự đầu. Giá trị có khoảng trắng nên đặt trong dấu ngoặc kép.
Field Mô tả
trigger=<chuỗi>Thay trigger.
response=<chuỗi> hoặc response_raw=<chuỗi>Thay nội dung phản hồi.
type=... / match_type=...Đổi kiểu khớp: exact, contains, startswith, regex.
case=... / case_sensitive=...Bật/tắt phân biệt hoa thường; với rule regex thì false nghĩa là so khớp không phân biệt hoa/thường.
priority=<số>Đổi độ ưu tiên.
enabled=true|falseBật/tắt rule.
reply=true|falseBật/tắt reply mode.
delete_trigger=true|falseXóa tin nhắn gốc sau khi kích hoạt.
cooldown=... / cooldown_user_global=...Đặt đồng thời cooldown user và global.
cooldown_user=<số>Đặt cooldown user riêng.
cooldown_global=<số>Đặt cooldown global riêng.
channels=<id1,id2,...>Whitelist kênh được phép kích hoạt.
blacklist_channels=<id1,id2,...>Danh sách kênh bị chặn.
roles=<id1,id2,...>Chỉ role này mới kích hoạt được.
ignore_roles=<id1,id2,...>Role này sẽ bị bỏ qua kích hoạt.
Case mẫu: mar edit abcd1234 type=contains priority=20
Case mẫu: mar edit abcd1234 response="Xin chao ban"
Case mẫu: mar edit abcd1234 cooldown=10,60
Case mẫu: mar edit abcd1234 channels=123,456 ignore_roles=789

Danh Sách Lệnh Quản Trị Server

Nhắc nhở Prefix quan trọng: Mặc định lệnh của bot bắt đầu bằng m (ví dụ: mar).
Nếu Server của bạn đã đổi Prefix lệnh (ví dụ đổi thành !), bạn PHẢI thay thế chữ m bằng Prefix của server bạn (Ví dụ: !ar).

Các lệnh thao tác với rules

Các lệnh này yêu cầu bạn có quyền Manage Guild (Quản Lý Server).

Lệnh Chức năng
mar Mở Bảng Điểu Khiển (Menu UI) trực quan để bạn Bật/Tắt, Chỉnh sửa, Quản lý toàn bộ Rules dễ dàng qua Nút Bấm.
mar add <trigger> | <response> Tạo Nhanh một rule mới. (Ví dụ: mar add ping | pong)
mar edit <ID> Chỉnh sửa trực tiếp bằng cú pháp field=value (ví dụ: mar edit abcd response="Xin chào" priority=20).
mar delete <ID> Xóa nhổ rễ hoàn toàn rule đó khỏi server.
mar list Hiển thị danh sách tất cả các rule kèm ID hiện có ở server.
mar info <ID> Xem chi tiết của luật (nội dung gốc, số lượt dùng, độ ưu tiên...).
mar enable <ID> Bật hoạt động lại rule đang bị tắt.
mar disable <ID> Tạm tắt (Vô hiệu hóa) rule, người chat sẽ không kích hoạt được rule này nữa.
mar test <kịch bản chat> Test / Debug giả lập xem khi chat chữ này bot sẽ phản hồi rule nào, tin nhắn hiển thị ra sao (Không test cooldown hay bị cộng lượt).
mar help Hiển thị trợ giúp đầy đủ cho nhóm lệnh AutoResponder.

Lưu ý: mar edit, mar delete, mar enable, mar disable, mar info hỗ trợ ID rút gọn (tối thiểu 4 ký tự đầu).

Preview thao tác nhanh (demo - có thể sẽ khác so với thực tế)

Admin Hôm nay lúc 10:12
mar add ping | pong
Ducky BOT Hôm nay lúc 10:12
Đã thêm rule mới. ID: 7f3a
Admin Hôm nay lúc 10:14
mar edit 7f3a
Ducky BOT Hôm nay lúc 10:14
Đã cập nhật rule 7f3a: type=contains, priority=20.
Admin Hôm nay lúc 10:16
mar disable 7f3a
Ducky BOT Hôm nay lúc 10:16
Đã tắt rule 7f3a.
Admin Hôm nay lúc 10:17
mar enable 7f3a
Ducky BOT Hôm nay lúc 10:17
Đã bật lại rule 7f3a.
Admin Hôm nay lúc 10:19
mar delete 7f3a
Ducky BOT Hôm nay lúc 10:19
Đã xóa rule 7f3a khỏi server.

Flags & Cú Pháp Lệnh

Tab này tập trung riêng vào cờ lệnh (flags) của ar add, cách parse thực tế và các lưu ý để không bị lệch hành vi runtime.

Phạm vi hỗ trợ flags:
AR hiện chỉ parse 5 cờ sau cho ar add: --type, --priority, --cooldown, --case, --reply. Các cờ khác không nằm trong danh sách này sẽ không được engine tách ra như một flag hợp lệ.

Bảng Flags Đầy Đủ (ar add)

Flag Giá trị hợp lệ Mặc định Mô tả thực tế
--type=... exact, contains, startswith, regex exact Chọn kiểu match trigger. Nếu là regex, trigger sẽ được compile ngay lúc tạo rule.
--priority=... Số nguyên 0 Rule có priority cao hơn được xét trước khi tranh thắng với rule khác.
--cooldown=... user hoặc user,global (hỗ trợ , / :) 0,0 Nếu truyền 1 số thì chỉ set cooldown user, global sẽ là 0.
--case=... true/false, 1/0, yes/no, on/off false Bật/tắt phân biệt hoa thường. Với regex: false chạy theo kiểu không phân biệt hoa/thường.
--reply=... true/false, 1/0, yes/no, on/off false Bật chế độ phản hồi bằng reply vào đúng tin nhắn vừa kích hoạt.

Luật Parse Flags (Rất Quan Trọng)

  • Bắt buộc dùng định dạng --flag=value (không dùng dạng tách rời như --flag value).
  • Giá trị flag không chứa khoảng trắng trực tiếp, vì parser lấy theo cụm ký tự liền nhau sau dấu =.
  • Nếu một flag lặp lại nhiều lần, giá trị xuất hiện sau cùng sẽ ghi đè giá trị trước đó.
  • Sau khi tách flags, phần lệnh còn lại mới được tách theo cấu trúc trigger | response.
  • ar edit không dùng cờ --...; lệnh này dùng chuẩn field=value.
Ví dụ chuẩn: mar add hello | Xin chào --type=startswith --priority=15 --cooldown=10,60 --case=false --reply=true
Ý nghĩa: khớp đầu câu, priority 15, cooldown user 10s/global 60s, không phân biệt hoa thường, phản hồi theo dạng reply.

Mockup Thực Chiến Flags

Sử dụng lệnh: mar add .ping | pong --type=startswith --priority=25 --cooldown=5,20 --case=false --reply=true
Giải thích tham số: --type=startswith khớp đầu câu, --priority=25 ưu tiên cao, --cooldown=5,20 là user/global, --case=false không phân biệt hoa thường, --reply=true trả lời dạng reply.
Member A Hôm nay lúc 14:21
.ping test
Ducky BOT Hôm nay lúc 14:21
pong
--type=startswith, nội dung .ping test vẫn kích hoạt rule.
Sử dụng lệnh: mar add HELLO | Xin chào --type=exact --case=true --reply=false
Giải thích tham số: --type=exact buộc khớp toàn bộ, --case=true phân biệt hoa/thường, --reply=false gửi message thường thay vì reply.
Member B Hôm nay lúc 14:24
hello
Ducky BOT Hôm nay lúc 14:24
Không phản hồi vì --case=true nên hello khác HELLO.
Sử dụng lệnh: mar add xin chào | Chào bạn nè --type=contains --priority=5 --case=false
Giải thích tham số: --type=contains chỉ cần chuỗi xuất hiện ở giữa câu, --priority=5 mức ưu tiên trung bình, --case=false không phân biệt hoa/thường.
Member C Hôm nay lúc 14:28
Mọi người ơi, XIN CHÀO cả nhà
Ducky BOT Hôm nay lúc 14:28
Chào bạn nè
Sử dụng lệnh: mar add abc-123 | Mã hợp lệ --type=regex --case=false --priority=18
Giải thích tham số: --type=regex dùng biểu thức chính quy, --case=false compile với cờ không phân biệt hoa/thường, --priority=18 tăng quyền thắng khi đụng rule khác.
Member D Hôm nay lúc 14:31
ABC-123
Ducky BOT Hôm nay lúc 14:31
Mã hợp lệ
Sử dụng lệnh: mar add roll | Lăn xúc xắc --cooldown=10/60 --type=exact
Giải thích tham số: --cooldown=10/60 dùng dấu / vẫn hợp lệ và được hiểu là user/global = 10/60 giây.
Member E Hôm nay lúc 14:35
roll
Ducky BOT Hôm nay lúc 14:35
Lăn xúc xắc
Sử dụng lệnh: mar add luck | Chúc may mắn --cooldown=12 --priority=3
Giải thích tham số: khi chỉ truyền 1 số ở --cooldown=12, engine hiểu là cooldown user = 12 giây và global = 0.
Member F Hôm nay lúc 14:38
luck
Ducky BOT Hôm nay lúc 14:38
Chúc may mắn
Sử dụng lệnh: mar add cảnh báo | Không spam --priority=5 --priority=40 --reply=true
Giải thích tham số: cùng một flag xuất hiện nhiều lần thì giá trị sau cùng được dùng; trong ví dụ này priority thực nhận là 40.
Member G Hôm nay lúc 14:42
cảnh báo
Ducky BOT Hôm nay lúc 14:42
Không spam

Biến Số Text (Placeholders)

Placeholder là các thẻ từ khóa thông minh, giúp bot bóc tách dự liệu động như Tên, ID, hay nhắc tên người dùng. Hãy bọc chúng trong ngoặc nhọn {}.

Tuân thủ dấu cú pháp: Bạn PHẢI bọc chính xác ký tự ngoặc nhọn quanh thẻ để bot có thể thay thế kết quả.

Thông Tin Người Chat

ThẻKết Quả Hiển Thị Thực Tế
{user}Tag trực tiếp người gửi: @Ktmjn
{user_name}Chỉ hiện Tên gọi: Ktmjn
{user_tag}Tên kèm tag Discord gốc: Ktmjn#1234
{user_avatar}URL Link hình đại diện của người đó.
Sử dụng lệnh: mar add hello bot | Xin chào {user} | Tên: {user_name} | Tag: {user_tag} | Ảnh đại diện: {user_avatar}
Giải thích tham số: {user} là mention, {user_name} là tên hiển thị, {user_tag} là tên#tag, {user_avatar} là URL avatar.
Ktmjn Hôm nay lúc 11:02
hello bot
Ducky BOT Hôm nay lúc 11:02
Xin chào @Ktmjn | Tên: Ktmjn | Tag: Ktmjn#1234 | Ảnh đại diện: https://cdn.discordapp.com/avatars/123/abc.png

Thông Tin Server

ThẻKết Quả Hiển Thị Thực Tế
{server_name}Tên nhóm: Chill Corner
{server_id}Dãy mã ID (VD: 141563...)
{server_membercount}Tổng số thành viên (VD: 15402)
{server_botcount}Tính số lượng bot trong server
{server_icon}URL Link ảnh đại diện server
{server_randommember}Tag hú họa 1 người online: @MGL Team
Sử dụng lệnh: mar add serverinfo | Tên server: {server_name} | ID: {server_id} | Thành viên: {server_membercount} | Bot: {server_botcount} | Random: {server_randommember} | Icon server: {server_icon}
Giải thích tham số: {server_name} là tên server, {server_id} là ID, {server_membercount}/{server_botcount} là số lượng, {server_randommember} là mention ngẫu nhiên, {server_icon} là URL icon.
Member Hôm nay lúc 11:05
serverinfo
Ducky BOT Hôm nay lúc 11:05
Tên server: Chill Corner | ID: 141563000000000000 | Thành viên: 15402 | Bot: 37 | Random: @MGL Team | Icon server: https://cdn.discordapp.com/icons/141563000000000000/icon.png

Thông Tin Kênh Chat (Channel)

{channel}Hiện tag kênh xanh lè: #general
{channel_name}Chỉ chữ: general
Sử dụng lệnh: mar add channelinfo | Kênh hiện tại: {channel} | Tên kênh: {channel_name}
Giải thích tham số: {channel} là mention kênh, {channel_name} là tên kênh.
Hana Hôm nay lúc 11:08
channelinfo
Ducky BOT Hôm nay lúc 11:08
Kênh hiện tại: #general | Tên kênh: general

Lấy Ký Tự Phía Sau (Cực Kỳ Hữu Ích!)

Sử dụng [$1], [$2], [$3] để ép bot nhặt lấy từng từ mà người dùng gõ vào phía đằng sau trigger.

Sử dụng lệnh: mar add tán tỉnh | {user} đã thả thính [$1] vì thấy [$1] quá ngon!
Giải thích tham số: {user} là mention người dùng, [$1] là từ đầu tiên sau trigger.
Zuka
tán tỉnh @Ducky
Ducky BOT
@Zuka đã thả thính @Ducky vì thấy @Ducky quá ngon!
Sử dụng lệnh: mar add nói lại | Nói lại: [$1+]
Giải thích tham số: [$1+] lấy toàn bộ phần sau trigger.
Rin
nói lại hôm nay trời đẹp quá
Ducky BOT
Nói lại: hôm nay trời đẹp quá
Sử dụng lệnh: mar add trích | Trích đoạn: [$1-2]
Giải thích tham số: [$1-2] lấy 2 từ đầu tiên sau trigger.
Lumi
trích đây là demo
Ducky BOT
Trích đoạn: đây là

Tính Năng Khối (Functions / Điều Kiện)

Chỉ định cụ thể điều kiện đầu vào của từ khóa, xử lý giới hạn, hoặc thiết lập hành vi biến đổi dữ liệu một cách độc đáo.

1. Khối Điều Kiện & Xin Phép (Requires & Deny)

Bot sẽ ngay tức khắc phớt lờ lệnh nếu người gọi không vượt qua bộ lọc khắt khe này.

{requireuser:ID}Chỉ phản hồi nếu người chat có User ID này.
{requirerole:ID}Phải có Role ID này trở lên bot mới chịu mở miệng.
{requirechannel:ID}Rule này chỉ hoạt động ở duy nhất Kênh (Channel ID) này. Vd: Kênh Mini-game.
{denyrole:ID}Quyền cấm: Ai có Role ID này thì không được kích hoạt thuật ngữ này!
{denychannel:ID}Khóa mõm kênh: Block bot bắt Rule này ở kênh có ID cụ thể.
Sử dụng lệnh: mar add chào | {requireuser:123456789} Xin chào chủ nhân!
Giải thích tham số: {requireuser:ID} chỉ cho phép đúng user ID.
Ktmjn (ID đúng) Hôm nay lúc 12:01
chào
Ducky BOT
Xin chào chủ nhân!
Sử dụng lệnh: mar add vip check | {requirerole:888888} Bạn là VIP!
Giải thích tham số: {requirerole:ID} yêu cầu người dùng có role ID này.
VIP Member Hôm nay lúc 12:02
vip check
Ducky BOT
Bạn là VIP!
Sử dụng lệnh: mar add start | {requirechannel:555555} Quay thưởng bắt đầu!
Giải thích tham số: {requirechannel:ID} chỉ chạy trong kênh có ID này.
Kênh #mini-game
Game Master Hôm nay lúc 12:03
start
Ducky BOT
Quay thưởng bắt đầu!
Sử dụng lệnh: mar add xin thử | {denyrole:777777} Bạn đã bị chặn quyền dùng lệnh.
Giải thích tham số: {denyrole:ID} chặn người có role ID.
User bị cấm Hôm nay lúc 12:05
xin thử
(Không có phản hồi do {denyrole:777777})
Sử dụng lệnh: mar add dùng thử | {denychannel:999999} Lệnh này bị khóa ở kênh này.
Giải thích tham số: {denychannel:ID} chặn kích hoạt trong kênh ID này.
Kênh #spam
Member Hôm nay lúc 12:06
dùng thử
(Không có phản hồi do {denychannel:999999})

2. Hành Động Kiểm Soát Trả Lời (Modifiers)

Nhóm lệnh này quyết định cách bot gửi phản hồi: trả lời trực tiếp, chuyển kênh, nhắn riêng, tự xóa hoặc giới hạn tần suất.

  • {reply} : Trả lời trực tiếp vào tin nhắn kích hoạt (reply), không gửi tin mới tách riêng.
  • {dm} : Gửi phản hồi vào tin nhắn riêng (DM) của người dùng, hạn chế làm rối kênh.
  • {sendto:ID_Kênh} : Chuyển phản hồi sang kênh khác theo ID kênh chỉ định.
  • {delete} : Xóa ngay tin nhắn gốc của người kích hoạt sau khi bot xử lý.
  • {delete_reply:Số_giây} : Tự xóa tin phản hồi của bot sau X giây.
  • {silent} : Tắt ping; mention chỉ hiển thị chữ nhưng không gửi thông báo.
  • {cooldown:Số_giây} : Giới hạn tần suất dùng rule; phải chờ X giây mới kích hoạt lại.
Sử dụng lệnh: mar add ping | {reply} pong
Giải thích tham số: {reply} buộc bot trả lời trực tiếp vào tin nhắn.
User Hôm nay lúc 12:10
ping
Ducky BOT
pong
Sử dụng lệnh: mar add dm thử | {dm} Mình nhắn riêng nhé!
Giải thích tham số: {dm} gửi phản hồi vào tin nhắn riêng.
Tin nhắn riêng (DM)
User Hôm nay lúc 12:11
dm thử
Ducky BOT
Mình nhắn riêng nhé!
Sử dụng lệnh: mar add report | {sendto:333333} Báo cáo từ {user_name}: [$1+]
Giải thích tham số: {sendto:ID} chuyển kênh, {user_name} là tên người gửi, [$1+] là toàn bộ phần sau trigger.
Kênh #general
Mod Hôm nay lúc 12:12
report user spam
Kênh #log
Ducky BOT
Báo cáo từ Mod: user spam
Sử dụng lệnh: mar add temp | {delete}{delete_reply:5} Tin này sẽ tự xóa
Giải thích tham số: {delete} xóa tin gốc, {delete_reply:5} xóa phản hồi sau 5 giây.
Member Hôm nay lúc 12:13
temp
Ducky BOT
Tin này sẽ tự xóa
*Tin nhắn gốc đã bị xóa và phản hồi tự hủy sau 5 giây.
Sử dụng lệnh: mar add hello | {silent} Xin chào {user}
Giải thích tham số: {silent} tắt ping, {user} là mention người dùng.
Hana Hôm nay lúc 12:14
hello
Ducky BOT
Xin chào @Hana
*Không ping dù có mention.
Sử dụng lệnh: mar add spam | {cooldown:10} Bạn dùng lệnh quá nhanh!
Giải thích tham số: {cooldown:10} yêu cầu chờ 10 giây mới dùng lại.
User Hôm nay lúc 12:15
spam
Ducky BOT
Bạn dùng lệnh quá nhanh!
User Hôm nay lúc 12:15
spam
(Không phản hồi do đang trong thời gian cooldown)

3. Logic Ngẫu Nhiên (Random / Mini-games)

Bộ 3 quyền lực giúp bạn thiết kế những lệnh Gacha / Xem bói / Quay ngẫu nhiên trong Text. Bắt buộc phải gắn kèm placeholder tương ứng ([choice] hoặc [range]) để bot xả Output ra khung chat.

Hàm: {choose:A|B|C} kết hợp [choice]

Bot sẽ bốc bừa 1 trong các chữ nằm giữa dấu |. Nhớ xuất nó ra bằng [choice] nhé!

Sử dụng lệnh: mar add kbb | {choose:Kéo|Búa|Bao} Trọng tài Ducky ra: [choice]
Giải thích tham số: {choose:A|B|C} chọn 1 kết quả, [choice] là kết quả đã chọn. Kết quả mẫu: Trọng tài Ducky ra: Bao.
Hàm: {range:MIN-MAX} kết hợp [range]

Random ra mã số từ Min tới Max.

Sử dụng lệnh: mar add xem điểm | {range:1-100} Định mệnh của {user} sẽ quay vào ô [range]/100 điểm.
Giải thích tham số: {range:MIN-MAX} tạo số ngẫu nhiên, [range] là số đã tạo, {user} là mention. Kết quả mẫu: Định mệnh của @Ktmjn sẽ quay vào ô 77/100 điểm.
Hàm: {weightedchoose:%99 A|%1 B} kết hợp [choice]

Như cục Xí ngầu ăn gian. Đặt tỉ lệ ra chữ A nhiều hơn chữ B! Tỷ lệ là số (Lớn = Dễ ra).

Sử dụng lệnh: mar add loot | {weightedchoose:%99 Bạn Mất Hết Tiền|%1 Bạn Trúng Jackpot} [choice]
Giải thích tham số: mỗi lựa chọn đặt trọng số bằng tiền tố % (nếu không có thì mặc định là 1), [choice] là kết quả. Kết quả mẫu (99%): Bạn Mất Hết Tiền.
Sử dụng lệnh: mar add kbb | {choose:Kéo|Búa|Bao} Trọng tài ra: [choice]
Giải thích tham số: {choose:...} chọn 1 kết quả, [choice] là kết quả.
User Hôm nay lúc 12:20
kbb
Ducky BOT
Trọng tài ra: Bao
Sử dụng lệnh: mar add xem điểm | {range:1-100} Điểm số: [range]/100
Giải thích tham số: {range:1-100} tạo số ngẫu nhiên, [range] là kết quả.
Member Hôm nay lúc 12:21
xem điểm
Ducky BOT
Điểm số: 77/100
Sử dụng lệnh: mar add mở hộp | {weightedchoose:%80 Thường|%15 Hiếm|%5 Huyền thoại} Bạn nhận: [choice]
Giải thích tham số: mỗi mục trong {weightedchoose:...} có thể gắn % để chỉ định trọng số, [choice] là kết quả được chọn.
Gacha Player Hôm nay lúc 12:22
mở hộp
Ducky BOT
Bạn nhận: Thường

Luồng Hoạt Động (Đầy Đủ)

Toàn bộ pipeline runtime của AutoResponder: từ lúc nhận tin nhắn, chọn rule thắng, đến khi gửi phản hồi và cập nhật cooldown/usage.

Luật Tối Thượng: "Single Winner"
Mỗi tin nhắn chỉ chọn duy nhất 1 rule thắng. Nếu rule thắng bị chặn bởi scope/cooldown/điều kiện function thì engine dừng luôn, không tự động rơi xuống rule hạng 2.

Flow Xử Lý Tin Nhắn Theo Thứ Tự Runtime

  1. Bạn gửi tin nhắn: bot đọc nội dung và tìm các rule có khả năng khớp.
  2. Bot chọn 1 rule phù hợp nhất: ưu tiên rule có độ ưu tiên cao hơn, cụ thể hơn (trigger dài hơn), và kiểu khớp chặt hơn.
  3. Kiểm tra điều kiện trước khi trả lời: nếu rule bị giới hạn kênh/role hoặc đang trong thời gian chờ (cooldown) thì bot sẽ không phản hồi.
  4. Áp dụng biến và chức năng: bot thay các biến như {user_name}, [choice], [range] và chạy các khối chức năng trong response.
  5. Gửi kết quả: bot sẽ trả lời ở kênh hiện tại, trả lời dạng reply, gửi DM hoặc gửi sang kênh khác tùy theo rule.
  6. Xử lý sau cùng: nếu rule có thiết lập xóa tin/xóa reply/cooldown thì bot thực hiện ngay sau khi gửi phản hồi.
  7. Lưu ý quan trọng: mỗi tin nhắn chỉ chạy tối đa 1 rule thắng, bot không chạy tiếp rule đứng sau.
Tình huống: Có 2 rule cùng match tin nhắn xin chào mọi người
Rule A: trigger="xin chào" --type=startswith --priority=10
Rule B: trigger="xin" --type=startswith --priority=10
Member C Hôm nay lúc 14:40
xin chào mọi người
Ducky BOT Hôm nay lúc 14:40
Rule A thắng vì trigger dài hơn khi priority bằng nhau.

Flow Tạo Rule Bằng Lệnh ar add

  1. Nhận chuỗi raw và tách flags theo mẫu --flag=value.
  2. Phần còn lại phải có dấu | để tách trigger và response.
  3. Validate type, parse priority, parse boolean cho case/reply, parse cooldown user/global.
  4. Nếu type=regex thì compile regex ngay để chặn rule lỗi từ lúc tạo.
  5. Tạo payload chuẩn (enabled=true, scope rỗng, usage_count=0, created_at hiện tại) và insert DB.
  6. Reload cache guild để rule mới có hiệu lực ngay.
Lưu ý: ar edit đi theo flow khác và dùng field=value, không parse bằng cụm flags --....
Admin Hôm nay lúc 14:45
mar add ^(abc$ | Test regex --type=regex
Ducky BOT Hôm nay lúc 14:45
Regex không hợp lệ: missing ), unterminated subpattern...
Rule lỗi regex bị chặn ngay ở bước tạo, không được insert vào DB.

Ví Dụ Thú Vị

Bộ ví dụ thực tế để bạn copy nhanh. Mỗi mockup đều có lệnh Sử dụng lệnh, giải thích tham số và kết quả hiển thị mẫu trong Discord.

Gợi ý triển khai:
Bạn có thể dùng trực tiếp các ví dụ dưới đây, sau đó thay trigger/response cho phù hợp server của mình. Nếu ví dụ có ID kênh/role, hãy đổi sang ID thật trước khi dùng.

Nhóm 1: Phản hồi vui vẻ hằng ngày (1-7)

Sử dụng lệnh: mar add chào buổi sáng | Chúc {user_name} một ngày thật nhiều năng lượng!
Giải thích tham số: {user_name} lấy tên hiển thị của người vừa nhắn.
LunaHôm nay lúc 08:00
chào buổi sáng
DuckyBOT
Chúc Luna một ngày thật nhiều năng lượng!
Sử dụng lệnh: mar add ăn gì | {choose:Phở|Bún bò|Cơm tấm|Pizza} đi nào! [choice]
Giải thích tham số: {choose:...} chọn ngẫu nhiên một món; [choice] là kết quả được chọn.
KaiHôm nay lúc 10:12
ăn gì
DuckyBOT
Pizza đi nào! Pizza
Sử dụng lệnh: mar add mở quẻ | {weightedchoose:%70 Bình an|%25 May mắn|%5 Trúng lớn} hôm nay: [choice]
Giải thích tham số: {weightedchoose:...} chọn theo trọng số có tiền tố %; [choice] là kết quả cuối.
MioHôm nay lúc 11:25
mở quẻ
DuckyBOT
Bình an hôm nay: Bình an
Sử dụng lệnh: mar add tung xúc xắc | Bạn vừa tung ra [range] điểm! {range:1-6}
Giải thích tham số: {range:1-6} tạo số ngẫu nhiên 1-6; [range] hiển thị số đó.
RinHôm nay lúc 12:00
tung xúc xắc
DuckyBOT
Bạn vừa tung ra 4 điểm!
Sử dụng lệnh: mar add nói lại | Bạn vừa nói: [$1+]
Giải thích tham số: [$1+] lấy toàn bộ phần nội dung sau trigger.
NiaHôm nay lúc 12:14
nói lại hôm nay trời đẹp quá
DuckyBOT
Bạn vừa nói: hôm nay trời đẹp quá
Sử dụng lệnh: mar add trích 2 từ | Từ khóa chính: [$1-2]
Giải thích tham số: [$1-2] lấy từ đầu tiên đến từ thứ hai sau trigger.
HanaHôm nay lúc 12:30
trích 2 từ mèo cam đáng yêu lắm
DuckyBOT
Từ khóa chính: mèo cam
Sử dụng lệnh: mar add .ask | {reply}Bạn hỏi: [$1+]
Giải thích tham số: {reply} bắt buộc phản hồi theo kiểu reply vào tin nhắn nguồn; [$1+] lấy phần câu hỏi.
SoraHôm nay lúc 13:00
.ask tối nay ăn gì
DuckyBOT
Bạn hỏi: tối nay ăn gì

Nhóm 2: Kiểm soát theo kênh/role/quyền (8-14)

Sử dụng lệnh: mar add buồn quá | Mình ở đây nè, đừng buồn nha --type=contains --case=false
Giải thích tham số: --type=contains cho phép trigger nằm giữa câu; --case=false không phân biệt hoa/thường.
YuriHôm nay lúc 14:05
Tự nhiên BUỒN QUÁ luôn...
DuckyBOT
Mình ở đây nè, đừng buồn nha
Sử dụng lệnh: mar add mã giảm | {requirechannel:1234567890} Dùng mã SAVE20 tại kênh ưu đãi nhé!
Giải thích tham số: {requirechannel:ID} chỉ cho phép rule chạy trong đúng kênh có ID đó.
MinHôm nay lúc 14:10
mã giảm
DuckyBOT
Dùng mã SAVE20 tại kênh ưu đãi nhé!
Sử dụng lệnh: mar add vip check | {requirerole:99887766} Bạn là thành viên VIP!
Giải thích tham số: {requirerole:ID} yêu cầu người chat phải có role ID tương ứng.
AiriHôm nay lúc 14:18
vip check
DuckyBOT
Bạn là thành viên VIP!
Sử dụng lệnh: mar add test quyền | {denyrole:11223344} Bạn không được dùng lệnh này.
Giải thích tham số: {denyrole:ID} chặn người có role đó kích hoạt rule.
KenHôm nay lúc 14:22
test quyền
DuckyBOT
(Không phản hồi do người dùng thuộc nhóm deny)
Sử dụng lệnh: mar add cấm ở đây | {denychannel:44556677} Rule này không chạy ở kênh này.
Giải thích tham số: {denychannel:ID} chặn kích hoạt nếu tin nhắn nằm trong kênh ID đó.
MikaHôm nay lúc 14:25
cấm ở đây
DuckyBOT
(Không phản hồi do kênh nằm trong danh sách deny)
Sử dụng lệnh: mar add báo cáo | {sendto:77889900} {user_name} vừa báo: [$1+]
Giải thích tham số: {sendto:ID} chuyển phản hồi sang kênh đích; [$1+] lấy toàn bộ nội dung báo cáo.
RioHôm nay lúc 14:30
báo cáo spam link
DuckyBOT
Rio vừa báo: spam link (đã chuyển sang kênh kiểm duyệt)
Sử dụng lệnh: mar add tâm sự | {dm}Mình đã gửi hướng dẫn riêng cho bạn rồi nha.
Giải thích tham số: {dm} gửi tin nhắn phản hồi vào hộp thư riêng của người dùng.
EnaHôm nay lúc 14:36
tâm sự
DuckyBOT
Mình đã gửi hướng dẫn riêng cho bạn rồi nha.

Nhóm 3: Kỹ thuật nâng cao & tự động hóa (15-21)

Sử dụng lệnh: mar add nhắc nhẹ | {silent}{reply}Bạn nhớ đọc nội quy nhé {user}
Giải thích tham số: {silent} hạn chế ping/mention; {reply} giữ phản hồi gắn với đúng tin nhắn gốc.
FuuHôm nay lúc 15:01
nhắc nhẹ
DuckyBOT
Bạn nhớ đọc nội quy nhé @Fuu
Sử dụng lệnh: mar add anti spam | {cooldown:15}Chậm lại 15 giây nhé!
Giải thích tham số: {cooldown:15} đặt cooldown inline theo người dùng khi phản hồi rule này.
PikaHôm nay lúc 15:08
anti spam
DuckyBOT
Chậm lại 15 giây nhé!
Sử dụng lệnh: mar add tạm thời | {delete_reply:5}Tin này sẽ tự xóa sau 5 giây.
Giải thích tham số: {delete_reply:5} xóa tin bot phản hồi sau 5 giây.
NoaHôm nay lúc 15:12
tạm thời
DuckyBOT
Tin này sẽ tự xóa sau 5 giây.
Sử dụng lệnh: mar add dọn dẹp | {delete}Đã xử lý xong yêu cầu.
Giải thích tham số: {delete} xóa luôn tin nhắn trigger của người dùng sau khi bot phản hồi.
LioHôm nay lúc 15:16
dọn dẹp
DuckyBOT
Đã xử lý xong yêu cầu.
Sử dụng lệnh: mar add mã đơn | Mã hợp lệ! --type=regex --case=false
Giải thích tham số: --type=regex cho phép khớp theo mẫu; --case=false regex không phân biệt chữ hoa/thường.
TakiHôm nay lúc 15:20
mã đơn
DuckyBOT
Mã hợp lệ!
Sử dụng lệnh: mar add random bạn | Người may mắn hôm nay là {server_randommember}
Giải thích tham số: {server_randommember} mention ngẫu nhiên 1 thành viên không phải bot trong server.
SumiHôm nay lúc 15:25
random bạn
DuckyBOT
Người may mắn hôm nay là @Yuki
Sử dụng lệnh: mar add test combo | {reply}{cooldown:10}{choose:Ổn định|Tuyệt vời|Khá tốt} hệ thống: [choice]
Giải thích tham số: kết hợp nhiều khối: {reply} để reply, {cooldown:10} chống spam, {choose:...} sinh nội dung ngẫu nhiên.
YunaHôm nay lúc 15:30
test combo
DuckyBOT
Tuyệt vời hệ thống: Tuyệt vời

Lỗi Thường Gặp (Troubleshooting)

Chẩn bệnh các vấn đề hay gặp khi tạo luật tự động.

Rule không kích hoạt (Im Lìm):

  • Bạn đang dùng sai Prefix? (Hãy thay m bằng Prefix thực tế của Server).
  • Kiểm tra lệnh mar list xem rule đó có đang bị Disable ẩn đi không?
  • Kênh/Thành Viên đang test đã bị chặn bới {denyrole} hoặc lọt ngoài vùng phủ sóng của {requirechannel}.

Nhắn xong biến mất luôn, không thấy trả lời?

Bạn đã chèn hàm {delete} thu hồi tin, đồng thời ra lệnh {sendto:ID} đẩu đi ở 1 kênh bí mật khác, nhưng bạn lại quên bật quyền cho bản thân nhìn thấy Kênh đích đó. Ngó lại xem nào!

Kẹt mã [choice] ở đầu ra?

Đơn giản là bạn đã ghi sai cú pháp hàm. Bạn phải khai báo {choose:A|B} trước, rồi mới thả [choice] thì mồi mới nổ được.

Báo lỗi Regex không hợp lệ khi tạo rule?

  • Bạn đang dùng --type=regex nhưng pattern thiếu đóng ngoặc hoặc sai ký tự escape.
  • Hãy thử pattern đơn giản trước, sau đó tăng dần độ phức tạp.
  • Nên test mẫu regex ở công cụ ngoài trước khi dán vào lệnh AR.

Dùng --type mà bot báo không hợp lệ?

Chỉ có 4 giá trị hợp lệ: exact, contains, startswith, regex. Nếu ghi sai chính tả như startwith hoặc endwith thì bot sẽ từ chối.

Cooldown không chạy như bạn nghĩ?

  • --cooldown=10 nghĩa là chỉ user cooldown 10 giây, global vẫn là 0.
  • Nếu muốn cả user + global, hãy dùng dạng 10,60 (hoặc 10/60, 10:60).
  • Kiểm tra xem bạn có đang dùng thêm {cooldown:X} trong response hay không.

Dùng --case rồi mà vẫn khớp sai?

Với --case=true, bot phân biệt hoa/thường tuyệt đối. Ví dụ trigger HELLO sẽ không khớp tin hello.

Có nhiều rule cùng khớp nhưng bot trả lời không đúng rule bạn muốn?

  • Hãy tăng priority cho rule quan trọng hơn.
  • Nếu priority bằng nhau, trigger dài hơn thường sẽ thắng.
  • Dùng mar info <id> để kiểm tra lại cấu hình rule đang hoạt động.

Viết flag kiểu --type regex mà bot không nhận?

AR chỉ parse theo định dạng --flag=value. Dạng có khoảng trắng như --type regex sẽ không được nhận đúng.

mar edit báo lỗi parse tham số?

Khi giá trị có khoảng trắng, hãy bọc bằng dấu ngoặc kép. Ví dụ đúng: mar edit abcd response="Xin chào bạn".

Dùng {dm} nhưng user không nhận được tin nhắn riêng?

  • User có thể đã tắt nhận DM từ server.
  • Bot có thể không có quyền nhắn riêng với user đó.
  • Hãy chuẩn bị thêm phương án fallback trong kênh công khai nếu cần.

Dùng {sendto:ID} nhưng không thấy bot gửi sang kênh đích?

  • Kiểm tra ID kênh đã đúng chưa (sai 1 số là không chạy).
  • Bot cần có quyền View ChannelSend Messages ở kênh đích.
  • Nếu kênh đích đã bị xóa/đổi quyền, rule cần được cập nhật lại.

Kết quả mar test khác hành vi thật khi chat?

Lệnh mar test chủ yếu để kiểm tra nội dung render, không mô phỏng đầy đủ mọi trạng thái runtime như khi chạy thật trong kênh.

ID rút gọn bị trùng, không edit/delete được?

Nếu nhiều rule có cùng tiền tố ID, bot sẽ yêu cầu nhập ID dài hơn. Hãy dùng thêm ký tự hoặc dùng full ID để thao tác chính xác.