home
·
contact
·
privacy
projects
/
ircplom
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
|
inline
| side by side (parent:
1bcbbb2
)
On connection collect listing of server capabilities.
master
author
Christian Heller
<c.heller@plomlompom.de>
Sat, 26 Jul 2025 19:48:13 +0000
(21:48 +0200)
committer
Christian Heller
<c.heller@plomlompom.de>
Sat, 26 Jul 2025 19:48:13 +0000
(21:48 +0200)
ircplom/irc_conn.py
patch
|
blob
|
history
diff --git
a/ircplom/irc_conn.py
b/ircplom/irc_conn.py
index 014ea0c437e7b2ef55e84d918200b97ff86a2d72..4627988cd84d435753e070e33fa109b83eb84c28 100644
(file)
--- a/
ircplom/irc_conn.py
+++ b/
ircplom/irc_conn.py
@@
-152,6
+152,7
@@
class _ConnectedEvent(ClientEvent):
def affect(self, target: 'Client') -> None:
target.log(msg='# connected to server', chat=CHAT_GLOB)
def affect(self, target: 'Client') -> None:
target.log(msg='# connected to server', chat=CHAT_GLOB)
+ target.send(IrcMessage(verb='CAP', params=('LS', '302')))
target.send(IrcMessage(verb='USER', params=(getuser(), '0', '*',
target.realname)))
target.send(IrcMessage(verb='NICK', params=(target.nickname,)))
target.send(IrcMessage(verb='USER', params=(getuser(), '0', '*',
target.realname)))
target.send(IrcMessage(verb='NICK', params=(target.nickname,)))
@@
-200,6
+201,7
@@
class Client(ABC, ClientQueueMixin):
self._hostname = hostname
self._socket: Optional[socket] = None
self._recv_loop: Optional[Loop] = None
self._hostname = hostname
self._socket: Optional[socket] = None
self._recv_loop: Optional[Loop] = None
+ self._caps: list[str] = []
self.id_ = uuid4()
self.assumed_open = False
self.realname = realname
self.id_ = uuid4()
self.assumed_open = False
self.realname = realname
@@
-229,6
+231,16
@@
class Client(ABC, ClientQueueMixin):
Thread(target=connect, daemon=True, args=(self,)).start()
Thread(target=connect, daemon=True, args=(self,)).start()
+ def set_caps(self, final_line: bool, caps: list[str]) -> None:
+ 'Record server capabilities.'
+ finished_marker = '\0'
+ if self._caps[-1:] == [finished_marker]:
+ self._caps.clear()
+ self._caps += caps
+ if final_line:
+ self._caps += [finished_marker]
+ self.log(f'# server capabilities: {self._caps[:-1]}')
+
@abstractmethod
def log(self, msg: str, chat: str = '') -> None:
'''Write msg into log of chat, whatever shape that may have.
@abstractmethod
def log(self, msg: str, chat: str = '') -> None:
'''Write msg into log of chat, whatever shape that may have.
@@
-256,8
+268,7
@@
class Client(ABC, ClientQueueMixin):
if first_run or nick_confirmed != self.nick_confirmed:
self.nick_confirmed = nick_confirmed
if not first_run:
if first_run or nick_confirmed != self.nick_confirmed:
self.nick_confirmed = nick_confirmed
if not first_run:
- self.log(
- msg=f'{prefix} {"" if nick_confirmed else "un"}confirmed')
+ self.log(f'{prefix} {"" if nick_confirmed else "un"}confirmed')
def close(self) -> None:
'Close both recv Loop and socket.'
def close(self) -> None:
'Close both recv Loop and socket.'
@@
-317,3
+328,9
@@
class _RecvEvent(ClientEvent, PayloadMixin):
target.update_login(nickname=msg.params[0], nick_confirmed=True)
elif msg.verb == 'PRIVMSG':
target.log(msg=str(msg.params), chat=msg.source)
target.update_login(nickname=msg.params[0], nick_confirmed=True)
elif msg.verb == 'PRIVMSG':
target.log(msg=str(msg.params), chat=msg.source)
+ elif msg.verb == 'CAP' and msg.params[1] == 'LS':
+ final_line = msg.params[2] != '*'
+ target.set_caps(final_line=final_line,
+ caps=msg.params[-1].strip().split())
+ if final_line:
+ target.send(IrcMessage(verb='CAP', params=('END',)))