一个轻量级的irc框架。

miniirc的Python项目详细描述


微型电路

python 3.4+在pypi上可用。license:mit

一个简单的IRC客户端框架。

要安装minirc,只需以根用户身份运行pip3 install minirc

参数

irc=miniirc.IRC(ip,port,nick,channels=None,*,ssl=None,ident=None,realname=None,persist=True,debug=False,ns_identity=None,auto_connect=True,ircv3_caps=set(),quit_message='I grew sick and died.',ping_interval=60,verify_ssl=True)

注意*之前的所有内容都是位置参数。

<表><广告>参数 说明 < /广告><正文>IP要连接到的IRC服务器的IP/主机名。端口要连接到的端口。尼克 机器人的昵称。频道连接时要加入的频道。它可以是包含字符串(列表、集合等)的iterable,也可以是(从v1.4.0开始)字符串。尝试用一个字符串连接多个频道会产生意外的副作用,在minirc v1.5.0之前应该避免这种情况。ssl启用TLS/SSL。如果none,则禁用TLS/SSL,除非端口是6697ident要使用的标识,默认为nick域名要使用的域名,默认也为nick持久化是否自动重新连接。调试启用调试模式,打印所有IRC消息。如果希望将调试消息写入文件而不是打印到stdout,则此对象也可以是类文件对象(启用了写入模式)或函数(例如logging.debug)。ns_标识要使用的nickserv帐户(<;user>;<;password>;)。这可以是自minirc v1.2.0以来的元组或列表。自动连接直接运行.connect()ircv3_caps要请求的附加IRCV3功能的集合()。如果指定了ns_identity,则会自动添加sasl。连接模式连接时要设置的umodes模式字符串(例如'+b')。退出消息设置默认退出消息。每次退出时,都可以使用irc.disconnect()ping_间隔如果在这段时间内没有发送或接收到任何数据包,minirc将发送一个ping,如果没有发送回复,在相同的超时之后,minirc将尝试重新连接。设置为none禁用。验证SSL验证TLS/SSL证书。不建议禁用此功能。如果证书验证有问题,请尝试先运行pip3 install certifi

唯一必需的参数是ipportnick

功能

<表><广告>函数说明 < /广告><正文>更改解析器(parser=…)参见消息解析器部分f或文档。connect()如果尚未连接,则连接到IRC服务器。ctcp(target,*msg,reply=false,tags=none)向目标发送请求或回复 调试(…)调试,如果启用调试模式,则调用print(…)断开连接(msg=…,*,auto_reconnect=false)断开与IRC服务器的连接。自动重新连接将被自身覆盖。如果设置为,则保持处理程序(…)事件处理程序,有关详细信息,请参见处理程序。me(目标,*msg,tags=none)发送/mectcp action)到target消息(target,*msg,tags=none)发送privmsgtarget注意(target,*msg,tags=none)目标发送通知 引号(*msg,force=false,tags=none)向IRC发送原始消息,使用force=true在断开连接时发送。不要在一个irc.quote()中发送多个命令,因为换行符将被剥离并作为一个命令发送。tags参数允许您添加带有ircv3客户机标记的dict(全部从+开始),并且不会发送到不支持客户机标记的irc服务器。

注意,如果force=falseonirc.quote(或调用irc.msgetc),则 minirc未连接,将临时存储消息,然后发送 连接minirc后。如果minirc是 完全断开连接(irc.connectednone)。

变量

不应在minirc.py

之外更改这些变量。 <表><广告>变量说明 < /广告><正文>活动帽已成功与IRC服务器协商的IRCV3功能的。断开连接时为空。已连接布尔值(或none),true当miniIRC连接时,false当miniIRC连接时,none当miniIRC未连接时。isupport1.1.0中的新功能。adict具有isupport发送给客户端的消息中的值(不一定是字符串)。msglen在1.1.0中新增。消息的最大长度(字节)(包括\r\n)。如果服务器支持oragono.io/maxline-2功能,则会自动更改此设置。尼克 当前昵称。

传递给minirc.irc的以下参数也可用:ip端口通道SSL标识实名持久连接模式退出消息ping间隔验证SSL

处理程序

minirc.handlerminirc.cmdhandler是添加 事件处理程序列表的函数。此列表中的函数在其 接收到各自的IRC事件时拥有线程。处理程序可能 对现有的每个irc对象(minirc.handler)或仅对 特定的IRC对象(irc.handler)。

处理程序的基本语法如下,其中*events是调用事件列表(privmsg通知,等等)。

importminiirc@miniirc.Handler(*events,colon=True)defhandler(irc,hostmask,args):# irc:      An 'IRC' object.# hostmask: A 'hostmask' object.# args:     A list containing the arguments sent to the command. Everything#             following the first `:` in the command is put into one item#             (args[-1]). If "colon" is "False", the leading ":" (if any)#             is automatically removed. Setting this to False is probably#             a good idea to prevent unexpected side effects.pass

使用处理程序时的建议:

  • 如果不需要对minirc<;1.4.0的支持,并且正在分析最后一个 参数,强烈建议将colon设置为false。如果 冒号参数被忽略,它默认为,但是这可能会改变 如果/当minirc v2.0.0发布时。
  • 尽管handlercmdhandler当前接受任何可以 转换为字符串后,每个事件都会在内部转换为字符串。
  • 当不需要时,不指定参数 防止创建冗余的dict
  • 要将处理程序添加到特定的irc对象,而不是现有的每个对象, 请改用irc.handlerirc.cmdhandler。如果要创建 botclient类并自动向irc对象添加处理程序 内部创建,请参见 使现有函数处理程序变为" rel="nofollow">使现有函数处理程序变为

主机掩码对象

主机掩码是格式为('user','ident','hostname')的元组。如果ident 并且主机名不是从服务器发送的,它们将用 上一个值。如果在没有主机掩码的情况下接收到命令,则所有主机掩码 元素将设置为命令的名称。但这是不赞成的, 如果/当minirc v2.0.0被释放时,hostmask元素将被设置为 空字符串。

使现有函数处理程序

可以创建现有函数处理程序(例如类实例方法) 使用irc.handler(*events)(handler_function)。你可能不想用 minirc.handler对于类实例方法,因为这将创建一个处理程序 每个irc对象都会触发它。

您还可以轻松地添加同一类型的多个处理程序:

add_handler=irc.Handler('PRIVMSG')add_handler(handler_1)add_handler(self.instance_handler)

如果要创建bot(或client)类并添加 不创建全局进程范围处理程序或 为每个类实例创建包装函数。

IRCV3支持

IRCV3标签

如果希望处理程序支持ircv3消息标记,则需要添加 ircv3=true处理程序命令处理程序装饰程序。您需要添加 标记主机掩码之后设置函数的参数。IRCV3标记被发送到 处理程序为dicts,值为字符串或true

minirc将自动取消转义ircv3标记值。

importminiirc@miniirc.Handler(*events,colon=False,ircv3=True)defhandler(irc,hostmask,tags,args):pass

IRCV3功能

在使用处理程序连接之前,可以处理ircv3功能。 在这里调用的任何irc.quote()上都必须使用force=true 调用时,minirc可能尚未完全连接。不要使用冒号参数 当创建这些处理程序以避免意外的副作用时。

importminiirc@miniirc.Handler('IRCv3 my-cap-name')defhandler(irc,hostmask,args):# Process the capability here# IRCv3.2 capabilities:#   args = ['my-cap-name', 'IRCv3.2-parameters']# IRCv3.1 capabilities:#   args = ['my-cap-name']# Remove the capability from the processing list.irc.finish_negotiation(args[0])# This can also be 'my-cap-name'.

自定义消息分析器

如果要连接的irc服务器支持非标准消息语法,则可以 创建自定义消息分析器。使用原始消息调用(作为str)和 可以返回none忽略消息,也可以返回4元组(cmd,hostmask,tags,args) 然后发送给处理程序。这个4元组中的项应该相同 按处理程序所需的项键入(并且cmd应该是字符串)。

消息分析器示例

此消息解析器使普通解析器允许将~作为ircv3标记前缀字符。

importminiircdefmy_message_parser(msg):ifmsg.startswith('~'):msg='@'+msg[1:]returnminiirc.ircv3_message_parser(msg)

更改消息分析器

要更改消息分析器,请可以使用irc.change_parser(func=…)。如果func不是 指定时,它将默认为内置解析器。您只能更改消息分析器 动态(例如在ircv3 cap处理程序中)。如果需要更改消息分析器 在连接之前,您可以禁用自动连接,然后对其进行更改。

irc=miniirc.IRC(...,auto_connect=False)irc.change_parser(my_message_parser)irc.connect()

处理多个事件

1.3.0版的新功能。

如果要处理多个事件和/或能够获取 事件被触发时,可以使用irc.cmdhandler。这将通过一个额外的 命令handler函数的参数(介于irchostmask之间) 包含带有命令名的字符串(例如privmsg)。

捕获所有处理程序

请不要使用这些,除非没有其他选择。

如果要处理每个事件,可以使用catch all处理程序。创造 这样,您可以在不使用任何参数的情况下调用irc.cmdhandler()。注意这个 连接时将多次调用处理程序(一旦连接)。

没有参数就不能调用irc.handler()

示例

importminiirc# Not required, however this makes sure miniirc isn't insanely outdated.assertminiirc.ver>=(1,4,1)@miniirc.Handler('PRIVMSG','NOTICE',colon=True)defhandler(irc,hostmask,args):print(hostmask[0],'sent a message to',args[0],'with content',args[1])# nickname sent a message to #channel with content :Hello, world!@miniirc.CmdHandler('PRIVMSG','NOTICE',colon=False)defcmdhandler(irc,command,hostmask,args):print(hostmask[0],'sent a',command,'to',args[0],'with content',args[1])# nickname sent a PRIVMSG to #channel with content Hello, world!

每当机器人收到privmsg通知时,这将打印一行。

其他功能

minirc提供以下帮助程序功能:

<表><广告>名称说明 < /广告><正文>minirc.get_ca_certs()如果安装了certifi,则运行certifi.where(),否则返回noneminirc.ircv3_消息分析器(msg)默认ircv2/ircv3消息解析器,返回cmd、hostmask、tags、argsminirc.ver包含版本信息的元组。迷你版可以更改CTCP版本回复。

版本编号系统应类似于 但是,在可能的情况下,当主要版本 改变。补丁版本号可以而且将迅速增加,因为minirc是 写这篇文章的时间)正在积极开发中。

python版本支持

  • python 2不工作,而且(可能)永远不会与minirc一起工作。如果你 必须使用python 2,您可以尝试手动移植minirc。
  • Python3.3及以下版本可能无法工作,除非 它们很琐碎。
  • Python3.4虽然不推荐使用,但是应该可以工作,但是它没有经过测试 尽可能彻底。
  • Python3.5及更高版本应与MiniIRC的最新稳定版本一起使用。

如果Python3.4或更新版本中存在错误,请打开问题或拉取 请求访问github gitlab

如果您使用的是Python3.4或更早版本的Python,我强烈建议 建议更新。

迷你餐厅

如果您想要更高级的功能,例如用户跟踪,可以使用 minirc_extrasgithubgitlab)。注意minirc_extras 目前仍处于测试阶段,未来将有突破性的API更改。

折旧

minirc v2.0.0可能永远不会发布,但是如果它是以下中断 将进行更改:

  • 仅内部属性irc.handlersirc.sockirc.sendq (请不要使用这些)将被重命名。同样,请不要使用这些。
  • irc.ns_identity可以存储为元组而不是字符串,例如 ('username','password with spaces')而不是 "带空格的用户名密码"。这两种格式目前都被接受,并且 将在ns_identity关键字参数中接受。
  • python 3.4支持可能会被删除。如果您使用的是Python3.4,那么 建议更新到最新版本的python。
  • handlercmdhandler的冒号关键字参数将默认为 false而不是true
  • 未指定的主机掩码将是空字符串,而不是命令。不要 如果可能的话,可以依赖这个"特性",如果可以的话,可以忽略hostmask 不需要。

工作示例/实现

下面是一些使用minirc的(开源)机器人程序的列表,按字母顺序排列:

要将您自己的bot/client添加到此列表中吗?在上打开问题 githubgitlab

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java只能导入一个类型。通用域名格式。乔纳尔德夫。模型员工决定购买一个包裹   java在运行时决定换行符   OrderItem(order\u orderID)中的java Hibernate外键为空   将长时间转换为时间戳时发生java错误   具有最小优先级队列的java复杂性问题   java一个单元如何测试非确定性加密函数?   java复选框JSF未返回正确的值   HibernateJava。lang.IllegalArgumentException:不是托管类型:类   java我正在安卓中创建食物菜单,并希望在不同的时间跨度内显示午餐和晚餐菜单。   如何在Java中使用这些泛型创建对象?(<T extensed KeyedItem<KT>,KT extensed compariable<super KT>)   java如何在用作工厂的TestNG dataprovider方法上限制线程   java InteliJ Gradle“测试”项目刷新失败错误:错误:无法为锁文件创建父目录   安卓将Java的类对象转换为Delphi的Jlang_类   java引用调用歧义   java在Swing卡布局中定位对象   利用邻接矩阵问题的java Dijkstra算法   使用Intellij 2017.2/out目录的java构建会复制/build目录中的文件