Skip to content
This repository has been archived by the owner on Mar 5, 2024. It is now read-only.

Spamming Votekick when timelimit has not ran out #168

Closed
Ignited550 opened this issue Jul 29, 2020 · 24 comments · Fixed by #266
Closed

Spamming Votekick when timelimit has not ran out #168

Ignited550 opened this issue Jul 29, 2020 · 24 comments · Fixed by #266
Assignees
Labels
Priority: High After critical issues are fixed, these should be dealt with before any further issues. Type: Enhancement New feature or request

Comments

@Ignited550
Copy link

Sometimes when 2 cheaters are on your team, the side of your screen will get spammed with "you cant votekick yet" I once even got kicked for issuing too many commands

@empirebuilder1
Copy link

Official Casual servers have a votekick timeout of 2 minutes, if a kick is successfully called the tool needs to pause the votekick commands at least that long. Is there a way for the tool to determine when it has successfully called a votekick vs when the command was sent but denied by the server?

@Ignited550
Copy link
Author

Official Casual servers have a votekick timeout of 2 minutes, if a kick is successfully called the tool needs to pause the votekick commands at least that long. Is there a way for the tool to determine when it has successfully called a votekick vs when the command was sent but denied by the server?

If the votekick is not successful, it still requires a timeout

@PazerOP
Copy link
Owner

PazerOP commented Jul 30, 2020

The main reason this hasn't been implemented yet is because I didn't get to it before feature freeze for v1.1. I'll prioritize it for the next version though.

@PazerOP PazerOP self-assigned this Jul 30, 2020
@PazerOP PazerOP added Priority: High After critical issues are fixed, these should be dealt with before any further issues. Type: Enhancement New feature or request labels Jul 30, 2020
@PazerOP PazerOP added this to the 1.2 milestone Jul 30, 2020
@PazerOP
Copy link
Owner

PazerOP commented Jul 30, 2020

This is still an important issue, I think. Issues should only be closed if the tasks associated with them are completed, or the issue is invalid somehow.

@PazerOP PazerOP reopened this Jul 30, 2020
@Ignited550
Copy link
Author

Can I safely close this now?

@PazerOP
Copy link
Owner

PazerOP commented Aug 10, 2020

No, this is not implemented yet. I will close this when it is fixed.

@kotx
Copy link

kotx commented Aug 24, 2020

A setting for "votekick call cooldown" could be added.

@107zxz
Copy link

107zxz commented Sep 9, 2020

If its a constant 2 minutes, some manual delay could be implemented, being the 2 minutes plus the time for a votekick to time out.

@Kenajcrap
Copy link

Kenajcrap commented Sep 9, 2020

If its a constant 2 minutes, some manual delay could be implemented, being the 2 minutes plus the time for a votekick to time out.

I can see this being implemented as a "sleep" command, when you see that your votekick didn't succeed you could press a bind that would time 2 minutes before attempting a new votekick. Pressing the bind again while the timer is still counting would "wake" BD prematurely, which I can see being used in the event you switch sessions early or accidentally press the bind.

@kotx
Copy link

kotx commented Sep 10, 2020

If its a constant 2 minutes, some manual delay could be implemented, being the 2 minutes plus the time for a votekick to time out.

I can see this being implemented as a "sleep" command, when you see that your votekick didn't succeed you could press a bind that would time 2 minutes before attempting a new votekick. Pressing the bind again while the timer is still counting would "wake" BD prematurely, which I can see being used in the event you switch sessions early or accidentally press the bind.

This doesn't seem like something that should be done manually. I think the delay should be customizable via a setting. A tool like this should require minimal user interaction IMHO. I usually just leave this running in the background when I play the game.

@Kenajcrap
Copy link

I can see this being implemented as a "sleep" command, when you see that your votekick didn't succeed you could press a bind that would time 2 minutes before attempting a new votekick. Pressing the bind again while the timer is still counting would "wake" BD prematurely, which I can see being used in the event you switch sessions early or accidentally press the bind.

This doesn't seem like something that should be done manually. I think the delay should be customizable via a setting. A tool like this should require minimal user interaction IMHO. I usually just leave this running in the background when I play the game.

I agree with the minimal user interaction thing, I was thinking about it while typing my comment, however then we come back to the same problem, there is no known way to detect the current status of a votekick (if yours went through, if you are on cooldown, if there is another one going on at the same time so yours errors out) with the log files. And on my mind any delay that doesn't feel "spammy" when i'm on cooldown will be too slow if that isn't the case. The only ways I can see this being solved is a manual action by the player or someone figuring out a non-intrusive way to detect the status of votekicks. In the future, if we can interact with the program by binds like is being suggested on #205, this interaction would be less cumbersome, but of couse, an automatic solution would be much better.

@107zxz
Copy link

107zxz commented Sep 10, 2020

As I said in my original suggestion, just make it the cooldown time + the time for a vote to time out. That means even if the vote passes super quickly you'll only be losing ~15 seconds

@Kenajcrap
Copy link

Kenajcrap commented Sep 10, 2020

As I said in my original suggestion, just make it the cooldown time + the time for a vote to time out. That means even if the vote passes super quickly you'll only be losing ~15 seconds

that doesn't account for the times when another vote is already in progress when yours is called, which happens a lot considering many bots call a vote right after joining. So in that case the BD would wait more than 2 minutes for no reason before trying a second time

@ClusterConsultant
Copy link
Collaborator

ClusterConsultant commented Sep 13, 2020

Without some kind of wild and fragile logic I don't see how this would be possible without demo parsing. I'm going to remove this from the 1.2 milestone since demo parsing is out of scope for this dev cycle. This is still a top issue which is why it will remain a high priority.

@RedxYeti
Copy link

RedxYeti commented Jan 2, 2021

Pazer stated in my duplicate of this issue that there's some technical issues with this bug because you cant tell in console who started the vote/who its against. I have a slightly crude idea that may work for a fix.

When the bot detector sends out the command to attempt the vote kick, you could have a generic command go with it, like a help command, sort of like a ping. (or maybe even just the auto generated password, which would return as unknown command, but then it could see if your bot detector started the vote) Then if the bot detector sees the pong of that generic command and vote kick started, it can start a 2 minute cooldown and you can attach anything else to that such as chat messages warning there's still a cheater.

It wouldn't be perfect but it could be a temporary band aid.

@ClusterConsultant
Copy link
Collaborator

Whether or not the attempt to start a votekick is successful the companion command would be passed to console.

@RedxYeti
Copy link

RedxYeti commented Jan 2, 2021

Whether or not the attempt to start a votekick is successful the companion command would be passed to console.

But if the bot detector could see a vote started and the companion command at the same time, then it would start the cooldown. if it didn't see both at the same time it would just start sending attempts to start a vote again.

I feel like the chances are pretty low that someone else starts a vote at the same time as the detector, before the detector can verify it started the vote with the companion command. So I guess I'm saying: any vote started + companion>start cooldown

(I'm obviously no expert on how this works and I'm not trying to argue, just trying to help.)

@kotx
Copy link

kotx commented Jan 2, 2021

Pazer stated in my duplicate of this issue that there's some technical issues with this bug because you cant tell in console who started the vote/who its against. I have a slightly crude idea that may work for a fix.

When the bot detector sends out the command to attempt the vote kick, you could have a generic command go with it, like a help command, sort of like a ping. (or maybe even just the auto generated password, which would return as unknown command, but then it could see if your bot detector started the vote) Then if the bot detector sees the pong of that generic command and vote kick started, it can start a 2 minute cooldown and you can attach anything else to that such as chat messages warning there's still a cheater.

It wouldn't be perfect but it could be a temporary band aid.

The tool knows when it sends a votekick, right? There's no need to send a chat message to remind itself that it has sent a vote, if that's what you're suggesting.

@ClusterConsultant
Copy link
Collaborator

But if the bot detector could see a vote started

It has no way of knowing that. The only thing the tool knows is when a user joins a lobby, when it calls a votekick, and when a user leaves a lobby.

I feel like the chances are pretty low that someone else starts a vote at the same time as the detector

They are actually incredibly high, both users and the tool try to rid a lobby of bots as quickly as possible. Not to mention the other team and other TF2BD users. Also we do not know how long a vote would take to complete. That time can range significantly.

The tool knows when it sends a votekick, right? There's no need to send a chat message to remind itself that it has sent a vote, if that's what you're suggesting.

Correct, this would be equivalent to just starting a timer whenever the command is sent.

@RedxYeti
Copy link

RedxYeti commented Jan 2, 2021

The tool knows when it sends a votekick, right? There's no need to send a chat message to remind itself that it has sent a vote, if that's what you're suggesting.

I'm trying to find a way to verify your bot detector sent the vote start (of the vote that's currently happening), due to the lack of information in the console during votes. Looks like my idea won't work though.

@kotx
Copy link

kotx commented Jan 2, 2021

The tool knows when it sends a votekick, right? There's no need to send a chat message to remind itself that it has sent a vote, if that's what you're suggesting.

I'm trying to find a way to verify your bot detector sent the vote start (of the vote that's currently happening), due to the lack of information in the console during votes. Looks like my idea won't work though.

Can't really verify a votekick (sent by you) with a chat message (sent by you). The detector itself knows it has started a vote. However, a chat message could help for communication between bot detectors to know that another bot detector has started a vote.

@PazerOP
Copy link
Owner

PazerOP commented Jan 2, 2021

Thanks for all the brainstorming going on here. This actually does give me a few ideas that could be integrated into an upcoming version of tf2bd without too much work.

You're right that the tool does indeed know if we were able to start a votekick. There is a unique usermessage type that gets sent to the player if they tried to call a vote, and it failed to start for any reason. So the absense of that usermessage indicates that a vote was successfully started. The end of that vote can start a 2 minute timer before additional votes are attempted.

@PazerOP PazerOP modified the milestones: >=1.4, 1.3 Jan 19, 2021
PazerOP added a commit that referenced this issue Jan 19, 2021
…on cooldown). This only handles the most common case (tool calls vote, vote succeeds/fails, we wait for our two minutes to be up). Simple exponential backoff should probably be implemented to improve the remaining cases where we are getting CallVoteFailed over and over again.
@PazerOP PazerOP linked a pull request Jan 19, 2021 that will close this issue
@ClusterConsultant ClusterConsultant unpinned this issue Jan 21, 2021
@ClusterConsultant
Copy link
Collaborator

The attempted fix here was simply non-viable. Usermessages are just waaaay to unreliable to do anything with. Likely is going to have to wait until demo support again

@PazerOP
Copy link
Owner

PazerOP commented Mar 5, 2021

A bandaid fix was applied in 4717773. A hud mod (courtesy of ClusterConsultant, moeb, CrazyGunman) simply hides the "vote failed" popup, and mutes the sound. This resolves all the symptoms of this issue.

Given the failure that was #266, I think this is probably as good as it's going to get.

Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
Priority: High After critical issues are fixed, these should be dealt with before any further issues. Type: Enhancement New feature or request
Projects
None yet
Development

Successfully merging a pull request may close this issue.

8 participants