Add $ishalfop(<nick> <channel>) scripting function, as per EPIC.
git-svn-id: svn://svn.code.sf.net/p/bitchx/code/trunk@34 13b04d17-f746-0410-82c6-800466cd88b0
This commit is contained in:
@@ -648,6 +648,11 @@ enum FUNCTION_VALUE
|
|||||||
CHECK_EXT_MAIL,
|
CHECK_EXT_MAIL,
|
||||||
DEFAULT_OUTPUT_FUNCTION,
|
DEFAULT_OUTPUT_FUNCTION,
|
||||||
DEFAULT_STATUS_OUTPUT_FUNCTION,
|
DEFAULT_STATUS_OUTPUT_FUNCTION,
|
||||||
|
|
||||||
|
/* names.c */
|
||||||
|
IS_HALFOP,
|
||||||
|
|
||||||
|
/* leave at the end */
|
||||||
NUMBER_OF_GLOBAL_FUNCTIONS
|
NUMBER_OF_GLOBAL_FUNCTIONS
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -416,6 +416,7 @@ extern Function_ptr *global;
|
|||||||
#define is_channel (*(int (*)(char *))global[IS_CHANNEL])
|
#define is_channel (*(int (*)(char *))global[IS_CHANNEL])
|
||||||
#define make_channel (*(char *(*)(char *))global[MAKE_CHANNEL])
|
#define make_channel (*(char *(*)(char *))global[MAKE_CHANNEL])
|
||||||
#define is_chanop (*(int (*)(char *, char *))global[IS_CHANOP])
|
#define is_chanop (*(int (*)(char *, char *))global[IS_CHANOP])
|
||||||
|
#define is_halfop (*(int (*)(char *, char *))global[IS_HALFOP])
|
||||||
#define im_on_channel (*(int (*)(char *, int ))global[IM_ON_CHANNEL])
|
#define im_on_channel (*(int (*)(char *, int ))global[IM_ON_CHANNEL])
|
||||||
#define is_on_channel (*(int (*)(char *, int , char *))global[IS_ON_CHANNEL])
|
#define is_on_channel (*(int (*)(char *, int , char *))global[IS_ON_CHANNEL])
|
||||||
#define add_channel (*(ChannelList *(*)(char *, int, int))global[ADD_CHANNEL])
|
#define add_channel (*(ChannelList *(*)(char *, int, int))global[ADD_CHANNEL])
|
||||||
|
|||||||
@@ -35,6 +35,7 @@ int got_info (char *, int, int);
|
|||||||
|
|
||||||
int is_channel_mode (char *, int, int);
|
int is_channel_mode (char *, int, int);
|
||||||
int BX_is_chanop (char *, char *);
|
int BX_is_chanop (char *, char *);
|
||||||
|
int BX_is_halfop (char *, char *);
|
||||||
char *is_chanoper (char *, char *);
|
char *is_chanoper (char *, char *);
|
||||||
ChannelList *BX_lookup_channel (char *, int, int);
|
ChannelList *BX_lookup_channel (char *, int, int);
|
||||||
char *BX_get_channel_mode (char *, int);
|
char *BX_get_channel_mode (char *, int);
|
||||||
|
|||||||
@@ -169,6 +169,7 @@ static char *function_encode (char *, unsigned char *);
|
|||||||
static char *function_index (char *, char *);
|
static char *function_index (char *, char *);
|
||||||
static char *function_ischannel (char *, char *);
|
static char *function_ischannel (char *, char *);
|
||||||
static char *function_ischanop (char *, char *);
|
static char *function_ischanop (char *, char *);
|
||||||
|
static char *function_ishalfop (char *, char *);
|
||||||
static char *function_left (char *, char *);
|
static char *function_left (char *, char *);
|
||||||
static char *function_listen (char *, char *);
|
static char *function_listen (char *, char *);
|
||||||
static char *function_match (char *, char *);
|
static char *function_match (char *, char *);
|
||||||
@@ -580,6 +581,7 @@ static BuiltInFunctions built_in_functions[] =
|
|||||||
{ "ISCURCHAN", function_iscurchan },
|
{ "ISCURCHAN", function_iscurchan },
|
||||||
{ "ISDIGIT", function_isdigit },
|
{ "ISDIGIT", function_isdigit },
|
||||||
{ "ISDISPLAYING", function_isdisplaying },
|
{ "ISDISPLAYING", function_isdisplaying },
|
||||||
|
{ "ISHALFOP", function_ishalfop },
|
||||||
{ "ISIGNORED", function_isignored },
|
{ "ISIGNORED", function_isignored },
|
||||||
{ "ISNUMBER", function_isnumber },
|
{ "ISNUMBER", function_isnumber },
|
||||||
{ "ISOP", function_isop },
|
{ "ISOP", function_isop },
|
||||||
@@ -1747,6 +1749,22 @@ BUILT_IN_FUNCTION(function_ischanop, input)
|
|||||||
RETURN_INT(is_chanop(input, nick));
|
RETURN_INT(is_chanop(input, nick));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Usage: $ishalfop(nick channel)
|
||||||
|
* Returns: 1 if <nick> is a channel half-op on <channel>
|
||||||
|
* 0 if <nick> is not a channel half-op on <channel>
|
||||||
|
* * O R *
|
||||||
|
* if you are not on <channel>
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
BUILT_IN_FUNCTION(function_ishalfop, input)
|
||||||
|
{
|
||||||
|
char *nick;
|
||||||
|
|
||||||
|
GET_STR_ARG(nick, input);
|
||||||
|
RETURN_INT(is_halfop(input, nick));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Usage: $word(jUmber text)
|
* Usage: $word(jUmber text)
|
||||||
|
|||||||
@@ -494,6 +494,7 @@ static int already_done = 0;
|
|||||||
|
|
||||||
/* names.c */
|
/* names.c */
|
||||||
global_table[IS_CHANOP] = (Function_ptr) BX_is_chanop;
|
global_table[IS_CHANOP] = (Function_ptr) BX_is_chanop;
|
||||||
|
global_table[IS_HALFOP] = (Function_ptr) BX_is_halfop;
|
||||||
global_table[IS_CHANNEL] = (Function_ptr) BX_is_channel;
|
global_table[IS_CHANNEL] = (Function_ptr) BX_is_channel;
|
||||||
global_table[MAKE_CHANNEL] = (Function_ptr) BX_make_channel; /* this is really in misc.c */
|
global_table[MAKE_CHANNEL] = (Function_ptr) BX_make_channel; /* this is really in misc.c */
|
||||||
global_table[IM_ON_CHANNEL] = (Function_ptr) BX_im_on_channel;
|
global_table[IM_ON_CHANNEL] = (Function_ptr) BX_im_on_channel;
|
||||||
|
|||||||
@@ -407,12 +407,16 @@ ChannelList *BX_add_to_channel(char *channel, char *nick, int server, int oper,
|
|||||||
new->flags |= NICK_VOICE;
|
new->flags |= NICK_VOICE;
|
||||||
if (away)
|
if (away)
|
||||||
{
|
{
|
||||||
if (*away == 'H')
|
if (strchr(away,'H'))
|
||||||
new->flags &= ~NICK_AWAY;
|
new->flags &= ~NICK_AWAY;
|
||||||
else
|
else
|
||||||
new->flags |= NICK_AWAY;
|
new->flags |= NICK_AWAY;
|
||||||
if (*(away+1) == '*')
|
|
||||||
|
if (strchr(away, '*'))
|
||||||
new->flags |= NICK_IRCOP;
|
new->flags |= NICK_IRCOP;
|
||||||
|
|
||||||
|
if (strchr(away, '%'))
|
||||||
|
new->flags |= NICK_HALFOP;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (check_whowas_chan_buffer(channel, -1, 0))
|
else if (check_whowas_chan_buffer(channel, -1, 0))
|
||||||
@@ -436,12 +440,16 @@ ChannelList *BX_add_to_channel(char *channel, char *nick, int server, int oper,
|
|||||||
new->flags |= NICK_VOICE;
|
new->flags |= NICK_VOICE;
|
||||||
if (away)
|
if (away)
|
||||||
{
|
{
|
||||||
if (*away == 'H')
|
if (strchr(away,'H'))
|
||||||
new->flags |= NICK_AWAY;
|
|
||||||
else
|
|
||||||
new->flags &= ~NICK_AWAY;
|
new->flags &= ~NICK_AWAY;
|
||||||
if (*(away+1) == '*')
|
else
|
||||||
|
new->flags |= NICK_AWAY;
|
||||||
|
|
||||||
|
if (strchr(away, '*'))
|
||||||
new->flags |= NICK_IRCOP;
|
new->flags |= NICK_IRCOP;
|
||||||
|
|
||||||
|
if (strchr(away, '%'))
|
||||||
|
new->flags |= NICK_HALFOP;
|
||||||
}
|
}
|
||||||
if (server1)
|
if (server1)
|
||||||
malloc_strcpy(&new->server, server1);
|
malloc_strcpy(&new->server, server1);
|
||||||
@@ -1422,6 +1430,20 @@ int BX_is_chanop(char *channel, char *nick)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int BX_is_halfop(char *channel, char *nick)
|
||||||
|
{
|
||||||
|
ChannelList *chan;
|
||||||
|
NickList *Nick;
|
||||||
|
|
||||||
|
if (nick && (chan = lookup_channel(channel, from_server, CHAN_NOUNLINK)))
|
||||||
|
{
|
||||||
|
if ((Nick = find_nicklist_in_channellist(nick, chan, 0)))
|
||||||
|
if (nick_ishalfop(Nick))
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
char *is_chanoper(char *channel, char *nick)
|
char *is_chanoper(char *channel, char *nick)
|
||||||
{
|
{
|
||||||
ChannelList *chan;
|
ChannelList *chan;
|
||||||
|
|||||||
Reference in New Issue
Block a user