Giter VIP home page Giter VIP logo

terracord's Introduction

AppVeyor build status Travis CI build status Code Climate maintainability CodeFactor grade Discord

Terracord

Terracord is a DiscordTerraria bridge plugin for TShock. The plugin enables the bi-directional flow of messages between a Discord text channel and a TShock server. This project is inspired by DiscordSRV which is a Discord ↔ Minecraft chat relay plugin for PaperMC and Spigot.

Terracord is written in C# and is licensed under the terms of the GPLv3. This project makes use of Discord.Net and the Terraria API.

Installation and Setup

Discord Bot

  1. Follow the instructions here to create a bot and invite it to your server. Make note of the bot token as you'll need it later.

  2. Give the bot the following server-wide permissions:

    Permissions
    Permission Required Effect Scope
    Read Text Channels & See Voice Channels/Read Messages ✔ Yes Allows the bot to view channels and messages within a text channel Server/Channel
    Send Messages ✔ Yes Allows the bot to send messages in a text channel Server/Channel
    Read Message History ✔ Yes Allows the bot to see previous messages in a text channel Server/Channel
    Change Nickname ❌ No Allows the bot to change its own nickname when the configuration is reloaded Server
    Embed Links ❌ No Allows the bot to embed links within a text channel Server/Channel
    Manage Channel(s) ❌ No Allows the bot to dynamically update the channel topic with info about the Terraria server Server/Channel
    • Server scope means the permission is added to the bot's role in Server SettingsRoles.
    • Channel scope means the permission is added to the bot (or its role) directly in the desired text channel using Edit ChannelPermissions.
    • Server/Channel scope means the permission can either be a Server or Channel permission.
  3. Copy the ID of the desired text channel following the instructions here and also make note of it.

TShock Plugin

  1. Copy Terracord.dll and its dependencies into your TShock ServerPlugins directory. The dependencies are the following: Discord.Net.Core.dll, Discord.Net.Rest.dll, Discord.Net.WebSocket.dll, Newtonsoft.Json.dll, System.Collections.Immutable.dll, and System.Interactive.Async.dll. These files should be contained in any release archive.

    Ensure that the version of Newtonsoft.Json.dll copied to the ServerPlugins directory is ≥ 11.0.2. This is a required dependency of Discord.Net. The instance of this DLL included with TShock 4.4.0 is older (10.0.3) and using it results in the inability to establish a connection to the Discord service.

  2. Edit terracord.xml to set your bot token and Discord channel ID. The Discord Bot section demonstrates how to obtain this pair of items. terracord.xml should be saved to the tshock > Terracord directory. Other settings in this configuration file may also be changed to your liking.

  3. Restart your TShock server to load the plugin. For review or troubleshooting purposes, terracord.log can be found in the tshock > Terracord directory.

⚠️ Unfortunately, Terracord may not work with Mono. This is due to Discord.Net not supporting Mono.

Discord Commands
Command Description
help Display commands list
playerlist Display online players
serverinfo Display server details
uptime Displays plugin uptime

If a command is not in the above list and the issuing Discord user has one of the admin roles or is the bot owner (both configured in terracord.xml), the command will be forwarded onto the Terraria server. The server and any relevant plugins will handle the command at this point and provide output if applicable.

Building

Visual Studio

  1. Download and install Visual Studio if you do not have the software. The community edition is free and contains the essentials to build Terracord. In particular, you want the ".NET desktop development" workload. The "NuGet package manager" is also required to pull in the Discord.Net dependencies. Other individual components such as debuggers, profilers, "Git for Windows", and the "GitHub extension for Visual Studio" may be useful.

  2. Obtain a copy of the Terracord source code if you have not already. This can be performed with git clone https://github.com/FragLand/terracord.git. You may alternatively download a zip archive of the source and extract the contents to an arbitrary location.

  3. Download the latest TShock release.

  4. Create a directory named lib at the same path where Terracord.sln resides.

  5. Extract OTAPI.dll, TerrariaServer.exe, and TShockAPI.dll from the TShock zip archive and then place these 3 files under the lib directory you recently created during step 4.

  6. Open Terracord.sln using Visual Studio.

  7. NuGet should automatically download Discord.Net and its dependencies based on Terracord.csproj. If not, you can manually install Discord.Net.Core and Discord.Net.WebSocket via NuGet. You may also attempt to right-click the solution in the "Solution Explorer" of Visual Studio and then left-click "Restore NuGet Packages".

  8. Use BuildBuild Solution or Ctrl+Shift+b to build Terracord.

  9. If all goes well, you should have a shiny new Terracord.dll at the path referenced in the build output. Enjoy!

.NET Core

  1. Install .NET Core SDK. .NET Core SDK 3.1.100 is known to successfully build Terracord. You can also configure various Linux package managers to install .NET core. This has the added benefit of being able to easily update the software.

  2. Obtain a copy of the Terracord source code:

    git clone https://github.com/FragLand/terracord.git

    Or:

    wget https://github.com/FragLand/terracord/archive/master.zip && unzip master.zip

  3. Download and extract the latest TShock release:

    wget https://github.com/Pryaxis/TShock/releases/download/vx.x.x/tshock_x.x.x.zip && unzip tshock_x.x.x.zip

  4. Create a directory named lib at the same path where Terracord.sln resides:

    mkdir terracord/lib

  5. Copy OTAPI.dll, TerrariaServer.exe, and TShockAPI.dll to lib:

    cp OTAPI.dll TerrariaServer.exe ServerPlugins/TShockAPI.dll terracord/lib

  6. Install dependencies:

    cd terracord

    dotnet restore

  7. Begin build:

    dotnet build -c <Debug|Release>

  8. You should now have a Terracord.dll.

Mono

⚠️ As mentioned previously, loading Terracord.dll with Mono may not work considering Discord.Net does not support this. Therefore, the following steps should be considered experimental.

  1. Install Mono and NuGet. Under Debian, this can be achieved via:

    apt-get install mono-complete nuget

  2. Obtain a copy of the Terracord source code:

    git clone https://github.com/FragLand/terracord.git

    Or:

    wget https://github.com/FragLand/terracord/archive/master.zip && unzip master.zip

  3. Download and extract the latest TShock release:

    wget https://github.com/Pryaxis/TShock/releases/download/vx.x.x/tshock_x.x.x.zip && unzip tshock_x.x.x.zip

  4. Create a directory named lib at the same path where Terracord.sln resides:

    mkdir terracord/lib

  5. Copy OTAPI.dll, TerrariaServer.exe, and TShockAPI.dll to lib:

    cp OTAPI.dll TerrariaServer.exe ServerPlugins/TShockAPI.dll terracord/lib

  6. Install dependencies:

    cd terracord

    nuget restore Terracord.sln

  7. Begin build:

    xbuild /p:Configuration=<Debug|Release> Terracord.sln

    Or:

    msbuild /p:Configuration=<Debug|Release> Terracord.sln

  8. With luck, a wild Terracord.dll will appear.

Related Projects

@Dids has contributed a Docker image of TShock bundled with Terracord at: https://github.com/Didstopia/terraria-server

Contributing and Support

Feel free to submit an issue if you require assistance or would like to make a feature request. You are also welcome to join our Discord server at https://discord.frag.land/. Any contributions such as plugin testing and pull requests are appreciated. Please see the fork and pull guide for direction if you are not certain how to submit a pull request.

terracord's People

Contributors

ldilley avatar micaeljarniac avatar monoverde888 avatar moisterrific avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.