# Discord/Robyul

Robyul is AGPL3.0 bot which is a "K-pop discord bot", but we don't care, we use it for our own purposes.

It does statistics on join/leave/chat, complete chat log that is preserved even if the author modifies it, deletes it, or otherwise alter the original data, etc etc documented below. This is a summary of the full command list, but that includes lots of unrelated functions, so this page serves as Miraheze's quick documentation.

## Permission

Robyul's advanced permissions (like moderation commands) are only accepted if the user has the correct permission. This is checked by if the user has a correct role. Site Reliability Engineering have `admin` permission, and System Administrators and Stewards have `mod` permission. CVT have partial mod access to #CVT group.

Current role hierarchy (with moderating access):

```---- Below have admin access ----
Site Reliability Engineering
Robyul Manager
---- Above have admin access -----
---- Below have mod access ----
Stewards
CVT (confined to CVT category)
Moderator Bot
---- Above have mod access ----
```

## Moderation

### Chatlog

You must have "admin server" permission as part of your roles to see this.

Then log in to the web interface. You'll see chatlog below the miraheze logo.

### User investigation

Robyul performs automated checks when new users join. For now, following automated checks are performed:

```User is banned on a different server with Robyul on.
User has none other common servers with Robyul.
Account is less than one week old.
```

Manual inspection can be performed by `_inspect @ID#DiscordTag`. This require `mod` role or above.

### Mute, kick, ban

Discord's native moderation does not allow expiring moderation. On IRC, we leverage this using litharge, but on discord, we use Robyul. To perform commands in this section, you need to have at least `mod` role.

mute
• `_mute @user#discordtag for ${\displaystyle x}$ minutes/hours/days` User is muted on whole server for given time.
• `_pending-unmutes` lists currently muted users, waiting for unmute or expiration.
• `_unmute @user#discordtag` repeals the `_mute`.
kick
• `_kick @user#discordtag reason` kicks user. Reason provided are saved in the audit log.
ban
• `_ban @user#discordtag number_of_days reason` bans the user, logs the reason in audit log, and deletes the recent number_of_days day's messages.
• You cannot unban using the bot. Do it in Discord interface.

## Custom commands

You can set custom commands, just like !words in wm-bot @ IRC. You must be recognized by Robyul as `mod` or above to make a new command.

• Type `_commands list` to see all available commands.
• Type `_commands add COMMAND OUTPUT` - when you say _COMMAND, bot will respond OUTPUT.

## Miscellaneous

• `_dig DOMAIN TYPE` does DNS query. Example: `_dig miraheze.org MX`
• `_whois domain` does whois query. IP cannot be whois'ed. Example: `_whois miraheze.org`
• `_isup domain` checks isup.me. For those who are too lazy to visit the website. Example: `_isup miraheze.org`