As you have seen, ConAboutMe is a static method, so in order to get hold of a CGameContext instance which lets us access all the information, we need to get it from `pUserData`.
```cpp
CGameContext *pSelf = (CGameContext *)pUserData;
```
Here `pResult` holds information about the caller client id, the number of arguments and how to get them.
Just to be on the safe side, we check that the ClientID we got is actually valid:
```cpp
if(!CheckClientID(pResult->m_ClientID))
return;
```
> When you are new to the ddnet codebase, a really useful thing to do is to check how similar things you are doing are implemented, in our case there are a lot of other chat commands and just by looking at their implementations we can learn lot of things, like checking the client id, how to print to the console, chat, etc...
Now we will handle our optional argument "times", which tells us how many times we will print this information.
```cpp
int Times = 1;
if(pResult->NumArguments() > 0)
Times = pResult->GetInteger(0);
if(Times <1)
Times = 1;
```
As you can see `pResult` has some handy methods, aside from those 2 seen in the snippet, you can also get a float, string and a color. You can find out more [here](https://github.com/ddnet/ddnet/blob/516c1cc59986fee338710c215a7dc0c9f318faec/src/engine/console.h#L37).
In our command we want to get the following information: name, client version, team and position.
The player is always present while the character is only present if the player has a physical body (the tee).
dbg_msg("chat-about-me", "Character not found! Player may be dead or spectating.");
return;
}
```
You can see we use `dbg_msg` to print debug messages, an alternative is to print to console, but I recommend using `dbg_msg`.
Some methods to get information may not be on the class CGameContext, for example with the player name, we had to access the IServer class with the method `Server()`.
That said, now we send the chat message:
```cpp
char aBuf[256];
str_format(aBuf, sizeof(aBuf),
"Name: %s | "
"ID: %d | "
"Version: %d | "
"Team: %d | "
"Current position: %f, %f",
pName,
pResult->m_ClientID,
ClientVersion,
Team,
pChar->m_Pos.x, pChar->m_Pos.y);
for(int i = 0; i <Times;i++)
{
pSelf->SendChatTarget(pResult->m_ClientID, aBuf);
}
```
We format our message with `str_format` and send it with the method `SendChatTarget` and the client id we get from `pResult`.