bool Chat::handleMsg(User* user, std::string msg) { // Timestamp time_t rawTime = time(NULL); struct tm* Tm = localtime(&rawTime); std::string timeStamp (asctime(Tm)); timeStamp = timeStamp.substr(11, 5); bool blockMessage = false; Plugin::get()->hookChat.doUntilFalse(user, timeStamp, msg, &blockMessage); if (blockMessage) { return false; } char prefix = msg[0]; switch(prefix) { // Servermsg (Admin-only) case SERVERMSGPREFIX: if(IS_ADMIN(user->permissions)) { handleServerMsg(user, msg, timeStamp); } break; // Admin message case ADMINCHATPREFIX: if(IS_ADMIN(user->permissions)) { handleAdminChatMsg(user, msg, timeStamp); } break; // Command case CHATCMDPREFIX: handleCommandMsg(user, msg, timeStamp); break; // Normal chat message default: handleChatMsg(user, msg, timeStamp); break; } return true; }
void Chat::handleChatMsg(User* user, std::string msg, const std::string& timeStamp) { if(user->isAbleToCommunicate("chat") == false) { return; } // Check for Admins or Server Console if (user->UID == SERVER_CONSOLE_UID) { Mineserver::get()->screen()->log(LOG_CHAT, user->nick + " " + msg); msg = timeStamp + " " + MC_COLOR_RED + user->nick + MC_COLOR_WHITE + " " + msg; } else if(IS_ADMIN(user->permissions)) { Mineserver::get()->screen()->log(LOG_CHAT, "<"+ user->nick + "> " + msg); msg = timeStamp + " <"+ MC_COLOR_DARK_MAGENTA + user->nick + MC_COLOR_WHITE + "> " + msg; } else { Mineserver::get()->screen()->log(LOG_CHAT, "<"+ user->nick + "> " + dtos(user->UID) + " " + msg); msg = timeStamp + " <"+ user->nick + "> " + msg; } this->sendMsg(user, msg, ALL); }
bool Chat::handleMsg(User* user, std::string msg) { // Timestamp time_t rawTime = time(NULL); struct tm* Tm = localtime(&rawTime); std::string timeStamp (asctime(Tm)); timeStamp = timeStamp.substr(11, 5); if ((static_cast<Hook3<bool,User*,time_t,std::string>*>(Mineserver::get()->plugin()->getHook("ChatPre")))->doUntilFalse(user, rawTime, msg)) { return false; } (static_cast<Hook3<void,User*,time_t,std::string>*>(Mineserver::get()->plugin()->getHook("ChatPre")))->doAll(user, rawTime, msg); char prefix = msg[0]; switch(prefix) { // Servermsg (Admin-only) case SERVERMSGPREFIX: if(IS_ADMIN(user->permissions)) { handleServerMsg(user, msg, timeStamp); } break; // Admin message case ADMINCHATPREFIX: if(IS_ADMIN(user->permissions)) { handleAdminChatMsg(user, msg, timeStamp); } break; // Command case CHATCMDPREFIX: handleCommandMsg(user, msg, timeStamp); break; // Normal chat message default: handleChatMsg(user, msg, timeStamp); break; } return true; }
bool permission_isAdmin(const char* name) { User* tempuser = userFromName(std::string(name)); if (tempuser == NULL) { return false; } return (IS_ADMIN(tempuser->permissions) != 0); }
bool permission_isAdmin(const char* name) { User* tempuser = User::byNick(name); if (tempuser == NULL) { return false; } return (IS_ADMIN(tempuser->permissions) != 0); }
void Chat::sendHelp(User* user, std::deque<std::string> args) { // TODO: Add paging support, since not all commands will fit into // the screen at once. CommandList* commandList = &m_guestCommands; // defaults std::string commandColor = MC_COLOR_BLUE; if(IS_ADMIN(user->permissions)) { commandList = &m_adminCommands; commandColor = MC_COLOR_RED; // different color for admin commands } else if(IS_OP(user->permissions)) { commandList = &m_opCommands; commandColor = MC_COLOR_GREEN; } else if(IS_MEMBER(user->permissions)) { commandList = &m_memberCommands; } if(args.size() == 0) { for(CommandList::iterator it = commandList->begin(); it != commandList->end(); it++) { std::string args = it->second->arguments; std::string description = it->second->description; sendMsg(user, commandColor + CHATCMDPREFIX + it->first + " " + args + " : " + MC_COLOR_YELLOW + description, Chat::USER); } } else { CommandList::iterator iter; if((iter = commandList->find(args.front())) != commandList->end()) { std::string args = iter->second->arguments; std::string description = iter->second->description; sendMsg(user, commandColor + CHATCMDPREFIX + iter->first + " " + args, Chat::USER); sendMsg(user, MC_COLOR_YELLOW + CHATCMDPREFIX + description, Chat::USER); } else { sendMsg(user, MC_COLOR_RED + "Unknown Command: " + args.front(), Chat::USER); } } }
DO_RET do_calendar( CHAR_DATA *ch, char *argument ) { set_char_color( AT_PLAIN, ch ); send_to_char( ch, get_calendar_string() ); if ( IS_ADMIN(ch) ) { /* (FF) bisognerebbe farle bene rimandando un \r\n ma bisogna togliere quindi a tutti l'\n finale. */ ch_printf( ch, "\r\n%s : %21.21s\r\n", MUD_NAME, str_boot_time ); ch_printf( ch, "Ora Locale Server: %21.21s\r\n", friendly_ctime(¤t_time) ); ch_printf( ch, "Prossimo reboot previsto: %s", reboot_time ); } }
SPEC_RET spec_thief( CHAR_DATA *ch ) { CHAR_DATA *victim; CHAR_DATA *v_next; int gold; int maxgold; if ( ch->position != POSITION_STAND ) return FALSE; for ( victim = ch->in_room->first_person; victim; victim = v_next ) { v_next = victim->next_in_room; if ( IS_MOB(victim) ) continue; if ( IS_ADMIN(victim) ) continue; if ( number_bits(2) != 0 ) continue; if ( !can_see(ch, victim) ) continue; if ( is_awake(victim) && number_range(0, get_level(ch)/2) == 0 ) { act( AT_ACTION, "$n mi sta derubando! Dannato ladro!", ch, NULL, victim, TO_VICT ); if ( get_curr_sense(ch, SENSE_SIXTH) > 75 ) { act( AT_ACTION, "Mi accorgo che $n sta frugando nel suo sacco di monete di $N!", ch, NULL, victim, TO_NOVICT ); } } else { maxgold = get_level(ch)/2 * get_level(ch)/2 * 1000; gold = victim->gold * number_range( 1, URANGE(2, get_level(ch)/8, 10) ) / 100; ch->gold += 9 * gold / 10; victim->gold -= gold; if ( ch->gold > maxgold ) { boost_economy( ch->in_room->area, ch->gold - maxgold/2 ); ch->gold = maxgold/2; } } return TRUE; } /* chiude il for */ return FALSE; }
void Chat::handleCommandMsg(User* user, std::string msg, const std::string& timeStamp) { std::deque<std::string> cmd = this->parseCmd(msg.substr(1)); std::string command = cmd[0]; cmd.pop_front(); // User commands CommandList::iterator iter; if((iter = m_memberCommands.find(command)) != m_memberCommands.end()) { iter->second->callback(user, command, cmd); } else if(IS_ADMIN(user->permissions) && (iter = m_adminCommands.find(command)) != m_adminCommands.end()) { iter->second->callback(user, command, cmd); } }
void Chat::registerCommand(Command* command) { // Loop thru all the words for this command std::string currentWord; std::deque<std::string> words = command->names; while(!words.empty()) { currentWord = words[0]; words.pop_front(); if(IS_ADMIN(command->permissions)) { m_adminCommands[currentWord] = command; continue; } if(IS_OP(command->permissions)) { m_opCommands[currentWord] = command; m_adminCommands[currentWord] = command; continue; } if(IS_MEMBER(command->permissions)) { m_memberCommands[currentWord] = command; m_opCommands[currentWord] = command; m_adminCommands[currentWord] = command; continue; } if(IS_GUEST(command->permissions)) { // insert into all m_guestCommands[currentWord] = command; m_memberCommands[currentWord] = command; m_opCommands[currentWord] = command; m_adminCommands[currentWord] = command; } } }
/* * Sets up the user_session structure. This contains various bits of * information pertaining to the users session. */ void set_user_session(void) { TCTDB *tdb; TDBQRY *qry; TCLIST *res; TCMAP *cols; int rsize; int primary_key_size; char pkbuf[256]; char session_id[SID_LEN + 1]; char login_at[21]; char last_seen[21]; char uid[11]; char sid[21]; char restrict_ip[2]; char capabilities[4]; char user_hdr[1025]; char *xss_string; const char *rbuf; /* * Don't assume the order we get the cookies back is the * same order as we sent them. */ if (strncmp(env_vars.http_cookie, "session_id", 10) == 0) snprintf(session_id, sizeof(session_id), "%s", env_vars.http_cookie + 11); else snprintf(session_id, sizeof(session_id), "%s", env_vars.http_cookie + 88); tdb = tctdbnew(); tctdbopen(tdb, SESSION_DB, TDBOREADER | TDBOWRITER); /* Get the users stored session */ qry = tctdbqrynew(tdb); tctdbqryaddcond(qry, "session_id", TDBQCSTREQ, session_id); res = tctdbqrysearch(qry); rbuf = tclistval(res, 0, &rsize); cols = tctdbget(tdb, rbuf, rsize); tcmapiterinit(cols); memset(&user_session, 0, sizeof(user_session)); snprintf(user_session.tenant, sizeof(user_session.tenant), "%s", tcmapget2(cols, "tenant")); user_session.sid = strtoull(tcmapget2(cols, "sid"), NULL, 10); user_session.uid = atoi(tcmapget2(cols, "uid")); user_session.username = strdup(tcmapget2(cols, "username")); user_session.name = strdup(tcmapget2(cols, "name")); user_session.login_at = atol(tcmapget2(cols, "login_at")); user_session.last_seen = time(NULL); snprintf(user_session.origin_ip, sizeof(user_session.origin_ip), "%s", tcmapget2(cols, "origin_ip")); user_session.client_id = strdup(tcmapget2(cols, "client_id")); snprintf(user_session.session_id, sizeof(user_session.session_id), "%s", tcmapget2(cols, "session_id")); snprintf(user_session.csrf_token, sizeof(user_session.csrf_token), "%s", tcmapget2(cols, "csrf_token")); user_session.restrict_ip = atoi(tcmapget2(cols, "restrict_ip")); user_session.capabilities = atoi(tcmapget2(cols, "capabilities")); tcmapdel(cols); tclistdel(res); tctdbqrydel(qry); /* * Set the user header banner, which displays the users name, uid and * whether they are an Approver and or Admin. */ xss_string = xss_safe_string(user_session.name); snprintf(user_hdr, sizeof(user_hdr), "<big><big> %s</big></big><small>" "<span class = \"lighter\"> (%d) </span>" "</small>", xss_string, user_session.uid); free(xss_string); if (IS_APPROVER() && IS_ADMIN()) strncat(user_hdr, "<span class = \"t_red\">(Approver / Admin)" "</span>", 1024 - strlen(user_hdr)); else if (IS_APPROVER()) strncat(user_hdr, "<span class = \"t_red\">(Approver)" "</span>", 1024 - strlen(user_hdr)); else if (IS_ADMIN()) strncat(user_hdr, "<span class = \"t_red\">(Admin)" "</span>", 1024 - strlen(user_hdr)); strncat(user_hdr, " ", 1024 - strlen(user_hdr)); user_session.user_hdr = strdup(user_hdr); /* * We want to update the last_seen timestamp in the users session. * This entails removing the old session first then storing the new * updated session. */ qry = tctdbqrynew(tdb); tctdbqryaddcond(qry, "session_id", TDBQCSTREQ, session_id); res = tctdbqrysearch(qry); rbuf = tclistval(res, 0, &rsize); tctdbout(tdb, rbuf, strlen(rbuf)); tclistdel(res); tctdbqrydel(qry); primary_key_size = sprintf(pkbuf, "%ld", (long)tctdbgenuid(tdb)); snprintf(login_at, sizeof(login_at), "%ld", user_session.login_at); snprintf(last_seen, sizeof(last_seen), "%ld", user_session.last_seen); snprintf(uid, sizeof(uid), "%u", user_session.uid); snprintf(sid, sizeof(sid), "%llu", user_session.sid); snprintf(restrict_ip, sizeof(restrict_ip), "%d", user_session.restrict_ip); snprintf(capabilities, sizeof(capabilities), "%d", user_session.capabilities); cols = tcmapnew3("tenant", user_session.tenant, "sid", sid, "uid", uid, "username", user_session.username, "name", user_session.name, "login_at", login_at, "last_seen", last_seen, "origin_ip", user_session.origin_ip, "client_id", user_session.client_id, "session_id", user_session.session_id, "csrf_token", user_session.csrf_token, "restrict_ip", restrict_ip, "capabilities", capabilities, NULL); tctdbput(tdb, pkbuf, primary_key_size, cols); tcmapdel(cols); tctdbclose(tdb); tctdbdel(tdb); }