GetChannel() public static method

Get a channel object
public static GetChannel ( string name ) : Channel
name string Name
return Channel
コード例 #1
0
ファイル: Network.cs プロジェクト: nikitavbv/wikimedia-bot
        protected override void __evt_JOIN(NetworkChannelEventArgs args)
        {
            if (args.ChannelName == Configuration.System.DebugChan && this.instance != Instance.PrimaryInstance)
            {
                return;
            }
            Channel channel = Core.GetChannel(args.ChannelName);

            if (channel != null)
            {
                foreach (Module module in ExtensionHandler.ExtensionList)
                {
                    try
                    {
                        if (module.IsWorking)
                        {
                            module.Hook_Join(channel, args.SourceInfo);
                        }
                    }
                    catch (Exception fail)
                    {
                        Syslog.Log("MODULE: exception at Hook_Join in " + module.Name, true);
                        Core.HandleException(fail);
                    }
                }
            }
        }
コード例 #2
0
ファイル: Admin.cs プロジェクト: nikitavbv/wikimedia-bot
        private static void ChannelOverview(CommandParams parameters)
        {
            if (string.IsNullOrEmpty(parameters.Parameters))
            {
                IRC.DeliverMessage("You need to provide exactly 1 parameter", parameters.SourceChannel);
                return;
            }

            string  channel_name = parameters.Parameters.Trim();
            Channel channel      = Core.GetChannel(channel_name);

            if (channel == null)
            {
                IRC.DeliverMessage("Unknown channel: " + channel_name, parameters.SourceChannel);
                return;
            }
            string founder = channel.Extension_GetConfig("generic.owner");

            if (founder != null)
            {
                founder += " (original founder: " + channel.Extension_GetConfig("generic.founder", "N/A") + ")";
            }
            else
            {
                founder = channel.Extension_GetConfig("generic.founder");
            }

            if (founder == null)
            {
                founder = "N/A";
            }

            IRC.DeliverMessage("Channel " + channel.Name + " was joined " + channel.Extension_GetConfig("generic.joindate", "unknown time") + ", requested by " +
                               founder, parameters.SourceChannel);
        }
コード例 #3
0
ファイル: Network.cs プロジェクト: Technical-13/wikimedia-bot
        protected override void __evt_PART(NetworkChannelDataEventArgs args)
        {
            if (args.ChannelName == Configuration.System.DebugChan && this.instance != Instance.PrimaryInstance)
            {
                return;
            }
            Channel channel = Core.GetChannel(args.ChannelName);

            if (channel != null)
            {
                foreach (Module module in ExtensionHandler.ExtensionList)
                {
                    if (!module.IsWorking)
                    {
                        continue;
                    }

                    try
                    {
                        module.Hook_Part(channel, args.SourceInfo);
                    }
                    catch (Exception fail)
                    {
                        Core.HandleException(fail);
                    }
                }
            }
        }
コード例 #4
0
ファイル: Network.cs プロジェクト: nikitavbv/wikimedia-bot
        protected override void __evt_KICK(NetworkKickEventArgs args)
        {
            if (args.ChannelName == Configuration.System.DebugChan && this.instance != Instance.PrimaryInstance)
            {
                return;
            }
            Channel channel = Core.GetChannel(args.ChannelName);

            if (channel == null)
            {
                return;
            }
            SystemHooks.IrcKick(channel, args.SourceInfo, args.Target);
            if (this.Nickname.ToLower() == args.Target.ToLower())
            {
                Syslog.Log("I was kicked from " + args.ChannelName + " by " + args.SourceInfo.Nick + " with kick message: " + args.Message);
                lock (Configuration.Channels)
                {
                    if (Configuration.Channels.Contains(channel))
                    {
                        Configuration.Channels.Remove(channel);
                    }
                }
                Configuration.Save();
            }
        }
コード例 #5
0
        private static void TrustDel(CommandParams parameters)
        {
            Channel channel = parameters.SourceChannel;

            string[] rights_info = parameters.Parameters.Split(' ');
            if (rights_info[0] == null)
            {
                IRC.DeliverMessage(messages.Localize("InvalidUser", parameters.SourceChannel.Language), parameters.SourceChannel);
                return;
            }
            if (rights_info.Length > 1)
            {
                if (channel.SystemUsers.IsApproved(parameters.User, "root"))
                {
                    channel = Core.GetChannel(rights_info[1]);
                    if (channel == null)
                    {
                        IRC.DeliverMessage("I don't know this channel: " + rights_info[1], parameters.SourceChannel);
                        return;
                    }
                }
                else
                {
                    IRC.DeliverMessage("Sorry, only root users can manage permissions for other channels.", parameters.SourceChannel);
                    return;
                }
            }
            channel.SystemUsers.DeleteUser(parameters.SourceChannel.SystemUsers.GetUser(parameters.User), rights_info[0], parameters.SourceChannel);
        }
コード例 #6
0
 private static void dm(string text, string target, libirc.Defs.Priority priority = libirc.Defs.Priority.Normal, bool is_act = false)
 {
     // get a target instance
     if (target.StartsWith("#"))
     {
         // it's a channel
         Channel ch = Core.GetChannel(target);
         if (ch == null)
         {
             Syslog.Log("Not sending message to unknown channel: " + target);
             return;
         }
         if (!ch.PrimaryInstance.IsConnected)
         {
             Syslog.Log("Not sending message using disconnected instance: " + ch.PrimaryInstance.Nick + " target: " + target + " message: " + text);
             return;
         }
         if (!ch.Suppress)
         {
             Self(text, ch);
             if (!is_act)
             {
                 ch.PrimaryInstance.Network.Message(text, target, priority);
             }
             else
             {
                 ch.PrimaryInstance.Network.Act(text, target, priority);
             }
         }
     }
     else
     {
         lock (Instance.TargetBuffer)
         {
             if (Instance.TargetBuffer.ContainsKey(target))
             {
                 if (is_act)
                 {
                     Instance.TargetBuffer[target].Network.Act(text, target, priority);
                 }
                 else
                 {
                     Instance.TargetBuffer[target].Network.Message(text, target, priority);
                 }
                 return;
             }
         }
         if (!is_act)
         {
             Instance.PrimaryInstance.Network.Message(text, target, priority);
         }
         else
         {
             Instance.PrimaryInstance.Network.Act(text, target, priority);
         }
     }
 }
コード例 #7
0
ファイル: Network.cs プロジェクト: nikitavbv/wikimedia-bot
        protected override void __evt_FinishChannelParseUser(NetworkChannelDataEventArgs args)
        {
            Channel channel = Core.GetChannel(args.ChannelName);

            Syslog.DebugLog("Finished parsing of user list for channel: " + args.ChannelName);
            if (channel != null)
            {
                channel.HasFreshUserList = true;
            }
        }
コード例 #8
0
 /// <summary>
 /// Return number of channels that infobot share db with
 /// </summary>
 /// <returns></returns>
 public int InitializeShares()
 {
     foreach (string x in SharedChans)
     {
         Channel channel = Core.GetChannel(x.Trim());
         if (channel != null && !SharedLinkedChan.Contains(channel))
         {
             SharedLinkedChan.Add(channel);
         }
     }
     return(0);
 }
コード例 #9
0
        private static void TrustedList(CommandParams parameters)
        {
            Channel channel = parameters.SourceChannel;

            if (!String.IsNullOrEmpty(parameters.Parameters))
            {
                channel = Core.GetChannel(parameters.Parameters.Trim());
                if (channel == null)
                {
                    IRC.DeliverMessage("I don't know this channel: " + parameters.Parameters, parameters.SourceChannel);
                    return;
                }
            }
            IRC.DeliverMessage(messages.Localize("TrustedUserList", parameters.SourceChannel.Language) + channel.SystemUsers.ListAll(), parameters.SourceChannel);
        }
コード例 #10
0
 public static bool Trusted(string message, string user, string host)
 {
     try
     {
         if (message.StartsWith(Configuration.System.CommandPrefix + "trusted "))
         {
             Channel ch = Core.GetChannel(message.Substring("xtrusted ".Length));
             if (ch != null)
             {
                 IRC.DeliverMessage(messages.Localize("TrustedUserList", ch.Language) + ch.SystemUsers.ListAll(), user);
                 return(true);
             }
             IRC.DeliverMessage("There is no such a channel I know of", user);
             return(true);
         }
     } catch (Exception fail)
     {
         Core.HandleException(fail);
     }
     return(false);
 }
コード例 #11
0
        public override void Load()
        {
            try
            {
                // TODO: Install CA certificate used by wikitech to
                // Mono.
                ServicePointManager.ServerCertificateValidationCallback = (a, b, c, d) => true;

                pRequestsChannel = Core.GetChannel(RequestChannel);
                if (pRequestsChannel == null)
                {
                    Log("CRITICAL: the bot isn't in " + RequestChannel + " unloading requests", true);
                    return;
                }

                PendingRequests = new Thread(Run)
                {
                    Name = "Pending queries thread for requests extension"
                };
                PendingRequests.Start();

                Thread.Sleep(60000);
                while (this.IsWorking)
                {
                    if (GetConfig(pRequestsChannel, "Requests.Enabled", false) && displayWaiting(false))
                    {
                        Thread.Sleep(800000);
                    }
                    else
                    {
                        Thread.Sleep(20000);
                    }
                }
            }
            catch (Exception fail)
            {
                HandleException(fail);
            }
        }
コード例 #12
0
ファイル: Admin.cs プロジェクト: nikitavbv/wikimedia-bot
        private static void Part(CommandParams parameters)
        {
            if (string.IsNullOrEmpty(parameters.Parameters))
            {
                return;
            }
            string channel = parameters.Parameters.Trim();

            if (!string.IsNullOrEmpty(channel))
            {
                Channel _Channel = Core.GetChannel(channel);
                if (_Channel == null)
                {
                    IRC.DeliverMessage(messages.Localize("UnknownChan", parameters.SourceChannel.Language), parameters.SourceChannel,
                                       libirc.Defs.Priority.Low);
                    return;
                }
                PartChannel(_Channel, parameters.User.Nick, parameters.User.Host, Configuration.System.CommandPrefix
                            + "part", parameters.SourceChannel.Name);
                return;
            }
            IRC.DeliverMessage(messages.Localize("Responses-PartFail", parameters.SourceChannel.Language), parameters.SourceChannel,
                               libirc.Defs.Priority.Low);
        }
コード例 #13
0
ファイル: Admin.cs プロジェクト: nikitavbv/wikimedia-bot
        private static void Instance(CommandParams parameters)
        {
            if (string.IsNullOrEmpty(parameters.Parameters) || !parameters.Parameters.Contains(" "))
            {
                IRC.DeliverMessage("This command needs 2 parameters", parameters.SourceChannel);
                return;
            }
            string  channel  = parameters.Parameters.Substring(parameters.Parameters.IndexOf(" ") + 1);
            string  instance = parameters.Parameters.Substring(0, parameters.Parameters.IndexOf(" "));
            Channel ch       = Core.GetChannel(channel);

            if (ch == null)
            {
                IRC.DeliverMessage("This channel I never heard of :'(", parameters.SourceChannel);
                return;
            }

            if (!wmib.Instance.Instances.ContainsKey(instance))
            {
                IRC.DeliverMessage("This instance I never heard of :'(", parameters.SourceChannel);
                return;
            }
            Instance _instance = wmib.Instance.Instances[instance];

            if (_instance == ch.PrimaryInstance)
            {
                IRC.DeliverMessage("This channel is already in this instance", parameters.SourceChannel);
                return;
            }
            ch.PrimaryInstance.Network.Transfer("PART " + ch.Name + " :Switching instance");
            ch.PrimaryInstance = _instance;
            ch.PrimaryInstance.Network.Transfer("JOIN " + ch.Name);
            ch.DefaultInstance = ch.PrimaryInstance.Nick;
            ch.SaveConfig();
            IRC.DeliverMessage("Changed default instance of " + channel + " to " + instance, parameters.SourceChannel);
        }
コード例 #14
0
ファイル: Channel.cs プロジェクト: ndrewh/wikimedia-bot
 /// <summary>
 /// Join channel
 /// </summary>
 public static void AddChannel(CommandParams parameters)
 {
     if (!String.IsNullOrEmpty(parameters.Parameters))
     {
         while (!IRC.FinishedJoining)
         {
             Syslog.Log("Postponing request to join " + parameters.Parameters + " because bot is still loading", true);
             Thread.Sleep(2000);
         }
         List <string> pm = new List <string>(parameters.Parameters.Trim().Split(' '));
         if (pm.Count > 2 || pm.Count == 0)
         {
             IRC.DeliverMessage("Invalid number of parameters, please provide up to 2 parameters (name, password)", parameters.SourceChannel);
             return;
         }
         string channel_name = pm[0];
         string password     = null;
         if (pm.Count > 1)
         {
             password = pm[1];
         }
         if (!Core.ValidFile(channel_name) || !channel_name.StartsWith("#"))
         {
             IRC.DeliverMessage(messages.Localize("InvalidName", parameters.SourceChannel.Language, new List <string> {
                 channel_name
             }), parameters.SourceChannel);
             return;
         }
         lock (Configuration.Channels)
         {
             foreach (Channel cu in Configuration.Channels)
             {
                 if (channel_name == cu.Name)
                 {
                     IRC.DeliverMessage(messages.Localize("ChannelIn", parameters.SourceChannel.Language), parameters.SourceChannel);
                     return;
                 }
             }
         }
         bool    existing = Channel.ConfigExists(channel_name);
         Channel channel  = new Channel(channel_name)
         {
             Password = password
         };
         lock (Configuration.Channels)
         {
             Configuration.Channels.Add(channel);
         }
         IRC.DeliverMessage("Attempting to join " + channel_name + " using " + channel.PrimaryInstance.Nick, parameters.SourceChannel.Name);
         Configuration.Save();
         Syslog.DebugLog("Sending join " + channel_name);
         channel.PrimaryInstance.Network.Join(channel_name, password);
         Channel Chan = Core.GetChannel(channel_name);
         if (!existing)
         {
             Chan.SystemUsers.AddUser("admin", Security.EscapeUser(parameters.User.Nick) + "!.*@" + Security.EscapeUser(parameters.User.Host));
         }
         if (Chan.Extension_GetConfig("generic.founder") == null)
         {
             Chan.Extension_SetConfig("generic.founder", parameters.User.ToString());
             Chan.Extension_SetConfig("generic.owner", parameters.User.ToString());
         }
         else
         {
             Chan.Extension_SetConfig("generic.owner", parameters.User.ToString());
         }
         Chan.Extension_SetConfig("generic.joindate", DateTime.Now.ToString());
         Chan.SaveConfig();
         return;
     }
     IRC.DeliverMessage(messages.Localize("InvalidName", parameters.SourceChannel.Language), parameters.SourceChannel);
     return;
 }
コード例 #15
0
        private static void TrustAdd(CommandParams parameters)
        {
            Channel channel = parameters.SourceChannel;

            if (parameters.Parameters == null)
            {
                return;
            }

            string[] rights_info = parameters.Parameters.Split(' ');
            if (rights_info.Length < 2)
            {
                IRC.DeliverMessage(messages.Localize("Trust1", parameters.SourceChannel.Language), parameters.SourceChannel);
                return;
            }
            if (!Security.Roles.ContainsKey(rights_info[1]))
            {
                IRC.DeliverMessage(messages.Localize("Unknown1", parameters.SourceChannel.Language), parameters.SourceChannel);
                return;
            }
            int level = Security.GetLevelOfRole(rights_info[1]);

            // This optional hack disallow to grant roles like "root" to anyone so that this role can be granted only to users
            // with shell access to server and hard-inserting it to admins file. If you wanted to allow granting of root, just
            // change System.MaxGrantableRoleLevel to 65535, this isn't very secure though
            if (level > Configuration.System.MaxGrantableRoleLevel)
            {
                IRC.DeliverMessage("You can't grant this role because it's over the maximum grantable role level, sorry", parameters.SourceChannel);
                return;
            }
            // now we check if role that user is to grant doesn't have higher level than the role they have
            // if we didn't do that, users with low roles could grant admin to someone and exploit this
            // to grant admins to themselves
            if (level > parameters.SourceChannel.SystemUsers.GetLevel(parameters.User))
            {
                IRC.DeliverMessage(messages.Localize("RoleMismatch", parameters.SourceChannel.Language), parameters.SourceChannel);
                return;
            }
            if (rights_info.Length > 2)
            {
                if (channel.SystemUsers.IsApproved(parameters.User, "root"))
                {
                    channel = Core.GetChannel(rights_info[2]);
                    if (channel == null)
                    {
                        IRC.DeliverMessage("I don't know this channel: " + rights_info[2], parameters.SourceChannel);
                        return;
                    }
                }
                else
                {
                    IRC.DeliverMessage("Sorry, only root users can manage permissions for other channels.", parameters.SourceChannel);
                    return;
                }
            }
            if (channel.SystemUsers.AddUser(rights_info[1], rights_info[0], parameters.SourceChannel))
            {
                IRC.DeliverMessage(messages.Localize("UserSc", parameters.SourceChannel.Language) + rights_info[0], parameters.SourceChannel);
                return;
            }
        }