Managing messages - SinisterRectus/Discordia GitHub Wiki
Messages are a huge part of the Discord API. Being able to interact with and construct them is essential to proper bot creation. For general information regarding properties and methods, see the Message page.
Events
Discordia has 9 events that correspond to messages:
messageCreate
messageUpdate
messageDelete
messageUpdateUncached
messageDeleteUncached
reactionAdd
reactionRemove
reactionAddUncached
reactionRemoveUncached
Visit the events page for more information.
Caching and Querying Messages
Discordia stores messages with weak references. This means that if a message is not strongly referenced somewhere, it will be cleaned up during the next garbage collection cycle. This is done so that messages can be retained while they are referenced from other locations, but volatile when memory limitations prevent messages from accumulating infinitely.
Every TextChannel has a messages
cache property associated with it. If you want to access cached messages, use the
standard methods for Iterable classes.
A variety of TextChannel methods may also be used to access channel messages. See TextChannel.
Sending Messsages
Messages can be sent to different destinations by two different methods. The destination can be either a PrivateChannel, GuildTextChannel, GroupChannel, User, Member, or Relationship instance.
Simple message formatting
channel:send("Hello!")
This is used when you just want to send a simple string to a channel. Remember that send
returns a Message
object
when successful, or nil
, err
when it is not.
Advanced message formatting
You can also use a table to format your outgoing message. Acceptable fields are explained below.
content
must be a Lua string. Due to limitations in unicode handling, characters outside of the printable range of ASCII characters may prevent a message from being sent.
channel:send {
content = "Hello!"
}
tts
a boolean indicating whether the content is interpreted as text-to-speech. You must have appropriate permissions to send these messages and other users must have them enabled to hear them.
channel:send {
content = "Hello!",
tts = true
}
nonce
a custom value used to identify a message. Use of this property is not recommended.
channel:send {
content = "Hello!",
nonce = 1234
}
embed
a Lua table that produces a rich-formatted message. It must match the object outlined by the
official Discord docs, including snake_case
formatting. A content
field is not required if embed
is sent.
message.channel:send {
embed = {
title = "This is an embed!",
fields = {
{name = "Field 1", value = "Some information", inline = true},
{name = "Field 2", value = "More information", inline = true},
},
color = discordia.Color.fromRGB(114, 137, 218).value,
timestamp = discordia.Date():toISO('T', 'Z')
}
}
Note that color
must be a number and timestamp
must be an ISO8601 string.
file
a relative or full path to a file to upload with the message, or, a table with a filename and raw file content as a string.
channel:send {
file = "lolcat.jpg",
}
channel:send {
file = {"document.txt", "This is a text document."}
}
files
an array of files as defined above. This can be used simultaneously with the file
field.
channel:send {
files = {
"lolcat.jpg",
"other.txt",
{"document.txt", "This is a multi-file upload."}
}
}
mention
a mentionable object whose mentionString
property will be prepended to the message content.
channel:send {
content = "Hello!",
mention = message.author,
}
mentions
an array of mentionable objects as defined above. This can be used simultaneously with the mention
field.
channel:send {
content = "Hello!",
mentions = {message.author, client.owner},
}
code
indicates whether to wrap the content in a markdown-formatted codeblock. If a string is passed, it is used to define the formatting style; otherwise, if true
is passed, neutral formatting is used.
channel:send {
content = "local foo = 'bar'",
code = "lua"
}
reference
a Lua table that indicates a reply, where the message
field is a Message-ID-Resolvable representing the message being replied to, and the mention
field is a boolean indicating whether to mention the user being replied to.
channel:send {
content = "Hello!",
reference = {
message = message,
mention = false,
}
}
Editing Messages
Discordia applications can edit the content and embeds of their own messages with a mutator method:
message:setContent("Goodbye!")
message:setEmbed {
description = "edited",
color = discordia.Color.fromHex("#FFFFFF").value
}
Reactions
You can use Discordia to add and remove reactions to and from messages (assuming that your account has permissions to do so). For custom emojis, you must use an emoji object. For standard unicode emojis, you can use either a unicode character or unicode string:
local emoji = guild.emojis:find(function(e) return e.name == 'Lua' end)
message:addReaction(emoji)
message:addReaction("👍")
message:addReaction("\240\159\145\140")
message:removeReaction("👍")