示例#1
0
        static void Main(string[] args)
        {
            using (var streamReader = new StreamReader("config.yaml"))
            {
                var deserializer = new YamlDotNet.Serialization.Deserializer();
                Config = deserializer.Deserialize(streamReader);

                Console.WriteLine("Successfully loaded configuration.");
            }

            new Thread(() =>
            {
                try
                {
                    DiscordSession.Connect();
                }
                catch (Exception e)
                {
                    Console.WriteLine(e.ToString());
                }
            }).Start();

            new Thread(() =>
            {
                try
                {
                    WikiaSession.GetChatInfo();
                    WikiaSession.ConnectToChat();
                }
                catch (Exception e)
                {
                    Console.WriteLine(e.ToString());
                }
            }).Start();

            new Thread(() =>
            {
                int time = 1000 * 60 * int.Parse(Config["restart_timer"]);

                Thread.Sleep(time);

                Restart();
            }).Start();
        }
        static async Task ChatEvent(dynamic responseObject, dynamic dataObject)
        {
            if (((string)dataObject["attrs"]["name"]).ToLower() != botName.ToLower())
            {
                var name = (string)dataObject["attrs"]["name"];

                string text = "";
                if (dataObject["attrs"]["text"] != null)
                {
                    text = ParseClientSideMessageMarkup((string)dataObject["attrs"]["text"]);
                }

                switch ((string)responseObject[1]["event"])
                {
                case "chat:add":
                    Tools.Log("Wikia", $"{name}: {text}");
                    await DiscordSession.SendMessage($"**{name}**: {text}");

                    break;

                case "join":
                    Tools.Log("Wikia", $"{name} has joined the chat.");
                    await DiscordSession.SendMessage($"**{name}** has joined the chat.");

                    break;

                case "logout":
                    Tools.Log("Wikia", $"{name} has left the chat.");
                    await DiscordSession.SendMessage($"**{name}** has left the chat.");

                    break;

                case "part":
                    Tools.Log("Wikia", $"{name} has left the chat.");
                    await DiscordSession.SendMessage($"**{name}** has left the chat.");

                    break;
                }
            }
        }
        private static async Task StartAsync(string[] args)
        {
            using (var fileStream = new FileStream("config.yaml", FileMode.Open))
                using (var streamReader = new StreamReader(fileStream))
                {
                    var deserializer = new YamlDotNet.Serialization.Deserializer();
                    config = deserializer.Deserialize(streamReader);

                    Console.WriteLine("Successfully loaded configuration.");
                }

            bool useTimestamp = false;

            try
            {
                useTimestamp = bool.TryParse(config["log_timestamp"], out bool value) && value;
            }
            catch (KeyNotFoundException) { }

            Tools.InitLogging(useTimestamp);

            await WikiaSession.Init((string)config["wikia_name"], (string)config["wikia_username"], (string)config["wikia_password"]);

            await WikiaSession.GetChatInfo((string)config["wikia_username"]);

            string botToken       = config["discord_bot_token"];
            ulong  discordChannel = ulong.Parse(config["discord_channel"]);
            string wikiaName      = config["wikia_name"];

            await DiscordSession.Init(botToken, discordChannel, wikiaName);

            cts = new CancellationTokenSource(TimeSpan.FromMinutes(int.Parse(config["restart_timer"])));
            var completionSource = new TaskCompletionSource <object>();

            cts.Token.Register(() => completionSource.TrySetCanceled());
            await Task.WhenAny(WikiaSession.ConnectToChat(), completionSource.Task);
        }