与 IRC 客户端通信¶
与客户端通信是 IRC 服务器的全部意义,因此您需要确保正确执行此操作。今天,我们将探讨如何接收来自客户端的消息以及如何向客户端发送消息。
在 Twisted 中表示客户端¶
Twisted IRC 中的用户表示为 the IRC class
的子类。这适用于您的 Factory 类协议。它还将为您提供 IRC 功能(例如自动解析传入行),而无需您自己实现它们。本指南的其余部分假设此设置。
发送消息¶
使用用户对象的 sendMessage
方法向用户发送消息。
发送基本消息¶
向用户发送消息的基本语法如下
user.sendCommand("COMMAND", (param1, param2), server.name)
prefix 关键字参数是可选的,可以省略它来发送没有前缀的消息(例如,ERROR 命令)。命令是您计划发送的任何命令,例如“PRIVMSG”、“MODE”等。命令后面的所有参数都是您要为命令发送的参数。如果最后一个参数需要以冒号开头(因为它包含空格,例如 PRIVMSG 消息),您必须自己将冒号添加到参数的开头。例如:.. code-block:: python
user.sendCommand(“PRIVMSG”, (user.nickname, “:{}”.format(message)), sendingUser.hostmask)
接收消息¶
Twisted Words 将处理接收消息并将行解析为标记。解析后的消息通过用户的 handleCommand
方法传递到您的命令中。
处理命令¶
默认的 IRC handleCommand 方法在收到命令 COMMAND
时调用 irc_COMMAND
方法,如果未定义接收到的命令的方法,则调用 irc_unknown。
from twisted.words.protocols import irc
class IRCUser(irc.IRC):
# possibly other definitions here
def irc_unknown(self, prefix, command, params):
self.sendCommand(irc.ERR_UNKNOWNCOMMAND, (command, ":Unknown command"), server.name)
def irc_PRIVMSG(self, prefix, params):
# do some stuff to handle PRIVMSG for your server's setup
# lots of other command definitions
如果您有一个不允许您执行此操作的服务器设置(例如模块化服务器程序),您当然可以覆盖 handleCommand 函数以将命令路由到您自己的处理程序。