64 lines
2.1 KiB
C
64 lines
2.1 KiB
C
/*
|
|
* dll/autocycle/autocycle.c - Auto-cycle plugin for BitchX
|
|
* Copyright (c) David Walluck 1999
|
|
*/
|
|
|
|
#include "irc.h"
|
|
#include "struct.h"
|
|
#include "server.h"
|
|
#include "vars.h"
|
|
#include "misc.h"
|
|
#include "module.h"
|
|
#include "hook.h"
|
|
#ifndef INIT_MODULE
|
|
#define INIT_MODULE
|
|
#endif
|
|
#include "modval.h"
|
|
|
|
#define MODULE_NAME "Autocycle"
|
|
#define _MODULE_VERSION "0.01"
|
|
|
|
int auto_cycle(IrcCommandDll *interp, char *command, char *args, char *subargs)
|
|
{
|
|
char * channel = current_window->current_channel;
|
|
int netsplit = (int)next_arg(args, &args);
|
|
int this_server = current_window->server;
|
|
ChannelList * chan = lookup_channel(channel, this_server, 0);
|
|
NickList * tmp = NULL;
|
|
int counter = 0;
|
|
|
|
/*
|
|
* This may look a little odd, but I had a hard time assuring otherwise
|
|
* that there's only one person left on the channel
|
|
*/
|
|
for (tmp = next_nicklist(chan, NULL); tmp && counter != 2; tmp = next_nicklist(chan, tmp), counter++);
|
|
|
|
if (get_dllint_var("AUTO_CYCLE"))
|
|
{
|
|
if (counter == 1 && (!netsplit || get_dllint_var("AUTO_CYCLE") > 1) && !is_chanop(channel, get_server_nickname(from_server)) && channel[0] != '+')
|
|
{
|
|
put_it("%s", convert_output_format("$G Auto-cycling $0 to gain ops", "%s", channel));
|
|
my_send_to_server(from_server, "PART %s\nJOIN %s%s%s",chan->channel, chan->channel, chan->key ? " " : "", chan->key ? chan->key : "");
|
|
return 1;
|
|
}
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
int Autocycle_Cleanup(IrcCommandDll **interp, Function_ptr *global_table)
|
|
{
|
|
remove_module_proc(VAR_PROC, MODULE_NAME, NULL, NULL);
|
|
remove_module_proc(HOOK_PROC, MODULE_NAME, NULL, NULL);
|
|
put_it("%s", convert_output_format("$G $0 $1 by DavidW2 unloaded","%s %s", MODULE_NAME, _MODULE_VERSION));
|
|
return 2;
|
|
}
|
|
|
|
int Autocycle_Init(IrcCommandDll **interp, Function_ptr *global_table)
|
|
{
|
|
initialize_module(MODULE_NAME);
|
|
add_module_proc(VAR_PROC, MODULE_NAME, "AUTO_CYCLE", NULL, INT_TYPE_VAR, 0, NULL, NULL);
|
|
add_module_proc(HOOK_PROC, MODULE_NAME, NULL, "*", NETSPLIT_LIST, 1, NULL, auto_cycle);
|
|
put_it("%s", convert_output_format("$G $0 $1 by DavidW2 loaded", "%s %s", MODULE_NAME, _MODULE_VERSION));
|
|
return 0;
|
|
}
|