User Tools

Site Tools



discordchat

Discord Chat

This addon will send in-game chat to a discord channel. It will also take any messages (and commands) sent in that same discord channel and send it in-game.

As an example, imagine if someone talks to you on your linkshell 3. You can see the chat in Discord on your phone, and you can reply to them in the in-game linkshell with:

!l3 Hello.

Anything you message in Discord that starts with ! will be processed as a FF14 chatbox input. !l3 Hello becomes /l3 Hello

Important Notes

  • There may be up to a 2 second delay in sending messages from FF14 to Discord, and up to a 4 second delay in sending messages from Discord to FF14.
  • Please follow all these instructions to set up the addon. You can do all these setup steps without buying/installing the addon, and I would recommend doing so.
  • Auto-Translate phrases are not sent.

—-


Opening the Discord Chat Addon Window

The Discord Chat Plug-in window is under the FFXIVMinion menu.


http://wiki.mmominion.com/doku.php?ns=%3A&image=%3Adiscordchat.png&do=media

Creating a Discord Server and Channel

You will likely want a private server for this plug-in, for your own privacy.

  1. Optionally, create a separate channel for your bot to use.
  2. Get the channel ID of the channel you'd like to use.
  3. In Discord, open your User Settings. Under Appearance, make sure Enable Developer Mode is checked on.
  4. Right-click on the Discord text channel you would like to use, and press Copy ID. This will copy the channel ID to your clipboard.
  5. Paste the ID into MMOMinion's Discord Chat addon, under Bot Token/Channel, in Channel.

Creating a Bot and Receiving a Token

  1. Create a bot starting here.
  2. Log in and click New Application.
  3. Choose anything you want a name. Something like FF14 Chatbot is appropriate.
  4. On the left side, under Settings, click on Bot.
  5. Under Build-A-Bot, click on Add Bot. Hit Yes, do it! on the confirmation that pops up.
  6. Optionally, configure your bot's username here.
  7. Under Token, click Copy to copy the token to your clipboard.
  8. Paste the bot token into the Discord Chat addon in MMOMinion, under Bot Token/Channel, in Token.
  9. On the left side, go to OAuth2. Scroll down to Scopes and check bot.
  10. Scroll down to Bot Permissions and check View Channels and Send Messages.
  11. Copy the URL under the checkboxes in Scopes and visit the URL in your clipboard.
  12. Log-in to discord and authorize the bot to join your server.
  13. Activate the bot token, in the next section.

Activating the Bot Token

Each bot token needs to be activated once it's created, before it can be used by the Discord Chat addon. This only needs to be done once. This is to allow the token to send messages to the server, and the activation form below only sends your token to Discord.

Paste the token into the form below, then hit Activate. Note that you must do this from your primary web browser, and not MMOMinion's built-in browser.


Configuring the Bot

Under Channels, you can select which in-game channels to send to discord. You can optionally change the name of the channel.

Under Configuration, you can find these options:

  • Autostart: Start the plugin when the MMOMinion is loaded.
  • Command Prefix: Defaulted to !. The prefix to commands the bot will listen to.
  • Timestamp Format: Defaulted to %H:%M. The format of the timestamp sent to discord for in-game messages.
  • Send Channel Name: Defaulted to on. Sends the name of the channel to discord for in-game messages.
  • Receive From Discord: Defaulted to on. Listens for messages in the discord channel.
  • Send To Discord: Defaulted to on. Sends messages from in-game to the discord channel.
  • Logging Level: Defaulted to 0. Increasing this will show more debug statements in console.

When an external addon registers itself with DiscordChat, the external addon's Discord usage can be enabled or disabled under External Plugins

Advanced Channel Configuration

You can configure the addon to send messages in different chat channels in FF14 (such as Say, FC, LS1, LS4) to go to a different channel in Discord.

You can create multiple channels in your Discord server, Copy ID in Discord, and paste them in the Channels configuration window.

You can also specify a hex color to distinguish between messages. For example, ff0000 would give a red color, and 00ff00 would give a green color. You can use any color picker to select colors in this format.

If you enable (Experimental) Listen on channel, you can enable Listen on channels in the Channels menu. This will let you reply directly in separate chat channels.

Mention Keywords

You can specify specific keywords, that when said in chat, will notify you in discord with an @ mention. These can be found under the Bot Token/Channel menu. Your User ID can be obtained by right clicking yourself on Discord's Member List and selecting Copy ID

Custom Commands

If you want to program your own commands and responses, you can program simple ones with custom commands. (You can more easily make complex ones using the public API in the next section.)

Under Custom Commands, define a prefix, and a response. A return value will be send back to the channel the command was sent in. There are two additional commands you can use, message and SendMessage. message is the discord message that triggered the response (you can simply return this to see what the contents are), and SendMessage is a command to send additional messages beyond the return value.

Here are two examples:

Returns your current HP

Prefix: hp

Code:

return Player.hp.current

Returns your current map and position

Prefix: pos

Code:

return GetMapName(Player.localmapid)..": <"..Player.pos.x..", "..Player.pos.y..", "..Player.pos.z..">"

Public API for Other Addons

Other plugins can send messages and listen for messages through a public API. With DiscordChat installed, you can call

my_module.SendDiscordMessage = discord_chat_api.Register(Plugin Name, Command Prefix, Command Callback)

and it will return you a function to send messages with.

Here's an example addon that sends and listens for commands.

-- Discord chat API example.
--
-- Look for a global discord_chat_api variable.
-- discord_chat_api.Register(Plugin Name, Command Prefix, Command Callback)
-- returns a function, SendMessage(message)
--
-- SendMessage will let you send a message through the bot
-- Command Callback is a single argument function that takes a message whenever
-- a discord message is sent with the prefix
--
-- Note that there is currently a ~5 second delay in receiving messages
-- and a ~2 second delay in sending
 
local test_discord_plugin = {}
test_discord_plugin.gui_open = true
test_discord_plugin.received = {}
 
function test_discord_plugin.ModuleInit()
    -- Menu item
    ml_gui.ui_mgr:AddMember({
        id = "FFXIVMINION##TEST_DISCORD_PLUGIN", name = "Test Discord Plugin",
        onClick = function()
            test_discord_plugin.gui_open = not test_discord_plugin.gui_open
        end},
        "FFXIVMINION##MENU_HEADER")
 
    -- Register with discord chat
    if discord_chat_api ~= nil then
        test_discord_plugin.SendMessage = discord_chat_api.Register(
            "test discord plugin", "test", test_discord_plugin.ProcessMessage)
    else
        test_discord_plugin.SendMessage = function(message)
            d("DiscordChat not installed", message)
        end
    end
end
 
function test_discord_plugin.ProcessMessage(message)
    d("Received Message")
    d(message)
    table.insert(test_discord_plugin.received, message.content)
end
 
function test_discord_plugin.Draw(event, ticks)
    if test_discord_plugin.gui_open then
        GUI:SetNextWindowSize(100,50,GUI.SetCond_FirstUseEver)
        test_discord_plugin.visible, test_discord_plugin.gui_open = GUI:Begin(
            "Test Discord Chat", test_discord_plugin.gui_open)
        if test_discord_plugin.visible then
            local pushed = GUI:Button("Send Message")
            if pushed then
                test_discord_plugin.SendMessage("Test Message From Plugin")
            end
            for _, recv in pairs(test_discord_plugin.received) do
                GUI:Text(recv)
            end
        end
        GUI:End()
    end
end
 
RegisterEventHandler("Gameloop.Draw", test_discord_plugin.Draw, "Test Discord Plugin")
RegisterEventHandler("Module.Initalize", test_discord_plugin.ModuleInit)

The message passed into your registered callback looks something like this:

{
	attachments = 
	{
	},
	author = 
	{
		avatar = "...",
		discriminator = "0000",
		id = "...",
		username = "(name)",
	},
	channel_id = "...",
	content = "!test message",
	embeds = 
	{
	},
	id = "...",
	mention_everyone = false,
	mention_roles = 
	{
	},
	mentions = 
	{
	},
	pinned = false,
	timestamp = "2019-04-05T05:56:35.531000+00:00",
	tts = false,
	type = 0,
}
discordchat.txt · Last modified: 2019/04/22 09:13 by mochi