[IRCServices Coding] Introduced module's Psuedoclient is invalid user.

Andrew Church achurch at achurch.org
Mon Aug 15 21:36:33 PDT 2005


     What you need to do in this case is keep track of the pseudoclients'
status yourself, like how the autokick code keeps track of which channels
ChanServ is in.  The User structure is for users monitored by Services, not
for pseudoclients.

  --Andrew Church
    achurch at achurch.org
    http://achurch.org/

>Aha - let me guess, you're working on a botserv? ;)
>
>Alas, it's not that simple, Services doesn't know about users on their 
>own server (chanserv, nickserv and any other pseudoclients). So really, 
>there isn't a way to accomplish this, at least, not easily that we've 
>been able to think of yet. (myself craig, and brain did some 
>brainstorming on this a while back (last year?), can't remember what we 
>ended up thinking.
>
>Olly wrote:
>> Hi
>> I seem to have screwed up somewhere, but can't see where.
>> I have stolen module code, from a module coded by ChatSpike.net (Thanks
>> Brain and the crew) and have modified it a little.
>> The problem is when I try to discover what the psuedoclient's channel
>> status is. All I get in the debug logs is a request has been made for an
>> "invalid user". If I attempt to discover any info using any of the
>> call-backs, I either get a seg fault or no reply. I imagine this is due
>> to the pseudoclient's Nick not having any valid user. The kind of info I
>> am after is whether the Psuedoclient is opped in any particular channel,
>> or if it has been kicked. None of the call-backs will give me any of
>> this info, and direct use of the standard APIs like:
>> 
>> is_chanop(User *user, const char *chan) 
>> 
>> causes a crash because get_user(PsuedoclientNick) returns NULL I expect.
>> 
>> I even attempted to add a custom is_chanop routine to the module which
>> searched using just the nick but then
>> 
>>     LIST_SEARCH(c->users, user->nick, user->nick, irc_stricmp, cu);
>> 
>> gave me a problem because it too requires a valid user to work with, and
>> all I can seem to provide is just a nick.
>> 
>> do_intoduce appears to work correctly yet CS still alters the channel
>> status of the module's pseudoclient despite it's being a Services User.
>> 
>> Here's the beginning code for do_introduce which is taken directly from
>> Chatspike's module.
>> 
>> static int do_introduce(const char *nick)
>> {
>>         ChannelInfo *ci;static int do_introduce(const char *nick)
>>         char chan[1024];
>>         FILE* f;
>>         if (!nick || irc_stricmp(nick, s_ModuleNick) == 0) {
>>                 send_nick(s_IdleServ, ServiceUser, ServiceHost,
>> ServerName,
>>                 desc_IdleServ, pseudoclient_modes);
>>                 if (nick)
>>                     return 1;
>> 
>> Any ideas/help appreciated.
>> 
>> Thanks.
>> 
>> Olly
>> 
>> 
>> 
>> 
>> ------------------------------------------------------------------------
>> 
>> ------------------------------------------------------------------
>> To unsubscribe or change your subscription options, visit:
>> http://lists.ircservices.za.net/mailman/listinfo/ircservices-coding
>
>------------------------------------------------------------------
>To unsubscribe or change your subscription options, visit:
>http://lists.ircservices.za.net/mailman/listinfo/ircservices-coding