Central Forums Helpbot
Welcome, Guest. Please login or register.
Did you miss your activation email?

Login with username, password and session length
Pages: [1]   Go Down
Print
Topic: Auto notify and membership  (Read 2809 times)
« on: July 18, 2010, 10:51:30 PM »
Freshman

View Profile
*

Epeen: 2
Posts: 41


I know there is already an automembership, and ill explain the problems i have with that version in a moment. But I never saw an auto !notify when inviting someone to the org.

My problem with automembership is that, when you enable it, literally anyone can just PM the bot and they become a member of the bot, which allows them to use any commands that the original members can. I might not be aware of a way to avoid this (other then seeing faction, but its not the faction im worried about, its the... a-holes that like to spam).

Besides that problem with automembership, auto notify? I never seen that option anywhere. Although maybe i missed that one too lol. Not having these isn't a big problem, but sometimes other people like to invite, and they aren't allowed to add or remove people from bot. And since logs don't keep track of who is invited to the org (I use the !recruit script, but thats another story on another post) I never know who is new until they talk and if I even noticed that they aren't on the list. Thats probably the worst case I can think of though lol. Other then that, i do eventually figure it out, and doing !roster updates adds them to both member and notify if i do miss anyone, and that only takes like a day for it to add them.

Anyways I'm hoping we could make this simpler =)
Logged
« Reply #1 on: July 18, 2010, 11:00:59 PM »
Grandmaster

View Profile
**

Epeen: 20
Posts: 3218


You're using the wrong plugin Smiley
The behavior you described is working as intended.

Use the roster manager.
What isn't remembered never happened.
Memory is merely a record.
You just need to rewrite that record.
Logged
« Reply #2 on: July 19, 2010, 04:50:36 AM »
Freshman

View Profile
*

Epeen: 2
Posts: 41


The only thing Roster manager lets me handle is the roster update, which takes 8 hours to do, also that doesn't automatically add members to notify and members list when they first join, only after Funcom updates their database. I do daily !roster update to make sure everyone is added that might've been missed. But I just thought it might be easier to have everything automated and have the bot add the new people that join.
Logged
« Reply #3 on: July 28, 2010, 12:52:47 AM »
Apprentice coder
VhaBot Developers
Novice

View Profile
***

Epeen: 4
Posts: 446


The Roster plugin is the only supported plugin currently which does what you desire. There is planned an overhaul of this plugin to perform the functions you desire, and this will be included in the next release, whenever that is finalised.

As an interim solution there is another version of the MemberManager plugin, which does track players joining the org and leaving it, although I believe the version available does not support the most recent updates to the system Invite message.

The roster update RUNS every 8 hours by default. It does not TAKE 8 hours .. it is deliberately run in a separate thread because of the length of time it takes to process the web request for the roster listing, and match the bot's internal lists; and to avoid lagging the bot to normal commands.
Logged
« Reply #4 on: August 06, 2010, 06:13:26 AM »
Freshman

View Profile
*

Epeen: 2
Posts: 41


Ok sounds internet. Can't wait for the next release =) and i meant take 8 hours as in every 8 hours it does an auto update of the roster. However that doesn't show who joins and when in the logs, so i do it manually so i can see who it adds and removes.
Logged
« Reply #5 on: August 06, 2010, 11:15:45 AM »
Apprentice coder
VhaBot Developers
Novice

View Profile
***

Epeen: 4
Posts: 446


You may be interested in the 'Recruits' plugin mentioned in this topic which tracks members invited explicitly by members. Initially there was a bug which caused it to display all 'new' members joining through the bot, and in that Thread you will see discussions about changing the SQL statement in the plugin code if you wish to do so.

Nontheless, Watch This SpaceTM and we should have some updates in the Autumn/Fall.
Logged
« Reply #6 on: August 07, 2010, 11:57:15 PM »
Freshman

View Profile
*

Epeen: 2
Posts: 41


Actually not sure what just happened, but since i followed that post with that person having "Performance Issues" and copied the text.mb w/e file to the bot folder, it's been recording who leaves and joins, and has even been automatically adding them to notify and members list. Amazing =) could that of been an issue then? I followed that post to fix my !online command going slow, but didn't work. But seems to have fixed a few other things ^^
Logged
« Reply #7 on: August 28, 2010, 05:20:23 AM »
Noob

View Profile


Epeen: 0
Posts: 9


I updated the members plugin to not only auto-member people whenever they join the org but to also instantly remove them from the memberlist, notify list, guestlist, etc if they leave or are kicked form the org.

Something similar to:
Code:
        private void Events_ChannelMessageEvent(BotShell bot, ChannelMessageArgs e) {
            if (e.Type == ChannelType.Organization || e.Type == ChannelType.Towers) {
                if (e.Channel == "Org Msg") {
                    //capture join/leave/kick org messages and do things
                    if (e.Descrambled.CategoryID == 508) {
                        if (e.Descrambled.EntryID == 173558247) {
                            //<someone> invited <toon> to your organization.
                            Regex matches = new Regex(@"(.+)\sinvited\s(.+)\sto\syour\sorganization\.");
                            if (matches.IsMatch(HTML.UnescapeString(HTML.StripTags(e.Message)))) {
                                Match match = matches.Match(HTML.UnescapeString(HTML.StripTags(e.Message)));
                                string inviter = match.Groups[1].Value;
                                string invited = match.Groups[2].Value;
                                if (this._autoMember) {
                                  bot.Users.AddUser(invited, UserLevel.Member, inviter);
                                  bot.FriendList.Add("notify", invited);
                                  if (bot.FriendList.IsFriend("guestlist", invited)) {
                                      bot.FriendList.Remove("guestlist", invited);
                                  }                               
                                  if (bot.PrivateChannel.IsOn(invited)) {
                                      bot.PrivateChannel.Kick(invited);
                                  }
                                }
                                if (this._welcomeMembers) bot.SendOrganizationMessage(bot.ColorHighlight + "Welcome to the org, " + bot.ColorNormal + invited + bot.ColorHighlight + "!!!");
                            }
                        }
                        else if (e.Descrambled.EntryID == 5146599) {
                            //<toon> has joined your organization.
                            Regex matches = new Regex(@"(.+)\shas\sjoined\syour\sorganization\.");
                            if (matches.IsMatch(HTML.UnescapeString(HTML.StripTags(e.Message)))) {
                                Match match = matches.Match(HTML.UnescapeString(HTML.StripTags(e.Message)));
                                string invited = match.Groups[1].Value;
                                if (this._autoMember) {
                                  bot.Users.AddUser(invited, UserLevel.Member, bot.Character);
                                  bot.FriendList.Add("notify", invited);
                                  if (bot.FriendList.IsFriend("guestlist", invited)) {
                                      bot.FriendList.Remove("guestlist", invited);
                                  }                               
                                  if (bot.PrivateChannel.IsOn(invited)) {
                                      bot.PrivateChannel.Kick(invited);
                                  }
                                }
                                if (this._welcomeMembers) bot.SendOrganizationMessage(bot.ColorHighlight + "Welcome to the org, " + bot.ColorNormal + invited + bot.ColorHighlight + "!!!");
                            }
                        }
                        else if (e.Descrambled.EntryID == 45978487) {
                            //<toon> just left your organization.
                            Regex matches = new Regex(@"(.+)\sjust\sleft\syour\sorganization\.");
                            if (matches.IsMatch(HTML.UnescapeString(HTML.StripTags(e.Message)))) {
                                Match match = matches.Match(HTML.UnescapeString(HTML.StripTags(e.Message)));
                                string toon = match.Groups[1].Value;
                                if (this._autoMember) {
                                  bot.Users.RemoveUser(toon);
                                  bot.FriendList.Remove("notify", toon);
                                  if (bot.FriendList.IsFriend("guestlist", toon)) {
                                      bot.FriendList.Remove("guestlist", toon);
                                  }                               
                                  if (bot.PrivateChannel.IsOn(toon)) {
                                      bot.PrivateChannel.Kick(toon);
                                  }
                                }
                            }
                        }
                        else if (e.Descrambled.EntryID == 20908201) {
                            //<someone> removed inactive character <toon> from your organization.
                            Regex matches = new Regex(@"(.+)\sremoved\sinactive\scharacter\s(.+)\sfrom\syour\sorganization\.");
                            if (matches.IsMatch(HTML.UnescapeString(HTML.StripTags(e.Message)))) {
                                Match match = matches.Match(HTML.UnescapeString(HTML.StripTags(e.Message)));
                                string kicker = match.Groups[1].Value;
                                string kicked = match.Groups[2].Value;
                                if (this._autoMember) {
                                    bot.Users.RemoveUser(kicked);
                                    bot.FriendList.Remove("notify", kicked);
                                    if (bot.FriendList.IsFriend("guestlist", kicked)) {
                                        bot.FriendList.Remove("guestlist", kicked);
                                    }                               
                                    if (bot.PrivateChannel.IsOn(kicked)) {
                                        bot.PrivateChannel.Kick(kicked);
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
Logged
« Reply #8 on: August 31, 2010, 03:45:37 PM »
Apprentice coder
VhaBot Developers
Novice

View Profile
***

Epeen: 4
Posts: 446


Yes, some time ago this was implemented by another coder, and combing the forum will identify the poster.

Personally I have been using, updating and modifying this code, and have found one major issue which will define its final implementation in the next Vhabot release.

When/if a player leaves org for a city raid, or for twinking purposes .. it was frequently the case that player's alts list was wiped from the bot when they left. When they rejoined, they suddenly found the bot ignored them, didn't show up on notify, etc etc. Because of the way Vhabot updates its memberlist, there are some circumstances where there are 'ghost' members who don't get correctly re-added or removed from the bot by the normal roster update methods. The only good solution to this is then to wipe ALL the bots' member lists, and re-add from scratch .. deleting all alts lists and logon messages. Many users find this a pain.
In order to find a compromise, I think we'll stick to Adding new members immediately they are signalled by the '[Org Msg]' channel, and only removing members that are kicked (either by officers, or by alignment changes). Anyone who leaves, and potentially rejoins the same day .. if they remain absent for a Roster update interval (approx 24hr usually) .. they get removed by the automatic methods anyway .. and everything should stay in sync.

This functionality will be incorporated in a new 'OrgManager' plugin .. combining the existing 'Roster' and removing the parts of MembersManager pertaining to OrgMembers. We can add a few config options to determine exactly how an admin wishes it to work. It should then be a bit more logical what functions belong where .. and hopefully remove some of the myths about the 'automember' system, which is frequently an undesireable feature!
Logged
Pages: [1]   Go Up
Print
Jump to: