git-svn-id: svn://svn.code.sf.net/p/bitchx/code/tags/ircii-pana-1.1-final@1 13b04d17-f746-0410-82c6-800466cd88b0
262 lines
4.2 KiB
C
262 lines
4.2 KiB
C
#include "irc.h"
|
|
#include "struct.h"
|
|
#include "ircaux.h"
|
|
#include "misc.h"
|
|
#include "output.h"
|
|
#include "module.h"
|
|
#include "list.h"
|
|
#include "vars.h"
|
|
#include "modval.h"
|
|
#include "napster.h"
|
|
|
|
static IgnoreStruct *ignores = NULL;
|
|
|
|
int check_nignore(char *nick)
|
|
{
|
|
if (ignores && find_in_list((List **)&ignores, nick, 0))
|
|
return 1;
|
|
return 0;
|
|
}
|
|
|
|
void ignore_user(IrcCommandDll *intp, char *command, char *args, char *subargs, char *help)
|
|
{
|
|
IgnoreStruct *new;
|
|
char *nick;
|
|
if (command && !my_stricmp(command, "nignore"))
|
|
{
|
|
if (!args || !*args)
|
|
{
|
|
char buffer[NAP_BUFFER_SIZE+1];
|
|
int cols = get_dllint_var("napster_names_columns") ?
|
|
get_dllint_var("napster_names_columns") :
|
|
get_int_var(NAMES_COLUMNS_VAR);
|
|
int count = 0;
|
|
if (!cols)
|
|
cols = 1;
|
|
*buffer = 0;
|
|
nap_say("%s", cparse("Ignore List:", NULL));
|
|
for (new = ignores; new; new = new->next)
|
|
{
|
|
strcat(buffer, cparse(get_dllstring_var("napster_names_nickcolor"), "%s %d %d", new->nick, 0, 0));
|
|
strcat(buffer, space);
|
|
if (count++ >= (cols - 1))
|
|
{
|
|
nap_put("%s", buffer);
|
|
*buffer = 0;
|
|
count = 0;
|
|
}
|
|
}
|
|
if (*buffer)
|
|
nap_put("%s", buffer);
|
|
return;
|
|
}
|
|
while ((nick = next_arg(args, &args)))
|
|
{
|
|
if (*nick == '-')
|
|
{
|
|
nick++;
|
|
if (!*nick)
|
|
continue;
|
|
if ((new = (IgnoreStruct *)remove_from_list((List **)&ignores, nick)))
|
|
{
|
|
new_free(&new->nick);
|
|
new_free(&new);
|
|
nap_say("Removed %s from ignore list", nick);
|
|
}
|
|
}
|
|
else
|
|
{
|
|
new = new_malloc(sizeof(IgnoreStruct));
|
|
new->nick = m_strdup(nick);
|
|
new->start = time(NULL);
|
|
new->next = ignores;
|
|
ignores = new;
|
|
nap_say("Added %s to ignore list", new->nick);
|
|
}
|
|
}
|
|
return;
|
|
}
|
|
}
|
|
|
|
|
|
void nap_echo(IrcCommandDll *intp, char *command, char *args, char *subargs, char *help)
|
|
{
|
|
int (*func)(char *, ...);
|
|
if (!args || !*args)
|
|
return;
|
|
|
|
func = nap_say;
|
|
while (args && (*args == '-'))
|
|
{
|
|
args++;
|
|
if (!*args)
|
|
break;
|
|
if (tolower(*args) == 'x')
|
|
{
|
|
func = nap_put;
|
|
next_arg(args, &args);
|
|
}
|
|
else
|
|
{
|
|
args--;
|
|
break;
|
|
}
|
|
}
|
|
if (args)
|
|
(func)("%s", args);
|
|
}
|
|
|
|
extern GetFile *napster_sendqueue;
|
|
|
|
int count_download(char *nick)
|
|
{
|
|
int count = 0;
|
|
GetFile *gf;
|
|
for (gf = napster_sendqueue; gf; gf = gf->next)
|
|
if (!my_stricmp(gf->nick, nick))
|
|
count++;
|
|
return count;
|
|
}
|
|
|
|
void compute_soundex (char *d, int dsize, const char *s)
|
|
{
|
|
int n = 0;
|
|
|
|
/* if it's not big enough to hold one soundex word, quit without
|
|
doing anything */
|
|
if (dsize < 4)
|
|
{
|
|
if (dsize > 0)
|
|
*d = 0;
|
|
return;
|
|
}
|
|
dsize--; /* save room for the terminatin nul (\0) */
|
|
|
|
while (*s && !isalpha(*s))
|
|
s++;
|
|
if (!*s)
|
|
{
|
|
*d = 0;
|
|
return;
|
|
}
|
|
|
|
*d++ = toupper (*s);
|
|
dsize--;
|
|
s++;
|
|
|
|
while (*s && dsize > 0)
|
|
{
|
|
switch (tolower (*s))
|
|
{
|
|
case 'b':
|
|
case 'p':
|
|
case 'f':
|
|
case 'v':
|
|
if (n < 3)
|
|
{
|
|
*d++ = '1';
|
|
dsize--;
|
|
n++;
|
|
}
|
|
break;
|
|
case 'c':
|
|
case 's':
|
|
case 'k':
|
|
case 'g':
|
|
case 'j':
|
|
case 'q':
|
|
case 'x':
|
|
case 'z':
|
|
if (n < 3)
|
|
{
|
|
*d++ = '2';
|
|
dsize--;
|
|
n++;
|
|
}
|
|
break;
|
|
case 'd':
|
|
case 't':
|
|
if (n < 3)
|
|
{
|
|
*d++ = '3';
|
|
dsize--;
|
|
n++;
|
|
}
|
|
break;
|
|
case 'l':
|
|
if (n < 3)
|
|
{
|
|
*d++ = '4';
|
|
dsize--;
|
|
n++;
|
|
}
|
|
break;
|
|
case 'm':
|
|
case 'n':
|
|
if (n < 3)
|
|
{
|
|
*d++ = '5';
|
|
dsize--;
|
|
n++;
|
|
}
|
|
break;
|
|
case 'r':
|
|
if (n < 3)
|
|
{
|
|
*d++ = '6';
|
|
dsize--;
|
|
n++;
|
|
}
|
|
break;
|
|
default:
|
|
if (!isalpha (*s))
|
|
{
|
|
/* pad short words with 0's */
|
|
while (n < 3 && dsize > 0)
|
|
{
|
|
*d++ = '0';
|
|
dsize--;
|
|
n++;
|
|
}
|
|
n = 0; /* reset */
|
|
/* skip forward until we find the next word */
|
|
s++;
|
|
while (*s && !isalpha (*s))
|
|
s++;
|
|
if (!*s)
|
|
{
|
|
*d = 0;
|
|
return;
|
|
}
|
|
if (dsize > 0)
|
|
{
|
|
*d++ = ',';
|
|
dsize--;
|
|
if (dsize > 0)
|
|
{
|
|
*d++ = toupper (*s);
|
|
dsize--;
|
|
}
|
|
}
|
|
}
|
|
/* else it's a vowel and we ignore it */
|
|
break;
|
|
}
|
|
/* skip over duplicate letters */
|
|
while (*(s+1) == *s)
|
|
s++;
|
|
|
|
/* next letter */
|
|
s++;
|
|
}
|
|
/* pad short words with 0's */
|
|
while (n < 3 && dsize > 0)
|
|
{
|
|
*d++ = '0';
|
|
dsize--;
|
|
n++;
|
|
}
|
|
*d = 0;
|
|
}
|
|
|