python的轻量级slackbot框架

gendobot的Python项目详细描述


https://img.shields.io/pypi/v/gendobot.svghttps://img.shields.io/pypi/pyversions/gendobot.svghttps://travis-ci.org/nficano/gendo.svg?branch=masterhttps://coveralls.io/repos/nficano/gendo/badge.svg?branch=master&service=github&cb=321

说明

gendo是一个轻量级的slackbot框架,它将 编写机器人程序所需的样板代码,允许您集中精力解决问题 就在手边。

安装

  1. 在机器人的新项目文件夹中:
$ mkdir myslackbot
$ cd myslackbot
  1. pypi安装gendobot
$ pip install gendobot
  1. 接下来,为您的机器人的逻辑创建另一个文件:
$ touch mybot.py
  1. 同样在您喜欢的文本编辑器中,使用以下命令编辑mybot.py
#!/usr/bin/env python# -*- coding: utf-8 -*-fromgendoimportGendogendo=Gendo("xoxb-1234567890-replace-this-with-token-from-slack")@gendo.listen_for('morning')defmorning(user,message):return"mornin' @{user.username}"if__name__=='__main__':gendo.run()
  1. 现在尝试运行它,运行下面的命令,然后在slack中说“morning”。
$ python mybot.py

基本用法

要启动项目,首先需要通过添加 from gendo import Gendo到文件顶部。

接下来需要创建gendo实例并配置slack令牌。 这可以使用yaml配置文件完成,也可以显式地将其传递给 初始化。

# Option 1: YAML config:importosfromgendoimportGendopath=os.path.dirname(os.path.abspath(__file__))path_to_yaml=os.path.join(path,'config.yaml')gendo=Gendo.config_from_yaml(path_to_yaml)
# Option 2: Hardcoded slack tokenfromgendoimportGendogendo=Gendo("xoxb-1234567890-replace-this-with-token-from-slack")

现在是编写response函数的时候了,这些函数将被包装 使用listen_fordecorator,它注册一个模式来监视松弛 会话,以及哪个python方法应该处理它。

在下面的示例中,该方法设置为侦听单词“cookies”。 注意,decorator向函数传递了两个参数,首先是 user对象,其中包含有关触发 事件(在本例中是说单词cookies的slack用户)和message, 这是完整消息的字符串。

@gendo.listen_for('cookies')defcookies(user,message):# do something when someone say's "cookies" here.

你也可以用可调用函数设置更复杂的规则,并且你可以将它们堆叠起来! 这里有一个例子。

defnicks_joke_rule(name,message):is_nick=name=='nficano'is_telling_a_joke=message.lower().count('knock')==2returnis_nickandis_telling_a_jokedefbens_joke_rule(name,message):is_ben=name=='johnbenjaminlewis'is_telling_a_joke=message.lower().count('knock')==2@gendo.listen_for(nicks_joke_rule)@gendo.listen_for(bens_joke_rule)defanother_joke(name,message):ifname=='johnbenjaminlewis':return'@johnbenjaminlewis, nice try. But no.'elifname=='nficano':return"@here Nick's telling a joke! Who's there?!?"

最后,你的脚本需要放在一个循环中,在松弛中监视所说的话 相应地传递和响应消息。为此,我们添加 以下是脚本的结尾:

if__name__=='__main__':gendo.run()

crontab

有时会遇到希望发送松弛消息的情况 定期而不是直接响应关键字,对于这个gendo船舶 使用cron的单线程python实现。

假设我们想每五个频道给每个人发一条信息 几分钟后,只需在mybot.py文件中添加以下内容:

@gendo.cron('*/5 * * * *')defsome_task():gendo.speak("Hay Ride!","#general")

有关详细信息,请参见https://en.wikipedia.org/wiki/Cron#Configuration_file crontab语法。

开发

“gendo”的开发完全在github上进行。我们非常欢迎并大力鼓励以补丁、测试和特性创建和/或请求的形式做出贡献。如果此工具无法按预期运行,请打开问题。

如何发布更新

如果这是您第一次释放到pypi,则需要运行:pip install -r tests/dev_requirements.txt

完成后,执行以下命令:

git checkout master

# Increment the version number and tag the release.
bumpversion [major|minor|patch]# Upload the distribution to PyPi
python setup.py sdist bdist_wheel upload

# Since master often contains work-in-progress changes, increment the version
# to a patch release to prevent inaccurate attribution.
bumpversion --no-tag patch

git push origin master --tags

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

推荐PyPI第三方库


热门话题
Java NIO选择器最多只能选择50个SelectionKeys?   java阻止ImageButton创建新活动   为什么Java方法“Arrays.copyOf”处理中的整数数组与处理对象数组时的行为不同   java将安卓 1.6日历字段提取到vcal   将字符串转换为双精度后的java问题   java使用Webflux,是否可以使用AOP获取用于日志记录的ServerHttpRequest   java与jTextArea的基本区别是什么。setText()和jTextArea。append()方法?   java程序执行时间|将值保存到文件或数据结构?   java如何将表示字符的整数转换为字符串?   Java LWJGL新的渲染问题windows   java GUI提供异常   java创建第二个对象使类的函数不再工作   如何在java中将000验证为3位数字?   java bigO算法的时间复杂度,可以在不重复的情况下找到最长的子串   在30像素内点击按钮后,java在两个图像之间转换   java eclipse maven nexus不可解父pom   当存在其他SecurityConstraint时,java TransportGuary机密将被忽略   重新连接后激发的java Red5客户端流断开事件   javafx聊天应用程序中连接客户端的java问题