Skip to content

Commit a911266

Browse files
authored
Merge pull request #2375 from sopel-irc/bot.connection_registered-property
bot, irc, coretasks: more robust `bot.connection_registered` value
2 parents cff45f2 + 6cdaaaa commit a911266

File tree

4 files changed

+19
-4
lines changed

4 files changed

+19
-4
lines changed

sopel/bot.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -976,6 +976,8 @@ def _nick_blocked(self, nick: str) -> bool:
976976
def _shutdown(self) -> None:
977977
"""Internal bot shutdown method."""
978978
LOGGER.info("Shutting down")
979+
# Proactively tell plugins (at least the ones that bother to check)
980+
self._connection_registered = False
979981
# Stop Job Scheduler
980982
LOGGER.info("Stopping the Job Scheduler.")
981983
self._scheduler.stop()

sopel/coretasks.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -275,7 +275,7 @@ def startup(bot, trigger):
275275
bot.say(privmsg, bot.config.core.owner)
276276

277277
# set flag
278-
bot.connection_registered = True
278+
bot._connection_registered = True
279279

280280
# handle auth method
281281
auth_after_register(bot)

sopel/irc/__init__.py

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,7 @@ def __init__(self, settings: Config):
7474

7575
self.backend: Optional[AbstractIRCBackend] = None
7676
"""IRC Connection Backend."""
77-
self.connection_registered = False
77+
self._connection_registered = False
7878
"""Flag stating whether the IRC Connection is registered yet."""
7979
self.settings = settings
8080
"""Bot settings."""
@@ -92,6 +92,13 @@ def __init__(self, settings: Config):
9292
self.wantsrestart = False
9393
self.last_raw_line = '' # last raw line received
9494

95+
@property
96+
def connection_registered(self) -> bool:
97+
return (
98+
self.backend is not None
99+
and self.backend.is_connected()
100+
and self._connection_registered)
101+
95102
@property
96103
def nick(self) -> identifiers.Identifier:
97104
"""Sopel's current nick.
@@ -413,6 +420,7 @@ def change_current_nick(self, new_nick: str) -> None:
413420

414421
def on_close(self) -> None:
415422
"""Call shutdown methods."""
423+
self._connection_registered = False
416424
self._shutdown()
417425

418426
def _shutdown(self) -> None:
@@ -646,6 +654,7 @@ def quit(self, message: Optional[str] = None) -> None:
646654
if self.backend is None:
647655
raise RuntimeError(ERR_BACKEND_NOT_INITIALIZED)
648656

657+
self._connection_registered = False
649658
self.backend.send_quit(reason=message)
650659
self.hasquit = True
651660
# Wait for acknowledgment from the server. Per RFC 2812 it should be

test/test_coretasks.py

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -222,7 +222,9 @@ def test_execute_perform_send_commands(mockbot):
222222
]
223223

224224
mockbot.config.core.commands_on_connect = commands
225-
mockbot.connection_registered = True
225+
# For testing, pretend connection already happened
226+
mockbot.backend.connected = True
227+
mockbot._connection_registered = True
226228

227229
coretasks._execute_perform(mockbot)
228230
assert mockbot.backend.message_sent == rawlist(*commands)
@@ -234,7 +236,9 @@ def test_execute_perform_replaces_nickname(mockbot):
234236
sent_command = 'MODE {} +Xxw'.format(mockbot.config.core.nick)
235237

236238
mockbot.config.core.commands_on_connect = [command, ]
237-
mockbot.connection_registered = True # For testing, simulate connected
239+
# For testing, pretend connection already happened
240+
mockbot.backend.connected = True
241+
mockbot._connection_registered = True
238242

239243
coretasks._execute_perform(mockbot)
240244
assert mockbot.backend.message_sent == rawlist(sent_command)

0 commit comments

Comments
 (0)