コード例 #1
0
ファイル: chat.cpp プロジェクト: ReDucTor/mineserver
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;
}
コード例 #2
0
ファイル: chat.cpp プロジェクト: bakkdoor/mineserver
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);
}
コード例 #3
0
ファイル: chat.cpp プロジェクト: bakkdoor/mineserver
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;
}
コード例 #4
0
ファイル: plugin_api.cpp プロジェクト: Belnadifia/mineserver
bool permission_isAdmin(const char* name)
{
  User* tempuser = userFromName(std::string(name));
  if (tempuser == NULL)
  {
    return false;
  }
  return (IS_ADMIN(tempuser->permissions) != 0);
}
コード例 #5
0
ファイル: plugin_api.cpp プロジェクト: kiki64/mineserver
bool permission_isAdmin(const char* name)
{
  User* tempuser = User::byNick(name);
  if (tempuser == NULL)
  {
    return false;
  }
  return (IS_ADMIN(tempuser->permissions) != 0);
}
コード例 #6
0
ファイル: chat.cpp プロジェクト: bakkdoor/mineserver
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);
    }
  }
}
コード例 #7
0
ファイル: calendar.c プロジェクト: Onirik79/bardmud
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(&current_time) );
		ch_printf( ch, "Prossimo reboot previsto:   %s", reboot_time );
	}
}
コード例 #8
0
ファイル: special.c プロジェクト: Onirik79/bardmud
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;
}
コード例 #9
0
ファイル: chat.cpp プロジェクト: bakkdoor/mineserver
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);
  }
}
コード例 #10
0
ファイル: chat.cpp プロジェクト: bakkdoor/mineserver
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;
    }
  }
}
コード例 #11
0
/*
 * 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, "&nbsp;", 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);
}