public void ToggleMaillist(UUID client, int level, string[] additionalArgs,
                                   Destinations source,
                                   UUID agentKey, string agentName)
        {
            OCBotMemory ocb = OCBotMemory.Memory;

            OCBotMemory.MailList ML = ocb.MailingLists[additionalArgs[0]];

            List <OCBotMemory.MailListMember> Members = ML.Members;

            foreach (OCBotMemory.MailListMember Member in Members)
            {
                if (Member.MemberID == agentKey)
                {
                    // Flip status
                    OCBotMemory.MailListMember M = Member;
                    M.FlipOpt();
                    ML.Members.Remove(Member);
                    ML.Members.Add(M);
                    ocb.MailingLists[additionalArgs[0]] = ML;
                    ocb.Save();
                    MHE(source, client, "Successfully flipped your opt-in status to " + tf(M.OptOut));
                    return;
                }
            }

            MHE(source, client, "Could not locate entry in that mailing list");
        }
        public void AddListMember(UUID client, int level, string[] additionalArgs,
                                  Destinations source,
                                  UUID agentKey, string agentName)
        {
            // Create the new mailing list
            OCBotMemory ocb = OCBotMemory.Memory;

            UUID add_member = UUID.Parse(additionalArgs[1]);

            // Lets check data
            OCBotMemory.MailList ML = ocb.MailingLists[additionalArgs[0]];
            List <OCBotMemory.MailListMember> Members = ML.Members;

            if (Members == null)
            {
                Members = new List <OCBotMemory.MailListMember>();
            }
            foreach (OCBotMemory.MailListMember Member in Members)
            {
                if (Member.MemberID == add_member)
                {
                    MHE(source, client, "This member is already added to the list");
                    if (ocb.BlacklistMailingList.Contains(add_member))
                    {
                        MHE(source, client, "If this person is having trouble getting mailing list notifications, have them opt back into mailing lists. They are currently opted out of all mailing list functionality.");
                    }

                    return;
                }
            }

            OCBotMemory.MailListMember NewMember = new OCBotMemory.MailListMember();
            NewMember.OptOut   = false;
            NewMember.Informed = false;
            NewMember.MemberID = add_member;

            Members.Add(NewMember);
            ML.Members = Members;

            ocb.MailingLists[additionalArgs[0]] = ML;

            MHE(source, client, "Added.");


            ocb.Save();
        }
        public void ReplaceMailListMembers(UUID client, int level, string[] additionalArgs,
                                           Destinations source,
                                           UUID agentKey, string agentName)
        {
            // Create the new mailing list
            OCBotMemory ocb = OCBotMemory.Memory;

            MHE(source, client, "Stand by..");
            OCBotMemory.MailList ML = ocb.MailingLists[additionalArgs[0]];
            if (ML.MailListOwner != agentKey)
            {
                MHE(source, client, "PERMISSION ERROR: You are not the MailList Owner. Please only edit mailing lists you own or have created yourself");
                return;
            }
            List <OCBotMemory.MailListMember> Members = new List <OCBotMemory.MailListMember>();

            string      sURL = additionalArgs[1];
            WebRequest  WR   = WebRequest.Create(sURL);
            WebResponse resp = WR.GetResponse();

            Stream       S   = resp.GetResponseStream();
            StreamReader SR  = new StreamReader(S);
            string       CSV = SR.ReadToEnd();

            string[] CSVList  = new string[] { ",", ", " };
            string[] listData = CSV.Split(CSVList, StringSplitOptions.RemoveEmptyEntries);
            foreach (string D in listData)
            {
                OCBotMemory.MailListMember NewMember = new OCBotMemory.MailListMember();
                NewMember.Informed = false;
                NewMember.OptOut   = false;
                NewMember.MemberID = UUID.Parse(D);
                Members.Add(NewMember);
            }

            ML.Members = Members;
            ocb.MailingLists[additionalArgs[0]] = ML;

            ocb.Save();

            MHE(source, client, "Mailing list member list completely replaced by CSV contents");
        }
        public void Dispatch(UUID client, int level, string[] additionalArgs,
                             Destinations source,
                             UUID agentKey, string agentName)
        {
            OCBotMemory ocb = OCBotMemory.Memory;

            OCBotMemory.MailList ML = ocb.MailingLists[additionalArgs[0]];
            List <OCBotMemory.MailListMember> Members = ML.Members;

            Console.WriteLine("Enter foreach with " + Members.Count.ToString() + " members");

            for (int i = 0; i < Members.Count; i++)
            {
                OCBotMemory.MailListMember Member = Members[i];
                Console.WriteLine("ENTER Blacklist check for " + Member.MemberID.ToString());
                if (ocb.BlacklistMailingList.Contains(Member.MemberID))
                {
                    // Totally ignore sending a message to this user.
                }
                else
                {
                    string PreparedStatement = ML.PrepMsg;
                    if (Member.Informed)
                    {
                        bool CanSend = true;
                        if (ML.AllowOptOut)
                        {
                            if (Member.OptOut)
                            {
                                CanSend = false;
                            }
                        }
                        if (CanSend)
                        {
                            MHE(Destinations.DEST_AGENT, Member.MemberID, ML.PrepMsg);
                        }
                    }
                    else
                    {
                        bool CanSend = true;
                        if (ML.AllowOptOut)
                        {
                            if (Member.OptOut)
                            {
                                CanSend = false;
                            }
                        }
                        if (CanSend)
                        {
                            MHE(Destinations.DEST_AGENT, Member.MemberID, ML.PrepMsg + "\n \n[I see this is the first time you are receiving a message on this mailing list]\n[If you want to opt out from this mailing list, you can send the command: maillist_opt [list_name]]\n[If you want to opt out from all mailing lists you can send: maillist_off/maillist_on]");

                            Console.WriteLine("Begin replace");
                            Member.setInformed();
                            ML.Members[i] = Member;
                            Console.WriteLine("Replaced maillist entry");
                        }
                    }
                }

                Console.WriteLine("EXIT Blacklist Check for " + Member.MemberID.ToString());
            }
            Console.WriteLine("Foreach complete");


            MHE(Destinations.DEST_AGENT, ML.MailListOwner, ML.PrepMsg);

            ML.PrepFrom  = UUID.Zero;
            ML.PrepMsg   = "";
            ML.PrepState = 0;

            ocb.MailingLists[additionalArgs[0]] = ML;
            ocb.Save();
        }