Merge pull request #57 from philipyun103/master
Adding API Access to Plugin Context (Updated)
This commit is contained in:
commit
a4641c8936
5 changed files with 35 additions and 6 deletions
13
README.md
13
README.md
|
@ -89,5 +89,18 @@ Plugins can also run methods on a schedule. This allows a plugin to poll for upd
|
||||||
####Plugin misc
|
####Plugin misc
|
||||||
The data within a plugin persists for the life of the rtmbot process. If you need persistent data, you should use something like sqlite or the python pickle libraries.
|
The data within a plugin persists for the life of the rtmbot process. If you need persistent data, you should use something like sqlite or the python pickle libraries.
|
||||||
|
|
||||||
|
####Direct API Calls
|
||||||
|
You can directly call the Slack web API in your plugins by including the following import:
|
||||||
|
|
||||||
|
from client import slack_client
|
||||||
|
|
||||||
|
You can also rename the client on import so it can be easily referenced like shown below:
|
||||||
|
|
||||||
|
from client import slack_client as sc
|
||||||
|
|
||||||
|
Direct API calls can be called in your plugins in the following form:
|
||||||
|
|
||||||
|
sc.api_call("API.method", "parameters")
|
||||||
|
|
||||||
####Todo:
|
####Todo:
|
||||||
Some rtm data should be handled upstream, such as channel and user creation. These should create the proper objects on-the-fly.
|
Some rtm data should be handled upstream, such as channel and user creation. These should create the proper objects on-the-fly.
|
||||||
|
|
10
client.py
Normal file
10
client.py
Normal file
|
@ -0,0 +1,10 @@
|
||||||
|
from rtmbot import RtmBot
|
||||||
|
|
||||||
|
slack_client = None
|
||||||
|
|
||||||
|
|
||||||
|
def init(config):
|
||||||
|
global slack_client
|
||||||
|
bot = RtmBot(config)
|
||||||
|
slack_client = bot.slack_client
|
||||||
|
return bot
|
5
docs/example-plugins/directAPIcall.py
Normal file
5
docs/example-plugins/directAPIcall.py
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
from __future__ import unicode_literals
|
||||||
|
from client import slack_client as sc
|
||||||
|
|
||||||
|
for user in sc.api_call("users.list")["members"]:
|
||||||
|
print(user["name"], user["id"])
|
10
rtmbot.py
10
rtmbot.py
|
@ -1,9 +1,11 @@
|
||||||
#!/usr/bin/env python
|
#!/usr/bin/env python
|
||||||
import sys
|
|
||||||
from argparse import ArgumentParser
|
from argparse import ArgumentParser
|
||||||
|
import sys
|
||||||
|
import os
|
||||||
import yaml
|
import yaml
|
||||||
from rtmbot import RtmBot
|
import client
|
||||||
|
|
||||||
|
sys.path.append(os.getcwd())
|
||||||
|
|
||||||
|
|
||||||
def parse_args():
|
def parse_args():
|
||||||
|
@ -19,7 +21,7 @@ def parse_args():
|
||||||
# load args with config path
|
# load args with config path
|
||||||
args = parse_args()
|
args = parse_args()
|
||||||
config = yaml.load(open(args.config or 'rtmbot.conf', 'r'))
|
config = yaml.load(open(args.config or 'rtmbot.conf', 'r'))
|
||||||
bot = RtmBot(config)
|
bot = client.init(config)
|
||||||
try:
|
try:
|
||||||
bot.start()
|
bot.start()
|
||||||
except KeyboardInterrupt:
|
except KeyboardInterrupt:
|
||||||
|
|
|
@ -48,7 +48,7 @@ class RtmBot(object):
|
||||||
# initialize stateful fields
|
# initialize stateful fields
|
||||||
self.last_ping = 0
|
self.last_ping = 0
|
||||||
self.bot_plugins = []
|
self.bot_plugins = []
|
||||||
self.slack_client = None
|
self.slack_client = SlackClient(self.token)
|
||||||
|
|
||||||
def _dbg(self, debug_string):
|
def _dbg(self, debug_string):
|
||||||
if self.debug:
|
if self.debug:
|
||||||
|
@ -56,7 +56,6 @@ class RtmBot(object):
|
||||||
|
|
||||||
def connect(self):
|
def connect(self):
|
||||||
"""Convenience method that creates Server instance"""
|
"""Convenience method that creates Server instance"""
|
||||||
self.slack_client = SlackClient(self.token)
|
|
||||||
self.slack_client.rtm_connect()
|
self.slack_client.rtm_connect()
|
||||||
|
|
||||||
def _start(self):
|
def _start(self):
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue