Donkcord Docs

Introduction

Donkcord is a bot for Fluxer with a web panel. Most things can be done either with a prefix command in Fluxer or from the panel, and a few things (DonkGuard, logging, integrations, the embed builder) only live in the panel.

These docs go through each module: what it does, how to set it up, and the commands that belong to it. If you just want to get going, start with Adding the bot and then Using the panel.

Commands

Commands are plain messages that start with !, like !ban @Sam scam links. Type !help in a channel the bot can read to get the list of commands you're allowed to use, and !help ban to see how one of them is written. Fluxer has no slash commands, buttons or forms, so everything the bot asks you to press is a reaction. See Reaction buttons.

Where things are

The panel sidebar is split into the same groups used here. Moderation covers the day to day stuff (warns, mutes, bans, the audit log). Utility is where welcome messages, tickets, starboard and the other community features sit. Tools has the embed builder, reactions, integrations, the scheduler and a Commands page.

Getting help

If a command replies with a permission error, check Permissions first. Almost every problem people run into comes down to the bot's role sitting too low in the role list, or the bot missing a channel permission.

Adding the bot

You need Manage Community on a community to add Donkcord to it.

Click Add to server at the top of this page, pick the community, and keep the permissions ticked. The invite asks for everything the bot uses: managing messages, roles, channels, webhooks and nicknames, adding reactions, reading the audit log, plus kick, ban, mute and timeout.

If you are already signed in to the panel, the same link is under your avatar menu as Add to a server.

If the panel is connected to more than one Fluxer instance, an Instance dropdown shows above the sign-in button. Pick the instance your community is on before you sign in or add the bot.

After inviting

  • Open Community settings, Roles and drag the Donkcord role above every role you want it to manage. It cannot give, remove or punish anyone whose top role is at or above its own.
  • Commands work straight away. Type !help in a channel the bot can see to check.
  • Sign in to the panel with Continue with Fluxer and pick the community.

Fluxer permissions still apply on top of the bot's. If a channel denies the bot Send Messages, nothing the bot is told to post there will arrive.

Using the panel

The panel at fluxer.donkcord.com is the website you sign in to with Fluxer. It shows every community you share with the bot where you have mod permissions.

To sign in you need at least one of Manage Messages, Moderate Members, Ban Members or Administrator in a community the bot is in. Pick a community from the dropdown at the top of the sidebar to switch between them.

Pages

PageWhat it's for
DashboardMember count, recent actions and a quick look at the community.
MembersSearch members, see their history, and warn, mute, kick or ban from one place. Accounts younger than 7 days are flagged.
Audit LogFluxer's audit log and the bot's own records together, including deleted and edited messages.
Muted, Ban ListEveryone currently timed out or banned, with a button to lift it.
InfractionsMembers with active warnings, plus warning expiry and punishments.
CommandsRun the moderation and role commands without opening Fluxer.

Anything that takes a member has a search box. Type part of a username or nickname and pick from the list, or paste an ID.

Timezone

Times in placeholders like {time} and {date} use the community's timezone, which defaults to UTC. Change it on the Scheduler page.

Permissions

Two things are checked for every action: whether you are allowed, and whether the bot is able.

For commands

Each command lists the Fluxer permission it needs on its page. Administrator always passes. If you don't have it, the bot replies with the name of the missing permission and the reply deletes itself after a few seconds. !help only lists the commands you can use.

For the panel

Anyone with one of Administrator, Ban Members, Kick Members, Moderate Members, Manage Messages or Manage Channels can open a community in the panel. Some pages need more than that:

NeedsPages and actions
Manage CommunityGiveaways, Suggestion settings, DonkGuard, Logging, Mod settings, Welcome, Integrations and webhooks, Archive
Manage MessagesPolls, Social alerts, answering suggestions, Embed builder, Starboard settings, Site embeds, posting from the channel monitor, Superpurge, purge
Manage RolesGiving, removing and editing roles
Ban MembersBan, unban
Moderate MembersWarn, mute, unmute
Manage ChannelsSlowmode, lock, unlock
Any mod permissionReactions, Scheduler, Tickets, Submissions, Members, Audit Log, the suggestion list

Voicemail boxes need Administrator, Manage Community or Manage Channels. Removing the bot from a community is limited to the owner and Administrators, and you have to type the community name to confirm.

Role hierarchy

You can only give or take roles that sit below your own highest role, and the bot can only touch roles below its own. A role above either of those gets a clear error saying so.

Moderation commands

The basic set. Every action is recorded as an infraction and shows up on the member's history.

CommandDescriptionUsageExample
!muteTimes a member out. Needs Moderate Members.!mute @user <minutes> [reason]!mute @Sam 30 spamming
!unmuteRemoves a timeout. Needs Moderate Members.!unmute @user!unmute @Sam
!kickKicks a member. Needs Kick Members.!kick @user [reason]!kick @Sam alt account
!banBans a member, or anyone by user ID even if they've left. Can delete up to 7 days of their messages. Needs Ban Members.!ban @user|user_id [reason] [delete_days=0-7]!ban @Sam scam links delete_days=1
!unbanUnbans by user ID. Needs Ban Members.!unban <user_id> [reason]!unban 123456789012345678
!purgeDeletes up to 100 recent messages. With a user, only their messages among the last 100. Needs Manage Messages.!purge <amount> [@user]!purge 50 @Sam
!slowmodeSets slowmode in the current channel, up to 6 hours. 0 turns it off. Needs Manage Channels.!slowmode <seconds>!slowmode 10
!lockStops @everyone from sending in the current channel. Needs Manage Channels.!lock [reason]!lock raid
!unlockUndoes !lock. Needs Manage Channels.!unlock!unlock
!announcePosts an embed to a channel. Needs Manage Messages.!announce #channel "Title" <message> [color=#hex]!announce #news "Update" The bot is back color=#5865f2
!infractionsShows a member's last 10 infractions. Needs Moderate Members.!infractions @user!infractions @Sam
!helpLists the commands you can use, or shows how to write one.!help [command]!help ban

How commands are written

  • Members are given as an @mention or a user ID. Channels as a #mention, an ID or the channel name. Roles as a name, an ID or a mention.
  • Anything with spaces in it that isn't the last part of the command goes in quotes: "Bug report". The last part (a reason, a message) doesn't need them.
  • Options written as name=value, like delete_days=1 or color=#5865f2, can go anywhere after the command name.
  • Yes or no options take yes, no, on, off, true or false.

Error messages and confirmations that only matter to you delete themselves after 15 seconds, or a minute for longer ones. Results other people should see, like a role change or an announcement, stay.

!mute takes minutes, up to 40320 (28 days). To ban someone who isn't in the community, paste their user ID in place of the mention. The panel's ban takes an ID the same way. They won't get a DM, since the bot can't message people it doesn't share a community with.

From the panel

The Commands page and the Members page run the same actions. Actions taken there use the DM and mod log settings from Mod log.

Warnings and punishments

Warnings add up. You can set what happens when a member reaches a certain number.

CommandDescriptionUsageExample
!warnWarns a member and DMs them. Weight lets one warning count as several. Needs Moderate Members.!warn @user [reason] [weight=N]!warn @Sam slurs weight=3
!warnlogLists a member's warnings with their index numbers. Needs Moderate Members.!warnlog @user!warnlog @Sam
!warnlogallEveryone with warnings, 15 per page. Needs Moderate Members.!warnlogall [page]!warnlogall 2
!warnclearClears all of a member's warnings, or one by index. Needs Ban Members.!warnclear @user [index]!warnclear @Sam 2
!warndeleteDeletes one warning for good. Cleared warnings stay in the history, deleted ones don't. Needs Ban Members.!warndelete @user <index>!warndelete @Sam 1
!warnexpireHow many days until warnings expire. 0 means never. Run it with no options to see the current value. Needs Manage Community.!warnexpire [days] [delete=yes]!warnexpire 30
!warnpunish setWhat happens at a warning count. Needs Ban Members.!warnpunish set <count> <punishment> [time=2d12h] [role=@role]!warnpunish set 3 Mute time=2h
!warnpunish removeRemoves the punishment at a count.!warnpunish remove <count>!warnpunish remove 3
!warnpunish listShows every punishment you've set.!warnpunish list!warnpunish list

Punishments

PunishmentWhat it does
BanBans. With a time, they're unbanned when it runs out.
SoftbanBans and unbans straight away, which clears 7 days of their messages.
KickKicks.
MuteTimeout. 1 hour if you don't give a time, 28 days at most.
VoiceMuteMutes them in voice. Only works if they're in a voice channel at the time.
AddRoleGives a role. Needs the role option. With a time, the role comes off again.
RemoveRolesTakes away every role the bot is able to remove.

Times are written like 30m, 2h, 7d or combined, 2d12h.

Role commands

Give, take and edit roles. All of these need Manage Roles, and the role has to be below both yours and the bot's.

A role can be given by name, ID or @mention. Put names with spaces in quotes. Part of a name is enough when it only matches one role, and matching ignores case.

CommandDescriptionUsageExample
!setroleGives a member a role.!setrole @user <role> [reason]!setrole @Sam Verified
!removeroleTakes a role from a member.!removerole @user <role> [reason]!removerole @Sam Verified
!removeallrolesTakes every role below yours from a member.!removeallroles @user [reason]!removeallroles @Sam
!temproleGives a role that comes off by itself. Up to 365 days.!temprole <duration> @user <role> [reason]!temprole 7d @Sam Event
!createroleMakes a new role.!createrole <name> [color=ffba55] [hoist=yes] [mentionable=yes]!createrole Helpers color=ffba55
!deleteroleDeletes a role.!deleterole <role> [reason]!deleterole "Old Event"
!renameroleRenames a role.!renamerole <role> <new name>!renamerole Helpers Support
!rolecolorShows or sets a role's colour. none clears it.!rolecolor <role> [ffba55]!rolecolor Support 3ba55c
!rolehoistToggles whether the role shows separately in the member list.!rolehoist <role> [yes|no]!rolehoist Support
!rolementionableToggles whether anyone can @mention the role.!rolementionable <role> [yes|no]!rolementionable Support no
!roleinfoID, colour, member count, position and key permissions.!roleinfo <role>!roleinfo Support

Mod log

Found under Moderation in the panel. Controls where panel actions get posted and what the member is told.

Manage Community

  • Mod log channel gets an embed for each action you pick: warn, mute, unmute, timeout, untimeout, hardmute, kick, ban, tempban, softban and unban.
  • DM can be set per action. None sends nothing, Action tells them what happened, Full adds the reason and who did it. Warns, mutes and timeouts default to Full, everything else to None.
  • Mute role is used for hardmutes, where a role is given instead of a timeout.
  • Defaults are the prefilled durations: timeout 60 minutes, and how many days of messages a ban or tempban deletes.

These settings apply to actions taken in the panel. Commands don't use them.

Superpurge

Deletes every message one person sent, across the whole community or in one channel.

Manage Messages

It's on the Commands page. Search for the member or paste their ID, pick a channel or leave it on the whole community, and optionally set a date range.

  • Messages are deleted in batches, channel by channel, so a big cleanup can take a while. It keeps running on the bot if you leave the page.
  • One superpurge per community at a time. Cancel stops it where it is.

DonkGuard

The bot's own automod. It reads every message and acts when one breaks a rule you turned on.

Manage Community

Each module has its own switch, its own actions and its own DM text. When a message trips more than one, only the first one in this list counts.

ModuleCatchesSettings
Bad wordsWords from your list. Accents and punctuation are stripped first, so b.a.d still matches.Word list, whole word only
Bad linksLinks to blocked domains, or anything off your allow list. Subdomains count.Blacklist or whitelist, domains, links per time window
InvitesFluxer invites (fluxer.gg and fluxer.app invite links), plus Discord invites: discord.gg, dsc.gg, invite.gg, discord.me and disboard join links.Allowed codes, allow this community's own invite
MentionsToo many users or roles pinged in one message, or across several.Per message, per time window
AttachmentsToo many files in a short time.Files per window
CapsMostly capital letters.Percent (default 70), minimum length (default 10)
SpamToo many messages too fast, or the same message over and over.Messages per window, block duplicates, duplicate limit
EmojiToo many emoji in one message.Limit (default 10)
NewlinesWalls of blank lines.Limit (default 15)
HoneypotAnything posted in the channels you pick. Make a channel nobody should talk in and let bots walk into it.Channels

Actions

Pick any mix. They always run in this order: delete, DM, warn, timeout, mute, kick, softban, ban.

  • Timeout, mute and ban use the module's duration. Mute gives the mute role from General, and with a duration it's removed later. Ban with a duration unbans later.
  • Warn adds a normal warning with the reason "DonkGuard: ...", so your warning punishments still apply.
  • DM sends the module's DM text. It takes the same placeholders as custom reactions.

General

  • Log channel gets an embed for every hit.
  • Immune roles and ignored channels are skipped. Ignoring a category covers the channels inside it.
  • Media channels only allow posts with an attachment or a link. Plain text gets deleted.
  • Delete risky files removes executables and scripts (exe, bat, scr, msi, jar, apk, ps1 and so on). You can add your own extensions.

Administrators and anyone with Manage Community are never touched by DonkGuard. Test it from an account without those.

Logging

Posts community events to channels you pick. Everything starts off, so turn on what you want.

Manage Community

There's a default channel plus optional channels for messages, members, server, voice and joins/leaves. An event goes to its own channel if you set one, otherwise the default.

ChannelEvents
MessagesDeleted, edited and purged messages
Joins and leavesMembers joining and leaving. A leave that was really a kick or ban says so.
MembersRole changes, name changes, avatar changes, bans, unbans, timeouts and timeouts removed
ServerChannels and roles being created, changed or deleted, community setting changes, emoji changes
VoiceJoining, moving between and leaving voice channels

Log entries carry a link to the message or channel and the user ID in the footer. Where Fluxer's audit log knows who did something, the moderator is shown too. You can ignore channels (or whole categories) and roles.

Welcome and join roles

Greet new members, DM them, and hand out roles when they join.

Manage Community

Join roles

Up to 10 roles for people and a separate list of up to 10 for bots. A role gets skipped if it's above the bot's own role or deleted.

Welcome message

Pick a channel and write the message. It can be plain text or an embed with a title, colour and the member's avatar as the thumbnail. You can have it deleted after a number of seconds, and choose whether the new member gets pinged.

Welcome {user} to {server}. You are member number {server.membercount}.

Welcome DM

Sent privately. Members with DMs closed just don't get it.

Thanks for joining {server}. Read the rules in {#rules} and say hello.

Both take every placeholder and condition. {user} is the new member. Send a test posts the welcome message to the channel with you as the new member.

Bots are skipped for messages by default, but still get the bot roles.

Starboard

When a message gets enough of a reaction, it's reposted to a starboard channel.

Manage Messages

SettingDefaultNotes
EmojiStarAny emoji, including this community's custom ones.
Threshold3Reactions needed to post.
Self starOffWhether the author's own reaction counts.
Remove below thresholdOnTakes the post down if reactions drop again.
Ignore NSFWOnMessages from NSFW channels never get posted.
Allow botsOffWhether bot messages can be starred.

You can also ignore channels, pick the embed colour, and choose whether attachments show.

Levels

Members earn XP for chatting and time in voice, level up, and get roles at the levels you pick.

CommandDescriptionUsageExample
!rankShows a rank card with level, XP, rank, messages, voice time and join date.!rank [@user]!rank @Mira
!leaderboardThe top ten, with a link to the full leaderboard page.!leaderboard!leaderboard
!levelnotifyChoose whether you hear about your own level ups in the community, by DM, or not at all.!levelnotify <server|dm|off>!levelnotify dm
!givexpAdds XP to a member. Needs Manage Community.!givexp @user <amount>!givexp @Mira 500
!removexpTakes XP away. They can drop a level and lose reward roles. Needs Manage Community.!removexp @user <amount>!removexp @Mira 200

Levels are off until you turn them on from the Levels page in the panel.

How XP is earned

  • Each message earns a random amount between 15 and 25 XP. Both numbers can be changed.
  • XP is given at most once a minute per member, so sending ten short messages earns the same as one. The wait can be changed too.
  • Bots, webhooks and bot commands earn nothing. Add other bots' prefixes on the Levels page so their commands don't count either.
  • Channels, categories and roles can be set to earn no XP at all.

Messages sent during the wait still count toward the message total on the rank card. They just don't earn XP.

Levels

Going from level L to the next takes 5 x L² + 50 x L + 100 XP, the same curve MEE6 uses. Level 1 takes 100 XP, level 10 takes about 4,700 in total, and level 50 about 268,000.

Multipliers

The community multiplier applies to everyone. Role multipliers apply to members with that role, and if someone has several, the highest wins. Channel multipliers apply to a channel or a whole category. All three are multiplied together, so a 2x role in a 1.5x channel gets 3x.

Voice

Turn on voice XP to give a set amount per minute in a voice channel. It only counts when you aren't muted or deafened, aren't in the AFK channel, and at least two people who aren't deafened are in the call. The number of people needed can be raised. While voice XP is on, voice time shows on rank cards and the leaderboard, counting only minutes that earned XP. With it off, voice time is hidden.

Level up messages

By default the bot replies in the channel where someone levelled up. It can post to one channel instead, DM the member, or say nothing. The message takes {user}, {user.name}, {user.nick}, {level}, {xp}, {rank}, {next} (XP left to the next level), {reward} (roles earned at this level) and {server}.

GG {user}, you reached level {level}. {reward}

XP changed by staff never sends a level up message.

Role rewards

Add a level and a role, and members get the role when they reach it. With Keep earlier rewards on, members keep every role they've earned. With it off, they only hold the highest one and the ones below are taken away. If a member loses XP and drops below a reward level, the role is removed. The bot's role has to sit above the reward roles.

Leaderboard page

Each community gets a public page at /levels/ followed by the community ID, which the !leaderboard reply links to. It has all time, last 30 days and last 7 days tabs, 50 members a page, and the list of role rewards. Turn off Public web leaderboard to hide the page and the link.

Other settings

  • Rank card color sets the accent on the card and the leaderboard page. The panel shows a preview with your own card.
  • Wipe XP when they leave deletes a member's XP as soon as they leave. It's off by default, so people who come back keep their level.
  • The Levels page lists every ranked member. You can give, take or set XP for anyone, reset one member, or reset the whole community.

{user.level}, {user.xp} and {user.rank} work in custom reactions and anywhere else placeholders do, and so do the {target.*} versions.

Giveaways

Post a prize, members react to enter, and winners are drawn when the time runs out.

Manage Community

CommandDescriptionUsageExample
!giveaway startStarts one. Winners defaults to 1, the channel to where you ran it.!giveaway start <duration> <prize> [winners=1] [channel=#channel] [role=@role] [description="..."]!giveaway start 2d Steam key winners=2
!giveaway endEnds it now and draws the winners.!giveaway end <id>!giveaway end 4
!giveaway rerollDraws new winners for one that has ended. Earlier winners are left out.!giveaway reroll <id> [count]!giveaway reroll 4
!giveaway listShows the ones still running.!giveaway list!giveaway list

The id is in the footer of the giveaway message. A giveaway can run from 30 seconds to 60 days and have up to 20 winners.

Entering

The bot puts a party popper reaction under the giveaway. React with it and you're in. React with it again to leave. The bot takes your reaction off each time and posts a short notice pinging you to say whether you joined or left, which deletes itself after a few seconds. The embed shows how many people are in. If you set a role, only members with that role can enter.

Drawing

When time is up, winners are picked at random from the entries. Anyone who has left the community or lost the role since entering is skipped. The message is updated with the winners, its reactions are removed, and the bot replies under it with a ping for each one.

The Giveaways page in the panel does the same things: start one, end it early, reroll, or delete it along with its message.

Polls

A question with a numbered option list and a live tally on the message. Members vote with number reactions.

Manage Messages

CommandDescriptionUsageExample
!poll createPosts a poll. Put the question in quotes and split the options with |.!poll create "question" <option | option | ...> [duration=1h] [multiple=yes] [hide_results=yes] [channel=#channel]!poll create "Lunch?" Pizza | Tacos | Sushi duration=1d
!poll closeStops voting and shows the results.!poll close <id>!poll close 7

Polls take 2 to 10 options. Leave the duration empty to close it yourself, or set anything from 1 minute to 30 days.

  • Voting: the bot puts a number reaction under the poll for each option, one to ten. React with the number of your choice. React with it again to take the vote back. Picking a different number moves your vote, unless the poll allows more than one.
  • The bot removes your reaction straight away and posts a short notice pinging you with what you voted for. It deletes itself after a few seconds.
  • Hide results: the tally stays hidden until the poll closes, so early votes don't sway anyone.
  • When a poll closes, the reactions are removed and the final results stay on the message.

The Polls page shows every poll with its results as bars. You can post, close and delete polls from there too.

Reminders

Ask the bot to remind you about something later.

CommandDescriptionUsageExample
!remind meSets a reminder. Repeat makes it come back every so often.!remind me <in> <text> [repeat=1d]!remind me 2h check the oven
!remind listYour reminders and when they are due.!remind list!remind list
!remind cancelDeletes one of yours.!remind cancel <id>!remind cancel 12

Times look like 30m, 2h, 1d12h or 1w, from 30 seconds up to a year. Repeats have to be at least 10 minutes apart. You can have 25 at once.

The reminder comes by DM. If your DMs are closed, the bot pings you in the channel where you set it instead. Only you can cancel your reminders, and the reply to !remind list deletes itself after a short while.

Suggestions

Members post ideas, everyone votes with a reaction, and staff give an answer that shows on the message.

Setting it up

Open the Suggestions page, pick a channel and turn it on. This part needs Manage Community.

SettingWhat it does
Suggestions channelWhere new suggestions go.
Move answered ones toOptional. Approved, denied and implemented suggestions are reposted here without voting, and the original is deleted.
Hide who posted itThe message doesn't show the author. Staff can still see it in the panel.
DM the authorTells them when their suggestion gets an answer, with the reason.
Wait between suggestionsHow long a member has to wait before posting another. 60 seconds by default.

Commands

CommandDescriptionUsageExample
!suggestPosts a suggestion. Anyone can use it.!suggest <text>!suggest Add a music channel
!suggestion approveNeeds Manage Messages. Same for the three below.!suggestion approve <number> [reason]!suggestion approve 3 Coming this week
!suggestion denyVoting closes.!suggestion deny <number> [reason]!suggestion deny 5 We have one already
!suggestion considerMarks it as being looked at. Voting stays open.!suggestion consider <number> [note]!suggestion consider 4
!suggestion implementMarks it as done.!suggestion implement <number> [note]!suggestion implement 3

Suggestions are numbered per community. The bot puts a thumbs up and a thumbs down reaction under each one. React with one to vote; the bot removes your reaction and updates the counts on the message. React with the same one again to take your vote back. Once a suggestion is approved, denied or implemented the reactions come off. From the panel you can filter by status, answer, reopen or delete any suggestion.

Tickets

A panel message in a channel. Members react to it and get a private channel between them and your staff.

Setting up a panel

  • Panel channel is where the panel message goes. The bot adds a ticket reaction under it.
  • Parent channel is where the private ticket channels get made. Pick a category and tickets are created inside it, or pick a channel and they go in that channel's category. The bot needs Manage Channels.
  • Staff roles are given access to every ticket channel and are the only ones, besides admins, who can resolve or close a ticket.
  • Log channel gets a record when a ticket is closed, and notify channel gets pinged when one opens.
  • Max open is how many tickets one member can have at once. Default 1.

The panel message can be plain text or a full embed. Under it the bot writes a hint saying to react with the ticket reaction; the Button label field is used in that hint.

Opening a ticket

When someone reacts, the bot removes their reaction, makes a channel only they, the staff roles and the bot can see, and pings them in the panel channel with a link to it. Inside the new channel the bot asks the intake questions one at a time: an optional sub-category, a subject and details. The member answers by typing. Optional questions can be skipped by replying skip, and replying cancel skips the rest. Each question waits five minutes. You can rename these fields, change their hints, mark them required, or turn them off.

The answers are posted in the channel as an embed, followed by a message for staff with a check mark and a lock reaction under it.

Closing

Staff react with the check mark to resolve a ticket or the lock to close it. The bot removes the reaction and asks for a reason in the channel, which can be skipped. It then posts the result, sends it to the log channel and deletes the channel a few seconds later. Anyone who isn't staff gets told so.

Transcripts

Set Transcript on the panel and the whole ticket is saved as a file and attached to the close message in the log channel. Each panel picks its own format.

FormatWhat you get
Text (.txt)One line per message with the time and name. Opens anywhere.
JSON (.json)Every message with IDs, embeds and attachments, for scripts or your own tools.
Web page (.html)Looks like the Fluxer channel: avatars, formatting, embeds, images and reply links. Open it in a browser.

Transcripts need a log channel, and the bot needs Attach Files there. Images in a transcript point at Fluxer's copies, which can stop loading after a while, so save anything you need to keep. Very long tickets are trimmed to fit the upload limit, oldest messages first, and the file says when that happened.

Submissions

A set of questions the bot asks by DM after a member reacts to a panel. Each entry is posted to a channel.

Build the form with up to five fields, short or paragraph, required or not. One field must be the link field (this is meant for things like clip or art submissions), and you can mark another as the message.

The panel message gets a memo reaction. When a member reacts, the bot removes the reaction and DMs them the questions one at a time. They answer by typing; skip leaves an optional one blank and cancel stops. Each question waits five minutes. If the bot can't DM them, it says so under the panel and asks them to allow DMs and react again.

Entries post as "Submission from name" with the message and link, and get the same memo reaction so people can submit again from there.

Reading entries from your own site

Create an API token on the panel. Tokens are shown once, so copy it then. Then:

GET /api/ext/submissions?token=dk_yourtoken

You get back a list with the submitter's name, message, link, whether it's been viewed, and when it came in. A token only sees entries from the last so many days (you choose, up to 365) and can have an expiry date.

Voicemail

A channel that only takes voice messages, with limits on how often people can post, and an optional public page to listen back.

Manage Channels

Point a box at a channel. Anything that isn't a single recorded voice message (text, files, stickers) is removed, and the member can be told why.

Limits

  • Off: post as often as you like.
  • Cooldown: one message per member every so often. A week by default.
  • Deadline: a set number of messages per window, and the window resets daily, weekly, every two weeks or monthly.

You can also set a minimum and maximum length, and who can post, who can only listen, and who skips the rules. Turn on manage permissions and the bot sets the channel overwrites for you.

Feed

The feed is a page at /v/your-name that plays the messages in order. Pick a title, colour and page size, and whether names and downloads are shown. From the panel, staff can star, hide or archive messages and leave notes.

Cooldown messages can use {user} and {when}, and the confirmation can use {user} and {duration}.

Custom reactions

The bot replies when someone says a trigger word. Replies can be text or embeds, can take arguments, and can have reaction buttons.

Reactions don't use a prefix. If you want !rules, make the trigger !rules.

Commands

CommandDescriptionUsageExample
!customreaction addAdds a reaction. Setting a title or colour makes it an embed. Needs Manage Messages.!customreaction add "trigger" <response> [match=word|contains|exact|starts] [embed_title="..."] [embed_color=#hex]!customreaction add "!rules" Read #rules before posting.
!customreaction editChanges the response.!customreaction edit "trigger" <response>!customreaction edit "!rules" See #rules.
!customreaction removeDeletes a reaction.!customreaction remove "trigger"!customreaction remove "!rules"
!customreaction listLists the first 25.!customreaction list!customreaction list

The panel has everything else: full embeds, reaction buttons, role and channel limits, cooldowns and so on.

Matching

MatchFires when
Whole wordThe trigger appears as its own word. Default.
ContainsThe trigger appears anywhere, even inside another word.
Starts withThe message starts with the trigger. Use this for commands that take arguments.
ExactThe whole message is the trigger and nothing else.

Matching ignores case. Only one reaction fires per message.

Arguments

Words after the trigger are arguments. $1 is the first, $2+ is everything from the second on, and $* is all of it. If an argument is a member (a mention or an ID), you can read their details with $1.user.name, $1.user.joinedat and so on. The full list is on Placeholders.

Set Required args and the reaction won't fire until that many are given.

Trigger:  !hug
Match:    Starts with
Response: {user} hugs $1.user.mention{if:$2} because $2+{endif}

Options

  • Allowed and ignored roles and channels decide where it works and for who. Allowing a category covers its channels.
  • Cooldown is per member, up to 10 minutes.
  • Delete trigger removes the message that set it off. Delete after removes the reply after some seconds.
  • DM response sends the reply privately. Response channel sends it somewhere else.
  • Allow @everyone lets {everyone} and {here} actually ping. It needs Manage Community to turn on.

Modifiers

You can put these anywhere in the response. They change how it behaves and are removed from what gets posted.

ModifierEffect
{require:role}Only members with that role. Use a name, an ID or a role mention. Add several and any one is enough.
{require:#channel}Only in that channel.
{require:mod}Only members with Manage Messages or Moderate Members. {require:serveradmin} means Administrator.
{not:role} {not:#channel}Never for that role, or in that channel.
{respond:#channel}Reply in a different channel.
{dm}DM the reply to the person who triggered it. {dm:@someone} DMs someone else.
{delete}Delete the trigger message.
{silent}Send nothing. Useful with {delete} to quietly remove a word.
{noeveryone}Never ping @everyone or @here, even if it's allowed.

Examples

New communities get five example reactions: !banr, !roles, !whois, !serverinfo and !8ball. They're off until you turn them on, and you can edit or delete them like any other. !banr is a good one to read through: a mod files a ban request and the card gets Approve and Deny reactions.

Each reaction has Duplicate and Export buttons. See Import and export.

Embed builder

Write a message with up to 10 embeds and 5 reaction buttons, see it as it'll look, and post it.

Manage Messages

Each embed has an author, title, link, description, colour, thumbnail, image, fields (up to 25), footer and timestamp. There's a message body above the embeds too.

Posted messages are saved. Open one later and you can edit it in place, copy it to another channel, or delete it. Deleting in the panel asks whether to remove the Fluxer message too.

Placeholders

Community, time, random and mention placeholders work, and so do conditions. Since nobody triggers an embed, {user} is you, the person posting it, and {channel} is where it's going.

Messages can be exported to a file, imported back, or duplicated.

Reaction buttons

Fluxer has no message buttons, so Donkcord uses reactions instead. They can go on custom reactions, integration replies, social alert posts and messages from the embed builder. Up to 5 per message.

Kinds

  • Link buttons become a line of links at the bottom of the message text. Nothing else to set up.
  • Script buttons become number reactions. The bot lists them at the bottom of the message as 1 Label 2 Label and adds the matching keycap reactions, one to five, itself. Reacting with a number runs that button's script. The script uses the script directives.

Each script button has a label, a per-member cooldown (3 seconds if you leave it empty, up to an hour), and a list of roles allowed to use it. Leave roles empty and anyone can. The colour setting in the editor has no effect, since a reaction has no colour.

What happens when someone reacts

The bot removes the member's reaction, checks their roles and the cooldown, runs the script, and posts a short message pinging them with the outcome. That notice deletes itself after 15 seconds. By default it says what happened, like "Done. 1 posted, 1 command run." Use {reply:text} in the script to write your own.

What a button can run

Any script button can give and remove roles and post announcements. Punishment commands (warn, mute, unmute, kick, ban, unban) and channel commands (slowmode, lock, unlock) only work once you've set roles on the button. Otherwise anyone could react.

Who pressed it

Inside a button script, {clicker.*} is the person who reacted. {clicker.mention}, {clicker.id}, {clicker.rolenames}, {clicker.isadmin} and the rest are on Placeholders. You also get {button.label} and {button.index}, the number they reacted with.

Buttons on reactions

On a custom reaction, $1, $2+ and $1.user.* are filled in when the reaction is posted, so the button remembers the arguments. {clicker.*} is filled in later, when someone reacts. That's how a ban request can carry the target and the reason through to whoever approves it.

{require:clicker.id == 123456789012345678}
{run:ban $1.user.id {if:$2}$2+{else}Ban request approved{endif}}
{edit:Ban request for $1.user.tag approved by {clicker.mention}.}

If someone else reacts, {require:} stops the script. To tell them why, branch instead:

{if:clicker.id != 123456789012345678}
{reply:Only the owner can approve this.}
{stop}
{endif}
{run:ban $1.user.id $2+}
{edit:Ban request for $1.user.tag approved by {clicker.mention}.}

Scheduler

Run things later, or over and over.

From Fluxer

CommandDescriptionUsageExample
!schedule createPosts a message after a delay, and optionally repeats it. Needs Manage Messages.!schedule create <in> <message> [channel=#channel] [every=30m] [name="..."]!schedule create 1h Drink water channel=#general every=6h
!schedule listActive tasks with their IDs.!schedule list!schedule list
!schedule cancelDeletes a task.!schedule cancel <id>!schedule cancel 4

Times here are a number and one unit: 30s, 10m, 2h, 1d, 1w. Repeats have to be at least a minute apart.

From the panel

The panel does a lot more. A task has a schedule and up to 10 actions.

ScheduleRuns
OnceAt a set date and time.
IntervalEvery so often, from a start time. Can stop after a number of runs or on a date.
LimitedA set number of runs spread evenly across a window. Five posts over a day, for example.
ActionDoes
MessagePosts text to a channel.
EmbedPosts an embed, with optional text above it.
CommandPurge, slowmode, lock or unlock a channel.
Ticket or submission panelReposts the panel, so it stays at the bottom of a busy channel.
IntegrationRuns one of your integrations with the arguments you give it.

Placeholders work in scheduled messages, but nobody triggered them, so {user} is the bot and $1 is empty. Run now fires a task straight away without changing its schedule.

Integrations

A command that calls an API and posts what comes back. Weather, stats, a game server's player count, anything with a URL.

Manage Community

Integration commands use the same ! prefix as the bot's own commands. An integration with the trigger weather runs on !weather london.

Request

  • Method and URL. GET, POST, PUT, PATCH or DELETE. The URL has to be a public address.
  • Headers, up to 20.
  • Body as JSON, form data or plain text.
  • Timeout, 30 seconds by default, 2 minutes at most.

$1, $2+ and $* can go in the URL and body. So can {user.id}, {server.id} and the rest of the placeholders.

https://api.example.com/weather?city=$*&units=metric

Secrets

Save API keys under Credentials and use them as {secret.NAME} in headers, the URL or the body. They're stored encrypted and never shown again after you save them.

Authorization: Bearer {secret.WEATHER_KEY}

Response

Set a response path to pull one field out of JSON, like data.current.temp or results.0.name. Then write the reply with {resp.*}:

It's {resp.current.temp} degrees in {resp.location.name}. ({resp.ms}ms)
VariableIs
{resp.value}The field at the response path, or the whole body
{resp.field.sub}Any field in a JSON reply
{resp.list.0.name}An item from a list, counting from 0
{resp.status}HTTP status code
{resp.ok}true or false
{resp.error}The error body when it failed
{resp.ms}How long it took

There's a separate error template for when the call fails. The reply can be text, an embed, or an image if the API returns one, and it can go as a reply, to a set channel, by DM, or nowhere. Integration replies can have reaction buttons.

Like reactions, integrations have role and channel limits, a cooldown, and a required argument count with a usage hint.

Run test calls the API with the arguments you type and shows the response. Click a field in it to make it the response path.

Incoming webhooks

A URL other services can send data to. A short script decides what the bot does with it.

Manage Community

Create one under Integrations and you get a URL like https://fluxer.donkcord.com/hooks/abc123.... Anything that can send a POST (GitHub, a form service, your own server) can use it. Up to 3 per community.

The script

The incoming body is {payload}. Reach into it with dots: {payload.repository.full_name}, {payload.items.0.id}. Headers are {headers.name}.

{require:payload.action == opened}
{not:payload.pull_request.draft}
{post:#dev} New PR in {payload.repository.full_name}: {payload.pull_request.title}
{post:#dev} {payload.pull_request.html_url}

Every directive is on Script directives. Paste a sample body in the panel and hit Preview to see what the script would do without doing it.

Signing

Set a signing secret and the bot will reject anything not signed with it. It checks an HMAC-SHA256 of the raw body in X-Hub-Signature-256, X-Signature-256 or X-Signature, with or without sha256= in front. That's the same format GitHub uses, so for GitHub just paste the same secret in both places.

Each URL takes 60 requests a minute and bodies up to 256 KB.

Social alerts

Post in a channel when a Twitch streamer goes live, a YouTube channel uploads, or an RSS feed gets a new post.

Manage Messages

Open Social Alerts in the panel, pick the kind, paste the channel or feed, and choose where it posts. You can also pick a role to ping and write your own message.

KindWhat to pasteWhen it postsPer community
TwitchA twitch.tv link or the channel nameAs soon as the stream starts, once per stream3
YouTubeA channel link, an @handle, or a channel id starting with UCAs soon as a video goes up5
RSSThe full address of an RSS or Atom feedChecked on a timer you pick, from every minute to every hour. 5 minutes by default25

Twitch and YouTube tell the bot the moment something happens. The bot also checks each one every hour, in case a notice got lost while it was restarting. RSS feeds can't send notices, so they're checked on the timer you set for each feed.

Only things posted after you add the alert are sent, so you won't get a flood of old videos. If a feed has a lot of new entries at once, the three newest go out and the rest are skipped. Editing an old video's title doesn't post it again.

The message

Leave it empty for the default, or write your own with these, plus any function or condition:

PlaceholderGives
{alert.name}The streamer, channel or feed name
{alert.title}Stream title, video title or post title
{alert.url}Link to the stream, video or post
{alert.game} {alert.viewers}Twitch only
{alert.summary}YouTube description or the start of the post
{alert.author}RSS post author, when the feed has one
{alert.thumbnail}Image link, when there is one
{alert.name} is live playing {alert.game}{if:{alert.viewers} > 100}, and it's busy in there{endif}

With embed on, the post includes a card with the title, link and thumbnail. With it off, the link goes at the end of the message.

Custom embed and buttons

Tick Customize the embed and add buttons to open the full editor. It starts filled in with the default layout, so you can change one part and leave the rest. Every box takes the {alert.*} variables, functions and conditions: title, link, description, colour, author, images, footer, up to 25 fields, and whether to show the post time. Back to the default layout resets it.

You can add up to 5 reaction buttons. Link buttons can use a variable as the address, like {alert.url}. Script buttons work like everywhere else, and the alert's variables are filled in when the post goes out, so a button can say {reply:{clicker.name} is watching {alert.title}}.

Test posts the latest video or feed entry, or the current stream if the channel is live, so you can check how it looks.

If something goes wrong, the error shows under that alert in the panel, like a feed that stopped working or a channel the bot can't post in.

Import and export

Move reactions, integrations and embeds between communities, or keep a backup.

Reactions, Integrations and the Embed builder each have Export and Import at the top. Export saves everything on that page to a JSON file. Each item also has its own Export for just that one, and Duplicate to make a copy you can change.

When importing, pick what to do with items that already exist: skip them, or replace them. Reactions are matched by trigger, integrations by trigger and then name.

  • Duplicates start switched off. Imported items keep whatever on or off state they were exported with.
  • Imported webhooks get a new URL and no signing secret, so update whatever sends to them.
  • Credentials are never exported. Add them again on the new community.
  • Embed imports load into the builder so you can check them before posting.
{
  "donkcord": 1,
  "kind": "reactions",
  "items": [
    { "trigger_text": "!rules", "match_type": "word", "response_type": "text", "response": "Read {#rules} before posting." }
  ]
}

Placeholders

Words in braces that get swapped for real values when the message is sent. They aren't case sensitive.

Custom reactions, welcome messages and DonkGuard DMs get the full set. The embed builder, ticket and submission panels and scheduled posts get everything except the member ones, since nobody triggered them. Button and webhook scripts have their own set, further down.

Member

PlaceholderGives
{user}A mention of the member
{user.name}Username
{user.nick}Nickname here, or display name
{user.id}User ID
{user.tag}Account tag
{user.mention}Same as {user}
{user.avatar}Avatar URL
{user.createdat}Account creation date
{user.joinedat}When they joined this community
{user.roles} {user.rolecount}Their role IDs, comma separated, and how many they have
{user.level}Their level, from Levels
{user.xp}Their total XP
{user.rank}Their place on the leaderboard, empty if they have no XP

Community and channel

PlaceholderGives
{server}Community name
{server.id}Community ID
{server.icon}Icon URL
{server.membercount}Member count
{server.ownerid}Owner's user ID
{server.createdat}When the community was made
{channel}A link to the channel
{channel.name}Channel name
{channel.id}Channel ID
{prefix}The command prefix, normally !

Arguments

Reactions only. These don't take braces.

PlaceholderGives
$1 $2The first, second word after the trigger
$2+Everything from the second word on
$*Everything after the trigger
$1.user.nameWhen $1 is a member, their username. Also .nick, .id, .mention, .tag, .avatar, .createdat, .joinedat

Mentions

PlaceholderGives
{@name}Mentions a member by username or nickname
{&role}Mentions a role by name
{#channel}Links a channel by name
{everyone} {here}Only ping when @everyone is allowed on that reaction

In any message box in the panel you can type @ to search members and roles.

Random and time

PlaceholderGives
{random(1,10)}A whole number between the two, inclusive
{choose(a,b,c)}One of the options
{choose:a;b;c}Picks one without printing it. Print it later with {choice}
{time} {time12}Current time, 24 or 12 hour
{date}Today's date
{datetime} {datetime12}Both
{timestamp}Unix time in seconds
{iso}ISO 8601 time
{uuid}A random ID

Times use the community timezone. Wrap {timestamp} in a timestamp tag to get a time that shows in each reader's own timezone: <t:{timestamp}:R>.

In button scripts

PlaceholderGives
{clicker} {clicker.mention}A mention of whoever reacted
{clicker.id} .name .nick .tag .avatarTheir details
{clicker.roles}Their role IDs, comma separated
{clicker.rolenames}Their role names, comma separated
{clicker.rolecount}How many roles they have
{clicker.isowner} {clicker.isadmin}true, or empty
{clicker.joinedat} {clicker.createdat}Join and account dates
{button.label} {button.index}The label of the button, and the number they reacted with
{server.*} {channel.*}Same as above

In a button script {user} also means the person who reacted.

In webhook scripts

{payload.*} for the body, {headers.*} for headers, {hook.name}, and {server.name}, {server.id}, {server.membercount}. Headers carrying keys or signatures are hidden. There's no channel, since nothing was posted.

Conditions

Show different text depending on who, where or what. Works everywhere placeholders do, including buttons and webhooks.

{if:user.name == sam}Hey Sam.{elseif:$1}You said $1.{else}Hi {user}.{endif}

A block starts with {if:test}, can have any number of {elseif:test}, one {else}, and ends with {endif}. Blocks can be nested.

Tests

TestPasses when
a == bBoth sides are the same
a != bThey're different
a ~ bThe left side contains the right, ignoring case
a !~ bThe left side doesn't contain the right
a > b a >= b a < b a <= bCompares numbers. Put a space on each side. If either side isn't a number, the test fails
aIt has a value. Empty, 0, false and null don't count

You can leave the braces off the left side. {if:user.name == sam} and {if:{user.name} == sam} are the same. Arguments work too: {if:$2} checks whether a second word was given.

Joining tests

&& means both have to pass, || means either one. && is checked first, so a && b || c reads as "a and b, or c".

{if:$1 >= 1 && $1 <= 6}You rolled a $1.{else}Pick a number from 1 to 6.{endif}
{if:clicker.rolenames ~ Moderator}
Welcome back, mod.
{else}
This one's for mods.
{endif}

When a tag sits on a line by itself, the line break goes with it, so you can lay blocks out over several lines without leaving gaps in the message.

In a button on a reaction, a test that uses {clicker.*} is left alone when the reaction posts and checked when someone reacts.

Functions and counters

Do sums, change text, pick things at random, keep values for later, and count things across messages. These work everywhere placeholders do.

Functions

FunctionGivesExample
{math:expression}Works out a sum. + - * / % ^, brackets, and round, floor, ceil, abs, min, max, sqrt. Prints NaN if it can't{math:round($1 * 1.2)}
{upper:text} {lower:text}Capital or small letters{upper:$1}
{length:text}How many characters{length:$*}
{replace:find|with|text}Swaps every find for with{replace:_| |$1}
{ord:number}1st, 2nd, 23rdYou are our {ord:{server.membercount}} member
{list:n|a;b;c}Item number n. -1 is the last. With no semicolons it splits on spaces{list:-1|$*}
{weighted:a=9;b=1}Random pick, higher numbers come up more often{weighted:common=80;rare=19;legendary=1}
{random(1,100):seed}A random number that's always the same for the same seed{random(1,100):{user.id}}
{choose(a,b,c):seed}A pick that's always the same for the same seed{choose(cat,dog,owl):{target.id}}
{since:date} {until:date}How long ago, or how long until. Takes a unix time or a date placeholder{since:{user.createdat}}

Functions can go inside each other and inside placeholders: {upper:{list:2|$*}}. Anything a member types stays as plain text, so nobody can slip a function into an argument.

$1+ means "everything from the first word on", so in a sum put spaces around the plus: {math:$1 + $2}.

Variables

{set:name|value} saves a value without printing anything, and {var:name} prints it. In reactions and welcome messages a variable lasts for that message. In button and webhook scripts it lasts for the rest of the script.

{set:total|{math:$1 * $2}}
$1 x $2 = {var:total}{if:{var:total} > 100}, that's a lot{endif}

Counters

Counters are numbers the bot keeps for the community, so they carry over between messages and restarts.

UseDoes
{counter:name}Adds 1 and prints the new number
{counter:name|5}Adds 5. Use a minus number to take away
{counter:name|=0}Sets it to a number
{count:name}Prints it without changing it

Put a placeholder in the name to get one counter per member: {counter:hugs.{target.id}}. A counter only moves once per message, even if you use it in the title and the text. Embed builder posts, ticket and submission panels only read counters, they never change them. A community can have 5,000 counters.

Trigger:  !hug
Match:    Starts with
Response: {user} hugs {target}. That's hug number {counter:hugs.{target.id}} for {target.nick}.

{target} and {uses}

In reactions, {target} is the first member named after the trigger, or the person who used it if nobody was named. It has the same parts as {user}: {target.nick}, {target.id}, {target.avatar}, {target.joinedat} and so on. {uses} is how many times the reaction has been used, counting this time.

Script directives

Button and webhook scripts are a few lines, run top to bottom. A line that starts with a directive does that thing. Any other line is posted as a message.

DirectiveDoesExample
{post:#channel} textPosts to a channel. Use a #name, a channel mention or an ID.{post:#mod-log} {clicker} opened the door
{post} textOn a button, replies under the message the reaction is on. A plain line does the same.{post} Thanks, {clicker}.
{embed:#channel} titlePosts an embed with that title.{embed:#news} Server restart in 5 minutes
{run:command}Runs a bot command. See below.{run:setrole {clicker.id} Verified}
{dm:@user} textDMs a member. Use an ID or mention.{dm:{clicker.id}} You're in.
{reply:text}Buttons only. The text of the notice the member gets after reacting. It pings them and deletes itself after 15 seconds.{reply:Role added.}
{edit:text}Buttons only. Rewrites the text of the message the reaction is on. Embeds and reactions stay.{edit:Closed by {clicker.mention}.}
{disable}Buttons only. Takes every reaction off the message and stops it responding. The rest stays.{disable}
{remove}Buttons only. Deletes the message the reaction is on after everything else has run.{remove}
{set:name|value}Saves a value for the rest of the script. Read it with {var:name}.{set:n|{math:{clicker.rolecount} + 1}}
{require:test}Stops unless the test passes.{require:clicker.isadmin}
{not:test}Stops if the test passes.{not:payload.draft}
{stop}Ends the script there.{stop}
{if} {elseif} {else} {endif}Run lines only when a test passes. Each on its own line.See Conditions

Lines starting with // are skipped, so you can leave yourself notes. A script can post up to 10 times and run up to 5 commands.

Commands for {run:}

CommandFormat
setrole, removerolesetrole user role
announceannounce #channel text
warnwarn user [reason]
mutemute user [minutes] [reason], 10 minutes if left out
unmuteunmute user
kickkick user [reason]
ban, unbanban user [reason]
slowmodeslowmode #channel seconds
lock, unlocklock #channel [reason]

A user can be an ID or a mention. On a button, everything past setrole, removerole and announce needs roles set on the button first.

Reaction modifiers like {delete} and {silent} don't do anything in scripts. To delete the message a button is on, use {remove}.

Channel monitor

Watch a channel live from the panel and post into it as the bot.

Messages show up with the formatting, replies, embeds and attachments you'd see in Fluxer, starting with the last 100. You only see channels you can see in Fluxer.

Posting needs Manage Messages and Send Messages in that channel. Deleting a message from the monitor needs Manage Messages.

Archive and viewer

Save a whole channel to a file, then read it back later in the panel.

Manage Community

CommandDescriptionUsageExample
!archive channelStarts an archive. A limit of 0, or no limit, means every message. Before and after take message IDs.!archive channel #channel [limit=0] [before=id] [after=id]!archive channel #general
!archive statusArchives running and ready to download.!archive status!archive status
!archive cancelStops one that's running.!archive cancel #channel!archive cancel #general

Text channels and voice channel chats work. The finished file is a .jsonl, one message per line. The download link only lasts a few minutes, so grab it when it's ready.

Viewer

Open the file on the Archive page. It's read in your browser and never uploaded. You can search, filter by member and date, and narrow down to images, files, links, embeds, replies, edited or pinned messages. Clicking a reply jumps to the original.

Site embeds

Put a live Fluxer channel on your own website. Visitors read it, and if you allow it, sign in with Fluxer and post.

Manage Messages

Each embed gives you a snippet to paste into your site. Up to 3 per community. They're on the Monitor / External Embeds page.

Who can see and post

  • Viewing: anyone, anyone signed in, community members, people who can see the channel in Fluxer, or certain roles.
  • Posting: anyone signed in, members only, certain roles, or guests. You can also set a minimum account age and block users.
  • Allowed sites: the domains it's allowed to load on. *.example.com works.

Posts from the site show up in Fluxer through a webhook named after the poster, name (web) by default. They go through the embed's own word filter and DonkGuard if you turn it on, and you can set a cooldown, a per-minute limit and a max length.

Looks

Light, dark or match the visitor. Accent colour, background, spacing, font size, corner radius, which parts of messages show (avatars, times, images, embeds, replies), and what the lock screen says when someone isn't allowed in.