public static void Connect() { DiscordSession.DiscordClient = new DiscordClient(x => { x.AppName = "WikiaDiscordBridge"; }); DiscordSession.DiscordClient.ExecuteAndWait(async() => { while (true) { try { await DiscordClient.Connect(WikiaDiscordBridge.Config["discord_bot_token"], TokenType.Bot); break; } catch (Exception ex) { DiscordClient.Log.Error("Login Failed", ex); await Task.Delay(DiscordClient.Config.FailedReconnectDelay); } } await Task.Delay(5000); // Not everything is instantly loaded if using a bot account. TrackedChannel = DiscordClient.GetChannel(ulong.Parse(WikiaDiscordBridge.Config["discord_channel"])); Console.WriteLine($"Connected to Discord as @{DiscordClient.CurrentUser.Name}."); DiscordClient.MessageReceived += (s, e) => { if (e.Channel.Id == TrackedChannel.Id) { if (e.User.Id != DiscordClient.CurrentUser.Id) { string displayName; if (e.User.Nickname != null && e.User.Nickname.Trim() != "") { displayName = e.User.Nickname; } else { displayName = e.User.Name; } if (e.Message.Attachments.Count() > 0) { WikiaSession.SendMessage($"{displayName}: {e.Message.Attachments[0].Url}"); } else { WikiaSession.SendMessage($"{displayName}: {e.Message.Text}"); if (Regex.IsMatch(e.Message.RawText, @"\[\[.+\]\]")) { var matches = Regex.Matches(e.Message.RawText, @"\[\[(.+?)\]\]"); foreach (Match match in matches) { string resourceName = match.Groups[1].Value; resourceName = resourceName.Replace(" ", "_"); resourceName = Uri.EscapeUriString(resourceName); e.Channel.SendMessage($"<http://swordartonline.wikia.com/wiki/{resourceName}>"); } } } } } }; }); }
static DiscordSession() { client.Connected += () => { Tools.Log("Discord", $"Connected to Discord as {client.CurrentUser.Username}#{client.CurrentUser.DiscriminatorValue}."); return(Task.CompletedTask); }; client.Log += msg => { Tools.Log("Discord", $"{msg.Severity}: {msg.Message}"); return(Task.CompletedTask); }; client.MessageReceived += async msg => { var userMessage = msg as IUserMessage; if (userMessage == null) { return; } if (userMessage.Author.Id == client.CurrentUser.Id) { return; } var matches = LinkRegex.Matches(userMessage.Content); if (matches.Count > 0) { foreach (Match match in matches) { var resourceName = match.Groups[1].Value.Replace(" ", "_"); var escapedName = Uri.EscapeDataString(resourceName); await userMessage.Channel.SendMessageAsync($"<http://{wikiaName}.wikia.com/wiki/{escapedName}>"); } } if (userMessage.Channel.Id != trackedChannelId) { return; } var displayName = string.IsNullOrWhiteSpace((userMessage.Author as IGuildUser)?.Nickname) ? userMessage.Author.Username : ((IGuildUser)userMessage.Author).Nickname; if (userMessage.Attachments.Count > 0) { foreach (var attachment in userMessage.Attachments) { await WikiaSession.SendMessage($"{displayName}: {attachment.Url}"); } } if (string.IsNullOrWhiteSpace(userMessage.Content)) { return; } await WikiaSession.SendMessage($"{displayName}: {userMessage.Resolve()}"); }; }