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.
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>
Ngay sau đó, mỗi khi có ai chat cụm từ "chào bot":
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.
<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. |
mar add .hug | Oke --type=startswith --priority=10 --cooldown=15,60 --case=false --reply=true<prefix>ar edit <id> field=value [field=value ...]| 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|false | Bật/tắt rule. |
reply=true|false | Bật/tắt reply mode. |
delete_trigger=true|false | Xó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. |
mar edit abcd1234 type=contains priority=20mar edit abcd1234 response="Xin chao ban"mar edit abcd1234 cooldown=10,60mar edit abcd1234 channels=123,456 ignore_roles=789m (ví dụ: mar).
!), bạn PHẢI thay thế chữ m bằng Prefix của server bạn (Ví dụ: !ar).
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).
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.
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ệ.
| 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. |
--flag=value (không dùng dạng tách rời như --flag value).=.trigger | response.ar edit không dùng cờ --...; lệnh này dùng chuẩn field=value.mar add hello | Xin chào --type=startswith --priority=15 --cooldown=10,60 --case=false --reply=truemar add .ping | pong --type=startswith --priority=25 --cooldown=5,20 --case=false --reply=true--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.--type=startswith, nội dung .ping test vẫn kích hoạt rule.mar add HELLO | Xin chào --type=exact --case=true --reply=false--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.mar add xin chào | Chào bạn nè --type=contains --priority=5 --case=false--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.mar add abc-123 | Mã hợp lệ --type=regex --case=false --priority=18--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.mar add roll | Lăn xúc xắc --cooldown=10/60 --type=exact--cooldown=10/60 dùng dấu / vẫn hợp lệ và được hiểu là user/global = 10/60 giây.mar add luck | Chúc may mắn --cooldown=12 --priority=3--cooldown=12, engine hiểu là cooldown user = 12 giây và global = 0.mar add cảnh báo | Không spam --priority=5 --priority=40 --reply=true40.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 {}.
| 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 đó. |
mar add hello bot | Xin chào {user} | Tên: {user_name} | Tag: {user_tag} | Ảnh đại diện: {user_avatar}{user} là mention, {user_name} là tên hiển thị, {user_tag} là tên#tag, {user_avatar} là URL avatar.| 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 |
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}{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.{channel} | Hiện tag kênh xanh lè: #general |
{channel_name} | Chỉ chữ: general |
mar add channelinfo | Kênh hiện tại: {channel} | Tên kênh: {channel_name}{channel} là mention kênh, {channel_name} là tên kênh.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.
mar add tán tỉnh | {user} đã thả thính [$1] vì thấy [$1] quá ngon!{user} là mention người dùng, [$1] là từ đầu tiên sau trigger.mar add nói lại | Nói lại: [$1+][$1+] lấy toàn bộ phần sau trigger.mar add trích | Trích đoạn: [$1-2][$1-2] lấy 2 từ đầu tiên sau trigger.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.
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ể. |
mar add chào | {requireuser:123456789} Xin chào chủ nhân!{requireuser:ID} chỉ cho phép đúng user ID.mar add vip check | {requirerole:888888} Bạn là VIP!{requirerole:ID} yêu cầu người dùng có role ID này.mar add start | {requirechannel:555555} Quay thưởng bắt đầu!{requirechannel:ID} chỉ chạy trong kênh có ID này.mar add xin thử | {denyrole:777777} Bạn đã bị chặn quyền dùng lệnh.{denyrole:ID} chặn người có role ID.mar add dùng thử | {denychannel:999999} Lệnh này bị khóa ở kênh này.{denychannel:ID} chặn kích hoạt trong kênh ID này.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.mar add ping | {reply} pong{reply} buộc bot trả lời trực tiếp vào tin nhắn.mar add dm thử | {dm} Mình nhắn riêng nhé!{dm} gửi phản hồi vào tin nhắn riêng.mar add report | {sendto:333333} Báo cáo từ {user_name}: [$1+]{sendto:ID} chuyển kênh, {user_name} là tên người gửi, [$1+] là toàn bộ phần sau trigger.mar add temp | {delete}{delete_reply:5} Tin này sẽ tự xóa{delete} xóa tin gốc, {delete_reply:5} xóa phản hồi sau 5 giây.mar add hello | {silent} Xin chào {user}{silent} tắt ping, {user} là mention người dùng.mar add spam | {cooldown:10} Bạn dùng lệnh quá nhanh!{cooldown:10} yêu cầu chờ 10 giây mới dùng lại.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.
{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é!
mar add kbb | {choose:Kéo|Búa|Bao} Trọng tài Ducky ra: [choice]{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.{range:MIN-MAX} kết hợp [range]
Random ra mã số từ Min tới Max.
mar add xem điểm | {range:1-100} Định mệnh của {user} sẽ quay vào ô [range]/100 điểm.{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.{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).
mar add loot | {weightedchoose:%99 Bạn Mất Hết Tiền|%1 Bạn Trúng Jackpot} [choice]% (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.mar add kbb | {choose:Kéo|Búa|Bao} Trọng tài ra: [choice]{choose:...} chọn 1 kết quả, [choice] là kết quả.mar add xem điểm | {range:1-100} Điểm số: [range]/100{range:1-100} tạo số ngẫu nhiên, [range] là kết quả.mar add mở hộp | {weightedchoose:%80 Thường|%15 Hiếm|%5 Huyền thoại} Bạn nhận: [choice]{weightedchoose:...} có thể gắn % để chỉ định trọng số, [choice] là kết quả được chọn.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.
{user_name}, [choice], [range] và chạy các khối chức năng trong response.xin chào mọi ngườiRule A: trigger="xin chào" --type=startswith --priority=10Rule B: trigger="xin" --type=startswith --priority=10--flag=value.| để tách trigger và response.type, parse priority, parse boolean cho case/reply, parse cooldown user/global.type=regex thì compile regex ngay để chặn rule lỗi từ lúc tạo.ar edit đi theo flow khác và dùng field=value, không parse bằng cụm flags --....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.
mar add chào buổi sáng | Chúc {user_name} một ngày thật nhiều năng lượng!{user_name} lấy tên hiển thị của người vừa nhắn.mar add ăn gì | {choose:Phở|Bún bò|Cơm tấm|Pizza} đi nào! [choice]{choose:...} chọn ngẫu nhiên một món; [choice] là kết quả được chọn.mar add mở quẻ | {weightedchoose:%70 Bình an|%25 May mắn|%5 Trúng lớn} hôm nay: [choice]{weightedchoose:...} chọn theo trọng số có tiền tố %; [choice] là kết quả cuối.mar add tung xúc xắc | Bạn vừa tung ra [range] điểm! {range:1-6}{range:1-6} tạo số ngẫu nhiên 1-6; [range] hiển thị số đó.mar add nói lại | Bạn vừa nói: [$1+][$1+] lấy toàn bộ phần nội dung sau trigger.mar add trích 2 từ | Từ khóa chính: [$1-2][$1-2] lấy từ đầu tiên đến từ thứ hai sau trigger.mar add .ask | {reply}Bạn hỏi: [$1+]{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.mar add buồn quá | Mình ở đây nè, đừng buồn nha --type=contains --case=false--type=contains cho phép trigger nằm giữa câu; --case=false không phân biệt hoa/thường.mar add mã giảm | {requirechannel:1234567890} Dùng mã SAVE20 tại kênh ưu đãi nhé!{requirechannel:ID} chỉ cho phép rule chạy trong đúng kênh có ID đó.mar add vip check | {requirerole:99887766} Bạn là thành viên VIP!{requirerole:ID} yêu cầu người chat phải có role ID tương ứng.mar add test quyền | {denyrole:11223344} Bạn không được dùng lệnh này.{denyrole:ID} chặn người có role đó kích hoạt rule.mar add cấm ở đây | {denychannel:44556677} Rule này không chạy ở kênh này.{denychannel:ID} chặn kích hoạt nếu tin nhắn nằm trong kênh ID đó.mar add báo cáo | {sendto:77889900} {user_name} vừa báo: [$1+]{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.mar add tâm sự | {dm}Mình đã gửi hướng dẫn riêng cho bạn rồi nha.{dm} gửi tin nhắn phản hồi vào hộp thư riêng của người dùng.mar add nhắc nhẹ | {silent}{reply}Bạn nhớ đọc nội quy nhé {user}{silent} hạn chế ping/mention; {reply} giữ phản hồi gắn với đúng tin nhắn gốc.mar add anti spam | {cooldown:15}Chậm lại 15 giây nhé!{cooldown:15} đặt cooldown inline theo người dùng khi phản hồi rule này.mar add tạm thời | {delete_reply:5}Tin này sẽ tự xóa sau 5 giây.{delete_reply:5} xóa tin bot phản hồi sau 5 giây.mar add dọn dẹp | {delete}Đã xử lý xong yêu cầu.{delete} xóa luôn tin nhắn trigger của người dùng sau khi bot phản hồi.mar add mã đơn | Mã hợp lệ! --type=regex --case=false--type=regex cho phép khớp theo mẫu; --case=false regex không phân biệt chữ hoa/thường.mar add random bạn | Người may mắn hôm nay là {server_randommember}{server_randommember} mention ngẫu nhiên 1 thành viên không phải bot trong server.mar add test combo | {reply}{cooldown:10}{choose:Ổn định|Tuyệt vời|Khá tốt} hệ thống: [choice]{reply} để reply, {cooldown:10} chống spam, {choose:...} sinh nội dung ngẫu nhiên.Chẩn bệnh các vấn đề hay gặp khi tạo luật tự động.
m bằng Prefix thực tế của Server).mar list xem rule đó có đang bị Disable ẩn đi không?{denyrole} hoặc lọt ngoài vùng phủ sóng của {requirechannel}.{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!
{choose:A|B} trước, rồi mới thả [choice] thì mồi mới nổ được.
--type=regex nhưng pattern thiếu đóng ngoặc hoặc sai ký tự escape.exact, contains, startswith, regex. Nếu ghi sai chính tả như startwith hoặc endwith thì bot sẽ từ chối.
--cooldown=10 nghĩa là chỉ user cooldown 10 giây, global vẫn là 0.10,60 (hoặc 10/60, 10:60).{cooldown:X} trong response hay không.--case=true, bot phân biệt hoa/thường tuyệt đối. Ví dụ trigger HELLO sẽ không khớp tin hello.
priority cho rule quan trọng hơn.mar info <id> để kiểm tra lại cấu hình rule đang hoạt động.--flag=value. Dạng có khoảng trắng như --type regex sẽ không được nhận đúng.
mar edit abcd response="Xin chào bạn".
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.