Jump to content

About the Friend List


Sam-I-am
 Share

Recommended Posts

Good day, everybody! 🙂

There's a necessary feature that must be included, which is to link the nickname to the player's ID, so that your friends would still be on your "Friend List" even if they change their nicknames.

As of now, that is not the case, so any change to your friends' nicknames would make it seem like they've gone offline, even if their nicks just got an automatic underscore for a short disconnection. So you'd have to re-add every friend whenever they use a different nickname! or else they won't show up as "online" on your list, which makes it useless.

You wouldn't even know whether that's your real friend or someone else using the same nick!
It's ridiculous to have an imposter on your "Friend List" 😀

Link to comment
Share on other sites

  • 4 weeks later...

I agree with the request absolutey, but there's a technical reason that slightly prevents this that'll try to explain in layman's terms.

The client application uses IRC as the backing chat system to send messages to each other. That includes the user/player list that appears in the main lobby. When users/players join the IRC channel/main lobby, they do so with a Nickname and a User Ident. The nickname is obviously able to be changed as often as they want, but the User Ident is typically always the same and is assigned by IRC. The problem is, when the lobby loads, it requests all users that are currently online and this request does NOT include the User Ident, only the Nicknames. There is a way to get additional information for all users that are logged in, but it replies with MUCH more data than just the User Ident that we would need to make this work. In fact it includes so much data that in the past, the client was having to deal with "IRC Flooding" errors where users were then being banned from IRC (not the client application itself...). As a result, the quick solution was the client application had to change to the basic "IRC get all online users" request to return only nicknames.

I'm not saying it cannot be done. I'm just saying it's not as simple as it sounds. :)

  • Thanks 1
Link to comment
Share on other sites

  • 3 weeks later...

Hey. Just so you know; although the timestamp shows that your comment has been posted 2 weeks ago, I was notified about it just a few hours ago 🙂
Anyway...

Excuse me, I didn't explain my point well.
Forget about what I said earlier...

The same process is already being used with the "Ignore" option.

When you ignore someone, their ident gets added to the Ignore List, not their nickname, so even if they change their nickname, they'd still be ignored.
On the other hand, when you add someone as a friend, you add their nickname, not their ident. That's the issue.

So, the code is there, we only need to change this small thing to fix it.
We just want to make the Friend List work the same way as the Ignore List; to include users' idents instead of nicknames.

Thank you 🙂

Edited by Sam-I-am
Link to comment
Share on other sites

  • 2 weeks later...
On 2/14/2022 at 1:54 AM, Sam-I-am said:

Hey. Just so you know; although the timestamp shows that your comment has been posted 2 weeks ago, I was notified about it just a few hours ago 🙂
Anyway...

Excuse me, I didn't explain my point well.
Forget about what I said earlier...

The same process is already being used with the "Ignore" option.

When you ignore someone, their ident gets added to the Ignore List, not their nickname, so even if they change their nickname, they'd still be ignored.
On the other hand, when you add someone as a friend, you add their nickname, not their ident. That's the issue.

So, the code is there, we only need to change this small thing to fix it.
We just want to make the Friend List work the same way as the Ignore List; to include users' idents instead of nicknames.

Thank you 🙂

You're absolutely correct that the Ignore list works that way. When you select to Ignore someone, it will request their Ident individually from IRC, then use the response to store in your ignore list. I could absolutely do the same thing for the Friend list, but it's how you interact with the Friend list vs the Ignore list that is the issue. 

When using the Ignore list, it's when someone on that list attempts to interact with you. IE, they send you a message. At that time, the message sent also contains that user's ident. Because we have that from the Ignore list, we can compare the two and confidently drop the message from ever reaching your client.

When using the Friends list, it's when you are trying to interact with them (in the reverse of the Ignore list). IE, you're simply viewing your list of friends either in the full list of players in the main lobby or in your Friends list window. Like I said before though, when those lists of players load, your client only receives their Nicknames from IRC, not their Idents. So, even if we were to use the same method as the Ignore list to get your friend's Ident, there'd be nothing to compare it to in that full list of players.

Link to comment
Share on other sites

But sir, no interaction is necessary in either of the two actions.

As you noted, from the list of all players online in the main lobby, you can choose to ignore (Block) any player or add them as a friend, without having to send them a message or receive one from them, simply by right-clicking their nickname and choosing the desired option.

Moreover, you can even ignore/block players that're currently offline, by editing the ignore list with any text editor, adding to it the idents of the players which you want to block. I tried it and it works. They get blocked when they go online, as long as their ident is on that list, so the client does get the idents of all players somehow, not just their nicknames.

I mean, the nicknames and idents of all players are all logged and publicly available.

Link to comment
Share on other sites

  • 1 month later...
On 2/23/2022 at 1:11 PM, Sam-I-am said:

But sir, no interaction is necessary in either of the two actions.

As you noted, from the list of all players online in the main lobby, you can choose to ignore (Block) any player or add them as a friend, without having to send them a message or receive one from them, simply by right-clicking their nickname and choosing the desired option.

Moreover, you can even ignore/block players that're currently offline, by editing the ignore list with any text editor, adding to it the idents of the players which you want to block. I tried it and it works. They get blocked when they go online, as long as their ident is on that list, so the client does get the idents of all players somehow, not just their nicknames.

I mean, the nicknames and idents of all players are all logged and publicly available.

There are two ways in which players show up in your player list (the one on the right of the main lobby)

  1. When you initially log into cncnet and the entire list comes to you immediately. In this case, the client does NOT get the Idents of users, only nicknames.
  2. When you're already logged, people that join are then added one at a time to your list. In this case, the client gets the Ident of each single user.

The reason for #1 above is because a year or so ago when there was an extreme increase in player base. As a result, the IRC communication was absolutely flooded and people were actually getting booted. In an effort to mitigate this, that initial request to get all users currently online started using a different IRC request to only get nick names for less data transfer.

This is why "block" will still work whether they come from that initial players load or from the one at a time. Any action they take, like sending you a message, comes with their Ident, which the client has captured when you block them. When you actually take the action to block someone, whether coming from the initial load or from one at a time, we actually make an individual request to IRC to get their ident for their current nick.

This is why "friend" will NOT work on the initial players load if the client captured Ident instead of nick name, because that initial load simply doesn't have Idents. This is why your friend list will not be accurate for those that are a part of that initial page load if one of your friends changed their nick.

 

Link to comment
Share on other sites

Posted (edited)
6 hours ago, Devo1929 said:

When you actually take the action to block someone, whether coming from the initial load or from one at a time, we actually make an individual request to IRC to get their ident for their current nick.

So, why not make the same request when I take the action to befriend them? There's no difference! 😀
If it's possible for "block" to work that way, it should be possible for "friend" to work the same way as well. I'm sure the same thing can be applied to both.

Let's keep in mind that the option to block someone from chatting with you is permanent, unless if you choose to unblock. I mean, you don't block the same user every time you log in. You only block them once, and the client would keep them blocked for you permanently. It doesn't wait for you to take the action to block them again, it does that on its own, and that's what I want it to do with regard to friends.

6 hours ago, Devo1929 said:

that initial request to get all users currently online started using a different IRC request to only get nick names for less data transfer.

I assume that the admins (bots) continued to get all the information, not just the nicknames. You can review the logs to verify; They contain idents, nicknames and IPs.

So, who's logging all these information? I assume it's one of those bots that are monitoring the client all the time.

6 hours ago, Devo1929 said:

When you're already logged, people that join are then added one at a time to your list. In this case, the client gets the Ident of each single user.

So, all we have to do is to request the ident of the player from the monitoring bot! to block or to befriend.

Edited by Sam-I-am
Link to comment
Share on other sites

Quote

So, why not make the same request when I take the action to befriend them? There's no difference!

When you befriend them, we could absolutely do the same thing. I realize this. However, that's not the issue. Let's assume we went this route though and I'll lay out the scenario that would happen.

  1. Right-click a user and befriend them. At this point, the client captures the ident of the user. You sign off and close the client for the day.
  2. The next day, you launch the client and the entire player list comes in WITHOUT idents attached to any of the players as mentioned. We have nothing to compare to what was captured in step 1.
  3. Friend list broken
Quote

Let's keep in mind that the option to block someone from chatting with you is permanent, unless if you choose to unblock.

And here is why:

  1. Right-click a user and block them. At this point, the client captures the ident of the user. You sign off and close the client for the day. 
  2. The next day, you launch the client and the entire player list comes in WITHOUT idents attached to any of the players as mentioned. The user in mind attempts to send you a message. With that message comes the Ident. We have something to compare it to. We can simply discard the message.
Quote

I assume that the admins (bots) continued to get all the information, not just the nicknames. You can review the logs to verify; They contain idents, nicknames and IPs.

Idents are only gathered/known for someone when they do something like send a message or join a game lobby, same as above. When they do that, the client will receive an ident with that action. Until they do something, the client has no ident for a particular user. I'm aware we could have the client do a compare on each of these requests to the player list and start linking nicknames, but there would be a few caveats with that.

  1. It would be an expensive process for everyone's client, because we would have to do it on every single inbound message and the longer that player list is, the more processing/expensive it would be to find the linked player. IRC messages are flying around in the background of the client for EVERYTHING. Doing it for every one of those messages would simply be an expensive process.
  2. There would obviously be a window in which there is NO link to the friend until that person took an action like mentioned above. At least for now with using nicknames, knowing your friend is online is immediate assuming they don't change their nickname.

 

Link to comment
Share on other sites

Posted (edited)
On 4/25/2022 at 1:22 PM, Devo1929 said:

assuming they don't change their nickname

They do that all the time, that's the problem 😃

I just want to know why does the "friend_list" (\Client\friend_list) contain nicknames while the "ignore_list" contains idents. Why don't they both use idents?? That's the issue. It's just a mistake that should be corrected.

On 4/25/2022 at 1:22 PM, Devo1929 said:
  • Right-click a user and befriend them. At this point, the client captures the ident of the user. You sign off and close the client for the day.
  • The next day, you launch the client and the entire player list comes in WITHOUT idents attached to any of the players as mentioned. We have nothing to compare to what was captured in step 1.

That's because the friend list does not store the captured idents, only the nicknames! That's the whole problem.

The friend list should have the idents of the players, and when the idents of those players are captured by the client, I want it to show me their current nicknames:
"Mr. Client, please check to see if my friends' IDs are on your list. Update their nicknames if and when their idents are captured. Thank you." 😀

Another thing, when we use the "last seen" feature (!seen nickname); it gives us the exact time to the second, while the user in question is not online at the time, meaning without interacting with that user in anyway, so how does the client know exactly when a user was online the last time? I suppose that the "log out" action in itself is a signal, so the client knows when users log out but doesn't know when they log in?? The "log in" action should inform the client when users go online, and I suppose it does, but there's something wrong with the friend list, and that I believe is the use of nicknames instead of idents with that list; as I pointed out earlier, because as you know, nicknames are dynamic and idents are static, so we need to have the static to determine the dynamic. The ident would lead us to the nickname, exactly as with the ignore list.

When we log in, we can see a special Red symbol next to the nicknames of blocked players in the full list, without interacting with them, so if the client can tell whom I blocked by their idents, it should be able to tell who my friends are! also by thier idents.

On 4/25/2022 at 1:22 PM, Devo1929 said:

It would be an expensive process for everyone's client, because we would have to do it on every single inbound message and the longer that player list is, the more processing/expensive it would be to find the linked player. IRC messages are flying around in the background of the client for EVERYTHING. Doing it for every one of those messages would simply be an expensive process.

We don't need to rely on messages, and we also don't need the client to do a compare to all players online, we just want it to check the idents that are supposed to be stored in the "friend_list" and let us know if the owners of those idents are active (if their idents have already been captured, after joining a game lobby) or not:
"Just compare my list to your list. Are these idents currently active? If so, give me their last chosen nicknames."

Doing a compare on that relatively short list (only the friend list, not all players) wouldn't be an expensive process, I suppose; but if it is, at least make it possible to update the nicknames of your friends when you check on them.

On 1/27/2022 at 4:41 PM, Devo1929 said:

when the lobby loads, it requests all users that are currently online and this request does NOT include the User Ident, only the Nicknames. There is a way to get additional information for all users that are logged in, but it replies with MUCH more data than just the User Ident that we would need to make this work. In fact it includes so much data that in the past, the client was having to deal with "IRC Flooding" errors where users were then being banned from IRC (not the client application itself...). As a result, the quick solution was the client application had to change to the basic "IRC get all online users" request to return only nicknames.

OK. so, two things:
1- Please modify the friend list to make it store idents instead of nicknames.
2- Let the "IRC get all online users" request return idents as well, without any extra information. All we need right now is the idents, and the problem would be solved, hopefully.

Edited by Sam-I-am
Link to comment
Share on other sites

On 4/25/2022 at 10:57 PM, Sam-I-am said:

They do that all the time, that's the problem 😃

I just want to know why does the "friend_list" (\Client\friend_list) contain nicknames while the "ignore_list" contains idents. Why don't they both use idents?? That's the issue. It's just a mistake that should be corrected.

That's because the friend list does not store the captured idents, only the nicknames! That's the whole problem.

The friend list should have the idents of the players, and when the idents of those players are captured by the client, I want it to show me their current nicknames:
"Mr. Client, please check to see if my friends' IDs are on your list. Update their nicknames if and when their idents are captured. Thank you." 😀

Another thing, when we use the "last seen" feature (!seen nickname); it gives us the exact time to the second, while the user in question is not online at the time, meaning without interacting with that user in anyway, so how does the client know exactly when a user was online the last time? I suppose that the "log out" action in itself is a signal, so the client knows when users log out but doesn't know when they log in?? The "log in" action should inform the client when users go online, and I suppose it does, but there's something wrong with the friend list, and that I believe is the use of nicknames instead of idents with that list; as I pointed out earlier, because as you know, nicknames are dynamic and idents are static, so we need to have the static to determine the dynamic. The ident would lead us to the nickname, exactly as with the ignore list.

When we log in, we can see a special Red symbol next to the nicknames of blocked players in the full list, without interacting with them, so if the client can tell whom I blocked by their idents, it should be able to tell who my friends are! also by thier idents.

We don't need to rely on messages, and we also don't need the client to do a compare to all players online, we just want it to check the idents that are supposed to be stored in the "friend_list" and let us know if the owners of those idents are active (if their idents have already been captured, after joining a game lobby) or not:
"Just compare my list to your list. Are these idents currently active? If so, give me their last chosen nicknames."

Doing a compare on that relatively short list (only the friend list, not all players) wouldn't be an expensive process, I suppose; but if it is, at least make it possible to update the nicknames of your friends when you check on them.

OK. so, two things:
1- Please modify the friend list to make it store idents instead of nicknames.
2- Let the "IRC get all online users" request return idents as well, without any extra information. All we need right now is the idents, and the problem would be solved, hopefully.

As much as I love the back and forth and as easy as you obviously believe it would be, apparently I'm simply not explaining it well enough to spell out the complications, the complexities and the outright impossible aspects.. Alas, my lack of clear explanation does not make it any easier or even possible in some situations. We will continue to look into ways to try and implement this in a way that won't crash the entirety of our communication with IRC, which is what the request of "Let the "IRC get all online users" request return idents as well" has done in the past. You don't get to pick and choose what data comes back with the two very specific IRC requests we have access to. One contains the nicks of each person (which we currently use). One contains a ton of additional user information which was used until it caused IRC floods and was kicking players out of lobbies left and right. It's not a "mistake". It's completely intentional and for good reason.

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...