手机登录网页版qq帐号 Python&QQBot:一个简单、好用的QQ机器人(7)

电脑杂谈  发布时间:2018-02-07 19:44:49  来源:网络整理

被群内其他成员 @ 的通知

QQBot 收到群消息时,会先根据消息内容判断是否有人 @ 自己。如果是,则在消息内容的开头加一个 '[@ME] ' 的标记,再传递给 onQQMessage 函数;否则,将消息内容中的所有 '@ME' 替换成 '@Me' 再传给 onQQMessage 。因此,在 onQQMessage 函数内,只需要判断 content 内是否含有 '@ME' 就知道自己是否被消息发送者 @ 了。例如:

def onQQMessage(bot, contact, member, content):

if '@ME' in content:

bot.SendTo(contact, member.name+',艾特我干嘛呢?')

请注意,若群内有另一个成员的名字和自己的名字的开头部分相同(如:自己的名字是 ab ,另一个成员的名字是 abc ),那么当有人 @abc 时,也会误报成 @ME ,在这种情况下,需要修改自己的群名片,以免误报。

判断是否是自己发的消息

当本 QQ 在群内或讨论组内发言时, QQBot 也会收到一条同样的消息,此时 onQQMessage 中的 contact 参数就是该 群/讨论组 对象, member 参数就是自己在该 群/讨论组 中的成员对象,此时 member.uin 就是本次登录的 QQ 号码,因此,在 onQQMessage 中,只要判断 member 的 uin属性 是否是本次登录的 QQ 号码就可以知道是否是自己的发的消息了,例如:

from qqbot.utf8logger import INFO

def onQQMessage(bot, contact, member, content):

if getattr(member, 'uin', None) == bot.conf.qq: # 注意:不要使用 member.uin

INFO('你在 %s 内发言', contact)

定制定时任务

从 2.1.13 起, qqbot 提供一个功能强大的函数装饰器 -- qqbotsched 来定制定时任务,示例代码:

from qqbot import qqbotsched

@qqbotsched(hour='11,17', minute='55')

def mytask(bot):

gl = bot.List('group', '456班')

if gl is not None:

for group in gl:

bot.SendTo(group, '同志们:开饭啦啦啦啦啦啦!!!')

以上代码以插件形式加载后,每到 11:55 和 17:55 ,都会自动向 群“456班” 发送消息:“同志们:开饭啦啦啦啦啦啦!!!” 。

qqbotsched 装饰器接受 year, month, day, week, day_of_week, hour, minute, second, start_date, end_date, timezone 共计 11 个关键字参数,每个参数表示任务的定制时间的分量所应匹配的值。例如: hour='11,17' 表示应在 11:xx 或 17:xx 执行任务, minute='55' 表示应在 xx:55 执行任务, minute='0-55/5' 表示应在 xx:00, xx:05, xx:10, ..., xx:55 执行任务, day_of_week='mon-fri' (或 '0-4' ) 表示应在 星期一 ~ 星期五 执行任务。

qqbotsched 是对 Python 的定时任务框架 apscheduler 的简单封装,其各项参数应采用 Unix 系统中的 crontab 格式输入。有关 crontab 以及 Python 的定时任务框架 apscheduler 的内容


本文来自电脑杂谈,转载请注明本文网址:
https://www.pc-fly.com/a/ruanjian/article-65875-7.html

相关阅读
    发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

    热点图片
    拼命载入中...