Reference
Bot actions
Every request a bot may send the server, the scopes that let it, and its rate limit. A bot sends nothing else: the server refuses any other action from a bot before it runs. illest.py sends these for you; the last column names the methods that do.
Generated from the server's own rules (bot_scopes.rs) and its action table, so it is what the server enforces.
signing in and the account's own devices: every bot
| Action | Who may | Rate | illest.py |
|---|---|---|---|
auth.credential | any bot | 10, then 1/s | no method of its own |
auth.device.list | any bot | 10, then 2/s | no method of its own |
auth.device.rename | any bot | 10, then 2/s | no method of its own |
auth.device.revoke | any bot | 10, then 2/s | no method of its own |
auth.login.begin | any bot | 5, then 1/s | no method of its own |
auth.login.complete | any bot | 5, then 1/s | no method of its own |
auth.login.verify | any bot | 5, then 1/s | no method of its own |
auth.logout | any bot | 10, then 2/s | no method of its own |
auth.recover.begin | any bot | 5, then 1/s | no method of its own |
auth.recover.complete | any bot | 3, then 0.5/s | no method of its own |
auth.recover.verify | any bot | 3, then 0.2/s | no method of its own |
auth.register.begin | any bot | 3, then 0.2/s | no method of its own |
auth.register.cancel | any bot | 10, then 2/s | no method of its own |
auth.register.complete | any bot | 5, then 1/s | no method of its own |
auth.register.work | any bot | 5, then 0.5/s | no method of its own |
auth.release | any bot | 5, then 0.5/s | no method of its own |
auth.reset.begin | any bot | 5, then 1/s | no method of its own |
auth.reset.complete | any bot | 3, then 0.2/s | no method of its own |
auth.session.revoke_all | any bot | 10, then 2/s | no method of its own |
auth.unpark | any bot | 5, then 0.5/s | no method of its own |
badges and reports
| Action | Who may | Rate | illest.py |
|---|---|---|---|
badge.list | any bot | 10, then 2/s | no method of its own |
bots: owning one is a person's; a bot's own identity and menu are its own
| Action | Who may | Rate | illest.py |
|---|---|---|---|
bot.commands.get | any bot | 20, then 2/s | CommandTree.fetch_commands |
bot.commands.set | any bot | 5, then 0.5/s | Bot.sync_menuCommandTree.sync |
bot.identify | any bot | 10, then 1/s | no method of its own |
bot.identity.publish | any bot | 5, then 1/s | no method of its own |
bot.infoWhat any bot's invite page shows; a bot reads its own to learn its owner. | any bot | 20, then 2/s | Bot.is_owner |
commands.indexThe `/` picker's list for a place (D-361): what the bots there answer to, as a member reads it. | any bot | 20, then 2/s | no method of its own |
conversations
| Action | Who may | Rate | illest.py |
|---|---|---|---|
channel.devices | messages.read or messages.write | 40, then 8/s | no method of its own |
channel.disappear.set | moderate | 60, then 10/s | no method of its own |
channel.dm.open | messages.write | 10, then 1/s | Client.open_dm |
channel.get | messages.read or messages.write | 40, then 8/s | no method of its own |
channel.group.leave | any bot | 60, then 10/s | GroupChannel.leave |
channel.hide | messages.read or messages.write | 10, then 2/s | no method of its own |
channel.list | messages.read or messages.write | 10, then 2/s | no method of its own |
channel.messages.clearA moderator's /clear: the ids a reading bot picked, or the newest by count (D-329). | moderate | 10, then 2/s | no method of its own |
channel.messages.list | messages.read | 40, then 8/s | MlsRuntime.missed_frames |
channel.messages.purge | moderate | 30, then 10/s | TextChannel.purge |
channel.pins.list | messages.read | 10, then 2/s | Messageable.pins |
channel.read | messages.read | 10, then 2/s | no method of its own |
channel.topic.set | moderate | 10, then 2/s | no method of its own |
channel.typing | messages.write | 10, then 6/s | Client.send_typing |
channel.unread | messages.read | 10, then 2/s | no method of its own |
link.preview | messages.write | 10, then 0.5/s | no method of its own |
media.fetchA picture for a message the bot is about to send, fetched once so readers never fetch it (D-364). | messages.write | 20, then 1/s | Client.fetch_media |
media.ticket | messages.read or messages.write | 10, then 1/s | no method of its own |
message.pin | moderate | 30, then 10/s | Message.pinPartialMessage.pin |
message.redact | moderate | 30, then 10/s | Client.redact_message |
message.send | messages.write | 20, then 5/s | no method of its own |
message.unpin | moderate | 30, then 10/s | Message.unpinPartialMessage.unpin |
pins.get | any bot | 20, then 2/s | no method of its own |
pins.put | any bot | 10, then 0.5/s | no method of its own |
presence.set | any bot | 5, then 1/s | Client.change_presence |
friends: a bot may be asked and may ask (the request says it is a bot), and may always say no
| Action | Who may | Rate | illest.py |
|---|---|---|---|
friend.accept | messages.write | 10, then 2/s | no method of its own |
friend.block | any bot | 10, then 2/s | no method of its own |
friend.blocked | any bot | 10, then 2/s | no method of its own |
friend.list | messages.read or messages.write | 10, then 2/s | no method of its own |
friend.reject | any bot | 10, then 2/s | no method of its own |
friend.remove | any bot | 10, then 2/s | no method of its own |
friend.request | messages.write | 10, then 0.5/s | no method of its own |
friend.unblock | any bot | 10, then 2/s | no method of its own |
servers: reading them, joining by invite, leaving; moderating with `moderate`; reshaping one with `guilds.manage`; never
| Action | Who may | Rate | illest.py |
|---|---|---|---|
guild.application.decidemaking, deleting or handing one over ── | moderate | 10, then 2/s | no method of its own |
guild.application.form.get | guilds.read | 10, then 2/s | no method of its own |
guild.application.get | moderate | 10, then 2/s | no method of its own |
guild.application.list | moderate | 10, then 2/s | no method of its own |
guild.audit | moderate | 10, then 4/s | Guild.audit_logs |
guild.automod.event.settleAutoMod (D-329). Its rules are the managers' to set, never a bot's; a bot may read them, settle what AutoMod caught and shut or open the door in a raid, as anti-raid bots do. A report is a reader's own app's: three of them time a member out, so a bot that could file them could time anybody out. | moderate | 20, then 5/s | no method of its own |
guild.automod.events | moderate | 10, then 2/s | no method of its own |
guild.automod.get | guilds.read | 20, then 2/s | no method of its own |
guild.automod.lockdown | moderate | 5, then 1/s | no method of its own |
guild.automod.raid.remove | moderate | 5, then 1/s | no method of its own |
guild.ban | moderate | 10, then 2/s | Client.banGuild.banMember.ban |
guild.bans | moderate | 10, then 2/s | Guild.bans |
guild.boosts | guilds.read | 10, then 2/s | no method of its own |
guild.category.create | guilds.manage | 10, then 2/s | no method of its own |
guild.category.delete | guilds.manage | 10, then 2/s | GuildChannel.delete |
guild.category.permissions | guilds.manage | 10, then 2/s | no method of its own |
guild.category.permissions.set | guilds.manage | 10, then 2/s | no method of its own |
guild.category.reorder | guilds.manage | 10, then 2/s | no method of its own |
guild.category.update | guilds.manage | 10, then 2/s | GuildChannel.edit |
guild.channel.create | guilds.manage | 10, then 2/s | no method of its own |
guild.channel.delete | guilds.manage | 10, then 2/s | GuildChannel.delete |
guild.channel.followFollowing another server's announcements makes a feed into one of this server's channels, as making a channel does (D-365); a channel's published posts are words already made public, read as messages are. | guilds.manage | 5, then 0.5/s | no method of its own |
guild.channel.lock/lock and /unlock: only the @everyone override's Send messages, which a moderating bot may flip as a person may. | moderate | 10, then 2/s | no method of its own |
guild.channel.permissions | guilds.manage | 10, then 2/s | no method of its own |
guild.channel.permissions.set | guilds.manage | 10, then 2/s | GuildChannel.editGuildChannel.set_permissions |
guild.channel.published | messages.read | 5, then 1/s | no method of its own |
guild.channel.reorder | guilds.manage | 10, then 2/s | no method of its own |
guild.channel.unfollow | guilds.manage | 5, then 0.5/s | no method of its own |
guild.channel.update | guilds.manage | 10, then 2/s | GuildChannel.edit |
guild.counter.addCounters make, rename and delete a channel, as the channel actions do (D-350). | guilds.manage | 5, then 0.5/s | no method of its own |
guild.counter.remove | guilds.manage | 5, then 0.5/s | no method of its own |
guild.counter.set | guilds.manage | 5, then 1/s | no method of its own |
guild.expression.create | guilds.manage | 10, then 2/s | Guild.create_custom_emoji |
guild.expression.delete | guilds.manage | 10, then 2/s | Emoji.delete |
guild.expression.list | guilds.read | 10, then 2/s | Guild.fetch_emojis |
guild.expression.update | guilds.manage | 10, then 2/s | no method of its own |
guild.follows.list | guilds.read | 5, then 1/s | no method of its own |
guild.get | guilds.read | 10, then 2/s | Client.fetch_guild |
guild.giveaway.cancelA giveaway bot's work, its managers' right (D-351); entering is a person's, never a bot's. | guilds.manage | 5, then 0.5/s | no method of its own |
guild.giveaway.end | guilds.manage | 5, then 0.5/s | no method of its own |
guild.giveaway.list | guilds.manage | 5, then 1/s | no method of its own |
guild.giveaway.reroll | guilds.manage | 5, then 0.5/s | no method of its own |
guild.giveaway.start | guilds.manage | 5, then 0.2/s | no method of its own |
guild.invite.create | guilds.manage | 20, then 2/s | GuildChannel.create_invite |
guild.invite.list | moderate | 10, then 2/s | Guild.invites |
guild.invite.preview | guilds.read | 20, then 3/s | no method of its own |
guild.invite.revoke | guilds.manage | 10, then 2/s | Invite.delete |
guild.invites.joinsWho invited whom, as the invites list is read (D-350). | moderate | 5, then 1/s | no method of its own |
guild.join | guilds.read | 30, then 2/s | Client.join_guild |
guild.kick | moderate | 10, then 2/s | Client.kickGuild.kickMember.kick |
guild.leave | any bot | 10, then 2/s | Client.leave_guild |
guild.levels.getThe server's own lines in a channel are read beside its messages, so reading them is reading messages. | members.read | 10, then 2/s | no method of its own |
guild.levels.list | members.read | 5, then 1/s | no method of its own |
guild.levels.reset | guilds.manage | 10, then 2/s | no method of its own |
guild.line.delete | moderate | 30, then 5/s | no method of its own |
guild.lines.list | messages.read | 5, then 1/s | no method of its own |
guild.list | guilds.read | 10, then 2/s | no method of its own |
guild.members | members.read | 15, then 3/s | Client.fetch_members |
guild.message.publish | messages.write | 10, then 1/s | no method of its own |
guild.message.unpublish | messages.write | 10, then 1/s | no method of its own |
guild.onboarding.get | guilds.read | 10, then 2/s | no method of its own |
guild.onboarding.preview | guilds.read | 20, then 3/s | no method of its own |
guild.overrides | guilds.read | 10, then 4/s | no method of its own |
guild.overrides.all | guilds.read | 6, then 2/s | no method of its own |
guild.profile.get | guilds.read | 15, then 3/s | no method of its own |
guild.profile.set | messages.write | 10, then 2/s | Member.edit |
guild.role.assign | moderate | 10, then 2/s | Member.add_rolesMember.remove_roles |
guild.role.create | guilds.manage | 10, then 2/s | Guild.create_role |
guild.role.delete | guilds.manage | 10, then 2/s | Role.delete |
guild.role.reorder | guilds.manage | 10, then 2/s | no method of its own |
guild.role.update | guilds.manage | 10, then 2/s | Role.edit |
guild.rules.get | guilds.read | 10, then 2/s | no method of its own |
guild.rules.let_in | moderate | 10, then 2/s | no method of its own |
guild.rules.set | guilds.manage | 10, then 2/s | no method of its own |
guild.timeout | moderate | 10, then 2/s | Client.timeoutMember.timeout |
guild.unban | moderate | 10, then 2/s | Client.unbanGuild.unbanMember.unban |
guild.vanity.resolve | guilds.read | 30, then 3/s | no method of its own |
guild.warn | moderate | 30, then 5/s | no method of its own |
guild.warning.delete | moderate | 30, then 5/s | no method of its own |
guild.warnings | moderate | 15, then 3/s | no method of its own |
the encrypted groups
| Action | Who may | Rate | illest.py |
|---|---|---|---|
identity.certify | any bot | 5, then 1/s | no method of its own |
identity.get | any bot | 10, then 2/s | no method of its own |
identity.publishThe handler refuses a bot itself and says which action is a bot's (`bot.identity.publish`), which a refusal here would hide. | any bot | 5, then 1/s | no method of its own |
mls.commit.submit | messages.read or messages.write | 20, then 5/s | MlsRuntime.move_leaves |
mls.commits.since | messages.read or messages.write | 60, then 12/s | MlsRuntime.catch_up |
mls.grant.clear | messages.read or messages.write | 5, then 1/s | no method of its own |
mls.grant.issue | messages.read or messages.write | 20, then 5/s | no method of its own |
mls.grant.needed | messages.read or messages.write | 60, then 12/s | no method of its own |
mls.group.reset | messages.read or messages.write | 2, then 0.2/s | no method of its own |
mls.group.roster | messages.read or messages.write | 10, then 2/s | no method of its own |
mls.group_info.get | messages.read or messages.write | 10, then 2/s | no method of its own |
mls.group_info.publish | messages.read or messages.write | 20, then 5/s | no method of its own |
mls.key_packages.claim | messages.read or messages.write | 30, then 6/s | no method of its own |
mls.key_packages.count | messages.read or messages.write | 10, then 2/s | no method of its own |
mls.key_packages.publish | messages.read or messages.write | 5, then 1/s | MlsRuntime.publish_key_packages |
mls.key_packages.purge | messages.read or messages.write | 5, then 1/s | no method of its own |
mls.welcomes.ack | messages.read or messages.write | 10, then 2/s | MlsRuntime.accept_welcomeMlsRuntime.recover_offline |
mls.welcomes.pending | messages.read or messages.write | 10, then 2/s | MlsRuntime.recover_offline |
people
| Action | Who may | Rate | illest.py |
|---|---|---|---|
name.available | any bot | 20, then 2/s | no method of its own |
name.resolve | any bot | 20, then 2/s | no method of its own |
user.get | any bot | 20, then 4/s | Client.fetch_user |
user.update | any bot | 10, then 2/s | ClientUser.edit |
calls: a bot has no microphone; it may moderate one with `moderate`
| Action | Who may | Rate | illest.py |
|---|---|---|---|
voice.member.deafen | moderate | 12, then 4/s | Member.edit |
voice.member.disconnect | moderate | 12, then 4/s | Member.move_to |
voice.member.move | moderate | 12, then 4/s | Member.move_to |
voice.member.mute | moderate | 12, then 4/s | Member.edit |
voice.states | guilds.read | 10, then 2/s | Guild.fetch_voice_states |