diff --git a/src/server.cpp b/src/server.cpp
index 9315fcf80d9d6654e25d28d0084ecaff01913962..c93abb10c2d0b9ab6bbc76ccee40c93ef5bd3832 100644
--- a/src/server.cpp
+++ b/src/server.cpp
@@ -585,21 +585,7 @@ void Server::AsyncRunStep(bool initial_step)
 			MutexAutoLock lock(m_env_mutex);
 			while (!m_admin_chat->command_queue.empty()) {
 				ChatEvent *evt = m_admin_chat->command_queue.pop_frontNoEx();
-				if (evt->type == CET_NICK_ADD) {
-					// The terminal informed us of its nick choice
-					m_admin_nick = ((ChatEventNick *)evt)->nick;
-					if (!m_script->getAuth(m_admin_nick, NULL, NULL)) {
-						errorstream << "You haven't set up an account." << std::endl
-							<< "Please log in using the client as '"
-							<< m_admin_nick << "' with a secure password." << std::endl
-							<< "Until then, you can't execute admin tasks via the console," << std::endl
-							<< "and everybody can claim the user account instead of you," << std::endl
-							<< "giving them full control over this server." << std::endl;
-					}
-				} else {
-					assert(evt->type == CET_CHAT);
-					handleAdminChat((ChatEventChat *)evt);
-				}
+				handleChatInterfaceEvent(evt);
 				delete evt;
 			}
 		}
@@ -2749,6 +2735,25 @@ void Server::UpdateCrafting(Player* player)
 	plist->changeItem(0, preview);
 }
 
+void Server::handleChatInterfaceEvent(ChatEvent *evt)
+{
+	if (evt->type == CET_NICK_ADD) {
+		// The terminal informed us of its nick choice
+		m_admin_nick = ((ChatEventNick *)evt)->nick;
+		if (!m_script->getAuth(m_admin_nick, NULL, NULL)) {
+			errorstream << "You haven't set up an account." << std::endl
+				<< "Please log in using the client as '"
+				<< m_admin_nick << "' with a secure password." << std::endl
+				<< "Until then, you can't execute admin tasks via the console," << std::endl
+				<< "and everybody can claim the user account instead of you," << std::endl
+				<< "giving them full control over this server." << std::endl;
+		}
+	} else {
+		assert(evt->type == CET_CHAT);
+		handleAdminChat((ChatEventChat *)evt);
+	}
+}
+
 std::wstring Server::handleChat(const std::string &name, const std::wstring &wname,
 	const std::wstring &wmessage, u16 peer_id_to_avoid_sending)
 {
diff --git a/src/server.h b/src/server.h
index 6d66c938602e20b476c57656cbd54a8fc9c46978..5a19677cd3f8ed4f7c2b5c31157dc1fc630ca007 100644
--- a/src/server.h
+++ b/src/server.h
@@ -476,6 +476,8 @@ class Server : public con::PeerHandler, public MapEventReceiver,
 	void DeleteClient(u16 peer_id, ClientDeletionReason reason);
 	void UpdateCrafting(Player *player);
 
+	void handleChatInterfaceEvent(ChatEvent *evt);
+
 	// This returns the answer to the sender of wmessage, or "" if there is none
 	std::wstring handleChat(const std::string &name, const std::wstring &wname,
 		const std::wstring &wmessage,