Exemplo n.º 1
0
        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()}");
            };
        }