Exemplo n.º 1
0
def test_init_with_timeout():
    client = SlackClient(None, connect=False)
    assert client.webapi.api.timeout == 10  # seconds default timeout

    expected_timeout = 42  # seconds
    client = SlackClient(None, connect=False, timeout=expected_timeout)
    assert client.webapi.api.timeout == expected_timeout
Exemplo n.º 2
0
 def __init__(self):
     super(WithdrawalExecutor, self).__init__()
     self.setDaemon(False)
     self._db_context = DBContext()
     self._slackclient = SlackClient(API_TOKEN)
     self._should_stop = False
     self._withdrawal_interval = 1
Exemplo n.º 3
0
 def __init__(self):
     super(ReportPublisher, self).__init__()
     self.setDaemon(False)
     self._db_context = DBContext()
     self._slackclient = SlackClient(API_TOKEN)
     self._should_stop = False
     self._interval = 3600
Exemplo n.º 4
0
def run():  # pragma: no cover
    """Start the dispatcher running."""

    slack_client = SlackClient(settings.SLACKBOT_API_TOKEN)

    while True:
        run_once(slack_client, job_configs.config)
        time.sleep(1)
Exemplo n.º 5
0
 def report_to_slack(cls, msg, file_path):
     try:
         slack_client = SlackClient(API_TOKEN)
         classname = cls.__class__.__name__
         slack_client.send_message(SLACK_CHANNEL, f"[{classname}] : {msg}")
         slack_client.upload_file(SLACK_CHANNEL, "image", file_path, None)
     except:
         pass
Exemplo n.º 6
0
 def __init__(self):
     self._client = SlackClient(settings.API_TOKEN,
                                bot_icon=settings.BOT_ICON if hasattr(
                                    settings, 'BOT_ICON') else None,
                                bot_emoji=settings.BOT_EMOJI if hasattr(
                                    settings, 'BOT_EMOJI') else None)
     self._plugins = PluginsManager()
     self._dispatcher = MessageDispatcher(self._client, self._plugins)
Exemplo n.º 7
0
 def __init__(self, api_token=None):
     if api_token is None:
         api_token = settings.API_TOKEN
     self._client = SlackClient(api_token,
                                bot_icon=settings.BOT_ICON if hasattr(
                                    settings, 'BOT_ICON') else None,
                                bot_emoji=settings.BOT_EMOJI if hasattr(
                                    settings, 'BOT_EMOJI') else None)
     self._plugins = PluginsManager()
     self._dispatcher = MessageDispatcher(self._client, self._plugins)
     self._stop = threading.Event()
Exemplo n.º 8
0
 def __init__(self):
     self._client = SlackClient(
         CONFIG.slack_api_token,
         timeout=settings.TIMEOUT if hasattr(settings, 'TIMEOUT') else None,
         bot_icon=settings.BOT_ICON
         if hasattr(settings, 'BOT_ICON') else None,
         bot_emoji=settings.BOT_EMOJI
         if hasattr(settings, 'BOT_EMOJI') else None)
     self._plugins = PluginsManager()
     self._dispatcher = MessageDispatcher(self._client, self._plugins,
                                          settings.ERRORS_TO)
Exemplo n.º 9
0
def handle_message(text, expect_reaction=True):
    client = SlackClient("api_token", connect=False)
    plugins = PluginsManager()
    dispatcher = MessageDispatcher(client, plugins, None)
    msg = [
        "respond_to",
        {"text": text, "channel": "channel", "ts": str(time.mktime(T0.timetuple()))},
    ]

    if expect_reaction:
        with assert_slack_client_reacts_to_message():
            dispatcher.dispatch_msg(msg)
    else:
        with assert_slack_client_doesnt_react_to_message():
            dispatcher.dispatch_msg(msg)
Exemplo n.º 10
0
def loop():
    """
    議論終了コマンドが送信されるまでメッセージの書き出しを行う関数
    """

    client = SlackClient(API_TOKEN)
    # ユーザーidからユーザー名を取得するため
    user_dict = get_user_dict()

    keys = [k for k, v in user_dict.items() if v == 'comhelper']
    comhelper_user_id = keys[0]

    return_flag = True

    # 議論終了コマンドが送信されるまでループを続ける
    while return_flag:
        events = SlackClient.rtm_read(client)

        for event in events:
            event_type = event.get('type')

            if event_type == 'message':
                message_text = event.get('text')

                if message_text == '<@' + comhelper_user_id + "> 議論を終了して":
                    # 議論終了コマンドが送信されたらループを抜ける
                    return_flag = False
                else:
                    # ユーザー名を確認しつつ,メッセージをテキストファイルに一時保存
                    send_user_id = event.get('user')
                    send_user_name = user_dict[send_user_id]
                    add_commit_message = []
                    add_commit_message.append('echo "' + send_user_name +
                                              ': ' + message_text +
                                              '" >> commit.txt')
                    try:
                        cmd_return = subprocess.run(add_commit_message,
                                                    shell=True)
                    except subprocess.SubprocessError:
                        return 'echo >> commit.txt の実行でエラーが発生しました。'

        time.sleep(1)

    return '議論を終了しました!\n次の議論開始前にコミットしてください。'
Exemplo n.º 11
0
def handle_message(text, *, category="respond_to", expect_reaction=True):
    client = SlackClient("api_token", connect=False)
    plugins = PluginsManager()
    plugins.init_plugins()
    dispatcher = MessageDispatcher(client, plugins, None)
    msg = [
        category,
        {
            "text": text,
            "channel": "channel",
            "ts": TS
        },
    ]

    if expect_reaction:
        with assert_slack_client_reacts_to_message():
            dispatcher.dispatch_msg(msg)
    else:
        with assert_slack_client_doesnt_react_to_message():
            dispatcher.dispatch_msg(msg)
Exemplo n.º 12
0
def handle_callback_webhook():
    """Respond to callback webhook."""
    try:
        channel = request.args["channel"]
        thread_ts = request.args["thread_ts"]
        token = request.args["token"]
    except KeyError:
        abort(400)

    try:
        timestamp, signature = token.split(":", 1)
    except ValueError:
        abort(400)

    try:
        validate_hmac(
            timestamp.encode("utf8"),
            settings.EBMBOT_WEBHOOK_SECRET,
            signature.encode("utf8"),
            max_age=settings.EBMBOT_WEBHOOK_TOKEN_TTL,
        )
    except InvalidHMAC:
        abort(403)

    try:
        data = json.loads(request.data.decode())
    except json.decoder.JSONDecodeError:
        abort(400)
    try:
        message = data["message"]
    except KeyError:
        abort(400)

    client = SlackClient(settings.SLACKBOT_API_TOKEN)
    notify_slack(client, channel=channel, thread_ts=thread_ts, message=message)

    return ""
Exemplo n.º 13
0
import os
import logging
import time
from slackbot.slackclient import SlackClient
import dotenv

logging.basicConfig(level=logging.DEBUG)

dotenv.load_dotenv(verbose=True)
token = os.environ["SLACKBOT_API_TOKEN"]

client = SlackClient(token)
client.ping()

client.send_message("#random", "hello")
client.rtm_send_message("#random", "hello from RTM")

print("hai")
time.sleep(1)
print("hoi")
Exemplo n.º 14
0
from plugins.gomisute.logs.LogHandler import LogHandler

import configparser

logger = LogHandler('service')

conf = configparser.ConfigParser()
conf.read('./config.ini')
API_TOKEN = conf['slack']['BOT_USER_OAUTH_ACCESS_TOKEN']
attempt_user = conf['slack']['attempt_user']

endpoint = conf['chaplus']['endpoint']
chaplus_key = conf['chaplus']['api_key']
chaplus_dist = f'{endpoint}?apikey={chaplus_key}'

client = SlackClient(API_TOKEN)


@respond_to(r'^(?=.*[ごみ|ゴミ])(?!.*(終|代わ|更新))')
def sendTrashDuty2525AND2721(message, *args):
    """
    (ごみorゴミ)を含むメッセージに対し
    両室の次回のごみ捨て当番をリプライする.

    Args:
        message (Message) : メッセージに関する情報を持ったクラスのインスタンス
        args    (str)     : respond_to()内の正規表現にマッチしたメッセージ本文

    Returns:
        None
    """
Exemplo n.º 15
0
def get_slack_client():
    return SlackClient(API_TOKEN) if slack_client is None else slack_client
Exemplo n.º 16
0
 def __init__(self):
     self._client = SlackClient(settings.API_TOKEN)
     self._plugins = PluginsManager()
     self._dispatcher = MessageDispatcher(self._client, self._plugins)
Exemplo n.º 17
0
import os
import time
import re
from slackbot.slackclient import SlackClient

# instantiate Slack client
slack_client = SlackClient(os.environ.get('SLACK_BOT_TOKEN'))
# starterbot's user ID in Slack: value is assigned after the bot starts up
starterbot_id = None

# constants
RTM_READ_DELAY = 1  # 1 second delay between reading from RTM
EXAMPLE_COMMAND = "do"
MENTION_REGEX = "^<@(|[WU].+?)>(.*)"


def parse_bot_commands(slack_events):
    """
        Parses a list of events coming from the Slack RTM API to find bot commands.
        If a bot command is found, this function returns a tuple of command and channel.
        If its not found, then this function returns None, None.
    """
    for event in slack_events:
        if event["type"] == "message" and not "subtype" in event:
            user_id, message = parse_direct_mention(event["text"])
            if user_id == starterbot_id:
                return message, event["channel"]
    return None, None


def parse_direct_mention(message_text):
Exemplo n.º 18
0
def slack_client():
    c = SlackClient(None, connect=False)
    c.channels = slackclient_data.CHANNELS
    c.users = slackclient_data.USERS
    return c
Exemplo n.º 19
0
def do_job(job):
    slack_client = SlackClient("api_token", connect=False)
    job_dispatcher = JobDispatcher(slack_client, job, config)
    job_dispatcher.do_job()