aboutsummaryrefslogtreecommitdiff
path: root/ShiftOS.Server/ChatBackend.cs
diff options
context:
space:
mode:
authorwilliam341 <[email protected]>2017-05-28 12:37:00 -0700
committerGitHub <[email protected]>2017-05-28 12:37:00 -0700
commit771c20cfb3a703e0f1550fdcf9eb07b78298c944 (patch)
tree59cb532e15ebff313fdba2be264d78ec0033f407 /ShiftOS.Server/ChatBackend.cs
parent496b0cbf8659c99203f48210fd39c572400ae623 (diff)
parentc7ba7d733c756d196f98dd4533289a1ef4db715f (diff)
downloadshiftos_thereturn-771c20cfb3a703e0f1550fdcf9eb07b78298c944.tar.gz
shiftos_thereturn-771c20cfb3a703e0f1550fdcf9eb07b78298c944.tar.bz2
shiftos_thereturn-771c20cfb3a703e0f1550fdcf9eb07b78298c944.zip
Merge pull request #1 from shiftos-game/master
welp, no longer a dev.
Diffstat (limited to 'ShiftOS.Server/ChatBackend.cs')
-rw-r--r--ShiftOS.Server/ChatBackend.cs162
1 files changed, 0 insertions, 162 deletions
diff --git a/ShiftOS.Server/ChatBackend.cs b/ShiftOS.Server/ChatBackend.cs
deleted file mode 100644
index 242ae16..0000000
--- a/ShiftOS.Server/ChatBackend.cs
+++ /dev/null
@@ -1,162 +0,0 @@
-/*
- * MIT License
- *
- * Copyright (c) 2017 Michael VanOverbeek and ShiftOS devs
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in all
- * copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
- * SOFTWARE.
- */
-
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-using ShiftOS.Objects;
-using NetSockets;
-using Newtonsoft.Json;
-using System.IO;
-using static ShiftOS.Server.Program;
-using Discord;
-using Discord.WebSocket;
-using Discord.Net.WebSockets;
-
-namespace ShiftOS.Server
-{
- public static class ChatBackend
- {
- public static async Task StartDiscordBots()
- {
- Reinitialized?.Invoke();
- if (!File.Exists("chats.json"))
- File.WriteAllText("chats.json", "[]");
- foreach (var chat in JsonConvert.DeserializeObject<List<ShiftOS.Objects.Channel>>(File.ReadAllText("chats.json")))
- {
- string chatID = chat.ID;
- bool chatKilled = false;
- if (chat.IsDiscordProxy == true)
- {
- DiscordSocketConfig builder = new DiscordSocketConfig();
- builder.AudioMode = Discord.Audio.AudioMode.Disabled;
- builder.WebSocketProvider = () => Discord.Net.Providers.WS4Net.WS4NetProvider.Instance();
- var client = new DiscordSocketClient(builder);
- await client.LoginAsync(TokenType.Bot, chat.DiscordBotToken);
-
- await client.ConnectAsync();
- await client.SetGameAsync("ShiftOS");
- await client.SetStatusAsync(UserStatus.Online);
- //Get the Discord channel for this chat.
- var Chan = client.GetChannel(Convert.ToUInt64(chat.DiscordChannelID)) as ISocketMessageChannel;
- //Relay the message to Discord.
- await Chan.SendMessageAsync("**Hello! Multi-user domain is online.**");
-
- client.MessageReceived += async (s) =>
- {
- if (chatKilled == false)
- {
- if (s.Channel.Id == Convert.ToUInt64(chat.DiscordChannelID))
- {
- if (s.Author.Id != client.CurrentUser.Id)
- {
- server.DispatchAll(new NetObject("chat_msgreceived", new ServerMessage
- {
- Name = "chat_msgreceived",
- GUID = "server",
- Contents = JsonConvert.SerializeObject(new ChatMessage(s.Author.Username, "discord_" + s.Channel.Name, (s as SocketUserMessage).Resolve(0), chatID))
- }));
- }
- }
- }
- };
- MessageReceived += (g, msg) =>
- {
- if (chatKilled == false)
- {
- //Determine if the message was sent to this channel.
- if (msg.Channel == chat.ID)
- {
- //Get the Discord channel for this chat.
- var dChan = client.GetChannel(Convert.ToUInt64(chat.DiscordChannelID)) as ISocketMessageChannel;
- //Relay the message to Discord.
- dChan.SendMessageAsync($"**[{msg.Username}@{msg.SystemName}]** `<mud/{msg.Channel}>` {msg.Message}");
-
- }
- //Relay it back to all MUD clients.
- RelayMessage(g, msg);
- }
- };
- Reinitialized += () =>
- {
- client.DisconnectAsync();
-
- chatKilled = true;
- };
- }
- else
- {
- MessageReceived += (g, msg) =>
- {
- if (chatKilled == false)
- {
- //Just relay it.
- RelayMessage(g, msg);
- }
- };
- Reinitialized += () => { chatKilled = true; };
- }
- }
- }
-
- internal static void RelayMessage(string guid, ChatMessage msg)
- {
- server.DispatchAllExcept(new Guid(guid), new NetObject("chat_msgreceived", new ServerMessage
- {
- Name = "chat_msgreceived",
- GUID = "server",
- Contents = JsonConvert.SerializeObject(msg)
- }));
-
- }
-
- public static event Action<string, ChatMessage> MessageReceived;
- public static event empty Reinitialized;
-
-
- public delegate void empty();
-
- [MudRequest("chat_getallchannels", null)]
- public static void GetAllChannels(string guid, object contents)
- {
- server.DispatchTo(new Guid(guid), new NetObject("chat_all", new ServerMessage
- {
- Name = "chat_all",
- GUID = "Server",
- Contents = (File.Exists("chats.json") == true) ? File.ReadAllText("chats.json") : "[]"
- }));
- }
-
- [MudRequest("chat_send", typeof(Dictionary<string, string>))]
- public static void ReceiveMessage(string guid, object contents)
- {
- var msg = contents as Dictionary<string, string>;
- MessageReceived?.Invoke(guid, new ChatMessage(msg["Username"], msg["SystemName"], msg["Message"], msg["Channel"]));
-
- }
- }
-
-}