Completed
Pull Request — master (#473)
by Manas
02:15
created

PostMessageAction.run()   A

Complexity

Conditions 1

Size

Total Lines 5

Duplication

Lines 0
Ratio 0 %
Metric Value
cc 1
dl 0
loc 5
rs 9.4285
1
# pylint: disable=super-on-old-class
2
import random
3
4
import eventlet
5
from irc.bot import SingleServerIRCBot
6
7
from st2actions.runners.pythonrunner import Action
8
9
eventlet.monkey_patch(
10
    os=True,
11
    select=True,
12
    socket=True,
13
    thread=True,
14
    time=True)
15
16
__all__ = [
17
    'PostMessageAction'
18
]
19
20
21
class StackStormActionIRCBot(SingleServerIRCBot):
22
    def __init__(self, server_host, server_port, nickname, channel, message):
23
        server_list = [(server_host, server_port)]
24
        super(StackStormActionIRCBot, self).__init__(server_list=server_list,
25
                                                     nickname=nickname,
26
                                                     realname=nickname)
27
        self._channel = channel
28
        self._message = message
29
30
    def on_welcome(self, connection, event):
31
        try:
32
            connection.join(self._channel)
33
            self.connection.privmsg(self._channel, self._message)  # pylint: disable=no-member
34
        finally:
35
            self.die(msg='Disconnecting')  # pylint: disable=no-member
36
37
    def on_nicknameinuse(self, connection, event):
38
        new_nickname = '%s-%s' % (connection.get_nickname(), random.randint(1, 1000))
39
        connection.nick(new_nickname)
40
41
42
class PostMessageAction(Action):
43
    def run(self, channel, message):
44
        bot = self._get_bot(channel=channel, message=message)
45
        bot.start()  # pylint: disable=no-member
46
47
        return True
48
49
    def _get_bot(self, channel, message):
50
        split = self.config['server'].split(':')
51
        server_host = split[0]
52
        server_port = int(split[1])
53
        nickname = self.config['nickname']
54
        bot = StackStormActionIRCBot(server_host=server_host,
55
                                     server_port=server_port,
56
                                     nickname=nickname,
57
                                     channel=channel,
58
                                     message=message)
59
        return bot
60