Skip to content

Commit b4a9bee

Browse files
committed
Fix ratelimit errors when using fast refreshing applications
1 parent c543909 commit b4a9bee

3 files changed

Lines changed: 12 additions & 3 deletions

File tree

bashbot/core/settings.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@ def load(self, path=DEFAULT_CONFIG_PATH):
3535
self.add_default('terminal.delete_messages', True)
3636
self.add_default('terminal.submit_by_default', True)
3737
self.add_default('terminal.interactive_by_default', False)
38+
self.add_default('terminal.max_refresh_frequency', 0.5)
3839

3940
# [terminal.interactive]
4041
self.add_default('terminal.interactive.delete_messages', True)

bashbot/terminal/terminal.py

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,8 @@ def __init__(self, name: str,
4545

4646
self.fd = None
4747
self.content = None
48-
self.content_update = False
48+
49+
self.refresh_timer = None
4950

5051
def open(self):
5152
pid, self.fd = os.forkpty()
@@ -69,7 +70,14 @@ def close(self):
6970
os.close(self.fd)
7071

7172
def refresh(self, loop=None):
72-
execute_async(loop or asyncio.get_event_loop(), self.on_change(self, self.content))
73+
if self.refresh_timer and self.refresh_timer.is_alive():
74+
return
75+
76+
interval = settings().get('terminal.max_refresh_frequency')
77+
self.refresh_timer = threading.Timer(interval, lambda: {
78+
execute_async(loop or asyncio.get_event_loop(), self.on_change(self, self.content))
79+
})
80+
self.refresh_timer.start()
7381

7482
def send_input(self, data: str):
7583
if self.state != TerminalState.OPEN:
@@ -100,7 +108,6 @@ def __monitor_pty(self, loop):
100108
while output:
101109
self.stream.feed(output)
102110
self.content = '\n'.join(self.screen.display)
103-
self.content_update = True
104111

105112
if self.on_change:
106113
self.refresh(loop)

config.toml.example

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ delete_on_close = false
1717
delete_messages = true
1818
submit_by_default = true
1919
interactive_by_default = false
20+
max_refresh_frequency = 0.5
2021

2122
[other]
2223
check_for_updates = true

0 commit comments

Comments
 (0)