被群内其他成员 @ 的通知
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
放银行只是缩点水