Topic: [Info] /pro /pros
Начну
в account_wrap.cpp добавить код
extern int account_get_auth_pro(t_account * account, char const * channelname)
{
char temp[256];
if (!channelname)
return account_get_boolattr(account, "BNET\\auth\\pro");
std::sprintf(temp, "BNET\\auth\\pro\\%.100s", channelname);
return account_get_boolattr(account, temp);
}
extern int account_set_auth_pro(t_account * account, char const * channelname, int val)
{
char temp[256];
if (!channelname)
return account_set_boolattr(account, "BNET\\auth\\pro", val);
std::sprintf(temp, "BNET\\auth\\pro\\%.100s", channelname);
return account_set_boolattr(account, temp, val);
}
В account_wrap.h добавить
extern int account_get_auth_pro(t_account * account, char const * channelname);
extern int account_set_auth_pro(t_account * account, char const * channelname, int val);
В command.cpp добавить
static int _handle_pro_command(t_connection * c, char const * text)
{
char const * username;
char command;
t_account * acc;
t_connection * dst_c;
int changed=0;
text = skip_command(text);
if ((text[0]=='\0') || ((text[0] != '+') && (text[0] != '-'))) {
message_send_text(c,message_type_info,c,"используйте: /pro +геймер чтобы добавить в список про аккунтов.");
message_send_text(c,message_type_info,c," /pro -геймер чтобы убрать из списка про аккунтов.");
return -1;
}
command = text[0];
username = &text[1];
if(!*username) {
message_send_text(c,message_type_info,c,"You need to supply a username.");
return -1;
}
if(!(acc = accountlist_find_account(username))) {
snprintf(msgtemp, sizeof(msgtemp), "There's no account with username %.64s.", username);
message_send_text(c, message_type_info, c, msgtemp);
return -1;
}
dst_c = account_get_conn(acc);
if (command == '+') {
if (account_get_auth_pro(acc,NULL) == 1) {
snprintf(msgtemp, sizeof(msgtemp), "%.64s уже добавлен в список Про аккунтов.",username);
} else {
account_set_auth_pro(acc,NULL,1);
snprintf(msgtemp, sizeof(msgtemp), "%.64s Добавлен в список Про аккунтов",username);
snprintf(msgtemp2, sizeof(msgtemp2), "%.64s добавил вас в список Про аккунтов.",conn_get_loggeduser(c));
changed = 1;
}
} else {
if (account_get_auth_pro(acc,NULL) != 1)
snprintf(msgtemp, sizeof(msgtemp), "%.64s is no Server PRO, so you can't demote him",username);
else {
account_set_auth_pro(acc,NULL,0);
snprintf(msgtemp, sizeof(msgtemp), "%.64s убран из списка про аккутов.",username);
snprintf(msgtemp2, sizeof(msgtemp2), "%.64s убрал вас из списка про аккунтов. (Жаль)",conn_get_loggeduser(c));
changed = 1;
}
}
if (changed && dst_c) message_send_text(dst_c, message_type_info, c, msgtemp2);
message_send_text(c, message_type_info, c, msgtemp);
command_set_flags(dst_c);
return 0;
}
далее
static int _handle_pros_command(t_connection * c, char const *text)
{
unsigned int i;
t_elem const * curr;
t_connection * tc;
char const * nick;
std::strcpy(msgtemp,"Про аккунты в сети:");
i = std::strlen(msgtemp);
LIST_TRAVERSE_CONST(connlist(),curr)
{
tc = (t_connection*)elem_get_data(curr);
if (!tc)
continue;
if (!conn_get_account(tc))
continue;
if (account_get_auth_pro(conn_get_account(tc),NULL)==1)
{
if ((nick = conn_get_username(tc)))
{
if (i+std::strlen(nick)+2>sizeof(msgtemp)) /* " ", name, '\0' */
{
message_send_text(c,message_type_info,c,msgtemp);
i = 0;
}
std::sprintf(&msgtemp[i]," %s", nick);
i += std::strlen(&msgtemp[i]);
}
}
}
if (i>0)
message_send_text(c,message_type_info,c,msgtemp);
return 0;
}