コード例 #1
0
 /// <inheritdoc />
 public string SetProviderInfo(ChatSetupInfo info)
 {
     try
     {
         lock (DiscordLock)
         {
             var odc = DiscordConfig;
             DiscordConfig = new DiscordSetupInfo(info);
             if (DiscordConfig.BotToken != odc.BotToken)
             {
                 DisconnectAndDispose();
                 Init(info);
             }
             if (DiscordConfig.Enabled)
             {
                 if (!Connected())
                 {
                     return(Reconnect());
                 }
             }
             else
             {
                 Disconnect();
             }
         }
         return(null);
     }
     catch (Exception e)
     {
         return(e.ToString());
     }
 }
コード例 #2
0
 /// <inheritdoc />
 public string SetProviderInfo(ChatSetupInfo info)
 {
     info.AdminList.RemoveAll(x => String.IsNullOrWhiteSpace(x));
     info.AdminChannels.RemoveAll(x => String.IsNullOrWhiteSpace(x));
     info.GameChannels.RemoveAll(x => String.IsNullOrWhiteSpace(x));
     info.DevChannels.RemoveAll(x => String.IsNullOrWhiteSpace(x));
     info.WatchdogChannels.RemoveAll(x => String.IsNullOrWhiteSpace(x));
     try
     {
         lock (ChatLock)
         {
             foreach (var ChatProvider in ChatProviders)
             {
                 if (info.Provider == ChatProvider.ProviderInfo().Provider)
                 {
                     return(ChatProvider.SetProviderInfo(info));
                 }
             }
             return("Error: Invalid provider: " + info.Provider.ToString());
         }
     }
     catch (Exception e)
     {
         return(e.ToString());
     }
 }
コード例 #3
0
        /// <summary>
        /// Returns a list of <see cref="ChatSetupInfo"/>s loaded from the config or the defaults if none are set
        /// </summary>
        /// <returns>A list of <see cref="ChatSetupInfo"/>s loaded from the config or the defaults if none are set</returns>
        IList <ChatSetupInfo> InitProviderInfos()
        {
            lock (ChatLock)
            {
                var rawdata = Config.ChatProviderData;
                if (rawdata == UninitializedString)
                {
                    return new List <ChatSetupInfo>()
                           {
                               new IRCSetupInfo()
                               {
                                   Nickname = Config.Name
                               }, new DiscordSetupInfo()
                           }
                }
                ;

                string plaintext;
                try
                {
                    plaintext = Interface.Helpers.DecryptData(rawdata, Config.ChatProviderEntropy);

                    var lists        = JsonConvert.DeserializeObject <List <List <string> > >(plaintext);
                    var output       = new List <ChatSetupInfo>(lists.Count);
                    var foundirc     = 0;
                    var founddiscord = 0;
                    foreach (var l in lists)
                    {
                        var info = new ChatSetupInfo(l);
                        if (info.Provider == ChatProvider.Discord)
                        {
                            ++founddiscord;
                        }
                        else if (info.Provider == ChatProvider.IRC)
                        {
                            ++foundirc;
                        }
                        output.Add(info);
                    }

                    if (foundirc != 1 || founddiscord != 1)
                    {
                        throw new Exception();
                    }

                    return(output);
                }
                catch
                {
                    Config.ChatProviderData = UninitializedString;
                }
            }
            //if we get here we want to retry
            return(InitProviderInfos());
        }
コード例 #4
0
        private void ChatApplyButton_Click(object sender, EventArgs e)
        {
            string        res = null;
            ChatSetupInfo wip = null;

            switch (ModifyingProvider)
            {
            case ChatProvider.Discord:
                wip = new DiscordSetupInfo()
                {
                    BotToken = AuthField1.Text
                };
                break;

            case ChatProvider.IRC:
                wip = new IRCSetupInfo()
                {
                    AuthMessage = AuthField2.Text,
                    AuthTarget  = AuthField1.Text,
                    Nickname    = ChatNicknameText.Text,
                    URL         = ChatServerText.Text,
                    Port        = (ushort)ChatPortSelector.Value,
                    AuthLevel   = (IRCMode)IRCModesComboBox.SelectedIndex,
                };
                break;

            default:
                res = "You really shouldn't be able to read this.";
                break;
            }

            if (res == null)
            {
                wip.AdminChannels    = new List <string>(AdminChannelsTextbox.Text.Split(Environment.NewLine.ToCharArray()));
                wip.WatchdogChannels = new List <string>(WDChannelsTextbox.Text.Split(Environment.NewLine.ToCharArray()));
                wip.DevChannels      = new List <string>(DevChannelsTextbox.Text.Split(Environment.NewLine.ToCharArray()));
                wip.GameChannels     = new List <string>(GameChannelsTextbox.Text.Split(Environment.NewLine.ToCharArray()));
                wip.AdminList        = new List <string>(ChatAdminsTextBox.Text.Split(Environment.NewLine.ToCharArray()));
                wip.Enabled          = ChatEnabledCheckbox.Checked;
                wip.AdminsAreSpecial = AdminModeSpecial.Checked;

                res = Interface.GetComponent <ITGChat>().SetProviderInfo(wip);
            }
            if (res != null)
            {
                MessageBox.Show(res);
            }
            LoadChatPage();
        }
コード例 #5
0
 /// <summary>
 /// Construct a <see cref="IRCChatProvider"/>
 /// </summary>
 /// <param name="info">The <see cref="ChatSetupInfo"/></param>
 public IRCChatProvider(ChatSetupInfo info)
 {
     IRCConfig = new IRCSetupInfo(info);
     irc       = new IrcFeatures()
     {
         SupportNonRfc        = true,
         CtcpUserInfo         = Server.VersionString,
         AutoRejoin           = true,
         AutoRejoinOnKick     = true,
         AutoRelogin          = true,
         AutoRetry            = true,
         AutoRetryLimit       = 5,
         AutoRetryDelay       = 5,
         ActiveChannelSyncing = true,
     };
     irc.OnChannelMessage += Irc_OnChannelMessage;
     irc.OnQueryMessage   += Irc_OnQueryMessage;
 }
コード例 #6
0
        /// <inheritdoc />
        public string SetProviderInfo(ChatSetupInfo info)
        {
            var convertedInfo = (IRCSetupInfo)info;
            var serverChange  = convertedInfo.URL != IRCConfig.URL || convertedInfo.Port != IRCConfig.Port;

            IRCConfig = convertedInfo;
            if (!IRCConfig.Enabled)
            {
                Disconnect();
                return(null);
            }
            else if (serverChange || !Connected())
            {
                return(Reconnect());
            }

            if (IRCConfig.Nickname != irc.Nickname)
            {
                irc.RfcNick(convertedInfo.Nickname);
            }
            Login();
            JoinChannels();
            return(null);
        }
コード例 #7
0
 /// <summary>
 /// Sets up the Discord API <see cref="client"/> and <see cref="DiscordConfig"/>
 /// </summary>
 /// <param name="info">The <see cref="ChatSetupInfo"/> to init <see cref="DiscordConfig"/> with</param>
 void Init(ChatSetupInfo info)
 {
     DiscordConfig           = new DiscordSetupInfo(info);
     client                  = new DiscordSocketClient();
     client.MessageReceived += Client_MessageReceived;
 }
コード例 #8
0
 /// <summary>
 /// Construct a <see cref="DiscordChatProvider"/>
 /// </summary>
 /// <param name="info">The <see cref="ChatSetupInfo"/></param>
 public DiscordChatProvider(ChatSetupInfo info)
 {
     Init(info);
 }