Ejemplo n.º 1
0
class RootView(BoxLayout):
    def __init__(self, *args, **kwargs):

        super(RootView, self).__init__(*args, **kwargs)

        self.message_handler = MessageHandler(self)

        self.serial = None

        self.last_serial_choices = set()


        self.update_serial_choices()

    def on_message(self, msg):
        self.message_handler.handle(bytes(msg))

    def on_serial_choice(self, checkbox, value):
        if self.serial is not None:
            if self.serial.port == checkbox.port:
                return
            self.serial.close()
            self.serial = None
        if value:
            self.serial = SerialBindings(checkbox.port,
                    self.on_message)


    def update_serial_choices(self, *largs):
        extra_mac_ports = set(glob.glob('/dev/tty.usbserial*'))
        new_serial_choices = set([port for port, _, _ in comports()])
        for i_hate_macs in extra_mac_ports:
            new_serial_choices.add(i_hate_macs)

        if not sets_equal(self.last_serial_choices, new_serial_choices):
            self.indicators.serial_choices.clear_widgets()
            self.last_serial_choices = new_serial_choices
            for port in sorted(list(new_serial_choices)):
                port_name = port
                if port_name.startswith('/dev/'):
                    port_name = port[5:]
                btn = Builder.load_string('''
CheckBox:
    size_hint_y: 1
    group: 'serial_choice_group'
                ''')
                lbl = Builder.load_string('''
SaneLabel:
    size_hint_y: 1
    text: '%s'
                ''' % (port_name,))
                btn.bind(active=self.on_serial_choice)
                btn.port = port
                if self.serial is not None and self.serial.port == port:
                    btn.active = True
                self.indicators.serial_choices.add_widget(btn)
                self.indicators.serial_choices.add_widget(lbl)
Ejemplo n.º 2
0
 def _handle_server_response(self, response):
     """
     Handles server response. Passes raw response from server to MessageHandler and except that MessageHandler.handle returns instance of IrcEvent class, so ircbot knows what to do next with the event.
     """
     message_handler = MessageHandler()
     event = message_handler.handle(response)
     if event and event.to_server:
         for irc_message in event.to_server:
             self._send_to_server(irc_message.get_command())
Ejemplo n.º 3
0
class Client(wx.Frame):
    def __init__(self, kakopts):
        super(Client, self).__init__(None)

        self.Bind(wx.EVT_CLOSE, self.OnExit)
        self.makeMenuBar()
        self.CreateStatusBar()

        self.status_line = wx.TextCtrl(self,
                                       style=wx.TE_MULTILINE | wx.TE_READONLY
                                       | wx.TE_RICH)

        self.buffer_view = FacedStaticText(self)
        self.buffer_view.Bind(wx.EVT_SIZE, self.OnBufferSize)
        self.buffer_view.Bind(wx.EVT_KEY_DOWN, self.OnBufferKeyPress)
        self.buffer_view.Bind(wx.EVT_CHAR, self.OnBufferChar)

        sizer = wx.BoxSizer(wx.VERTICAL)
        sizer.Add(self.status_line, 0, wx.EXPAND)
        sizer.Add(self.buffer_view, 1, wx.EXPAND)
        sizer.SetSizeHints(self)
        self.SetSizerAndFit(sizer)

        self.kakoune = Kakoune(**kakopts)
        self.kakoune.start()
        self.message_handler = MessageHandler(self)
        self.timer = wx.Timer(self)
        self.Bind(wx.EVT_TIMER, self.kakoune_tick, self.timer)
        self.timer.Start(10)

        self.Size = (600, 800)

    def kakoune_tick(self, event):
        if not self.kakoune.is_running():
            self.Close()
        else:
            self.message_handler.handle(self.kakoune.get_next_message())

    def refresh_buffer_dimensions(self):
        w, h = self.buffer_view.compute_dimensions()
        self.kakoune.send_resize(h, w)

    def register_menu_view(self, menu_bar):
        bindings = []
        menu = wx.Menu()
        item_zoom_in = menu.Append(wx.ID_ANY, "Zoom &in\tCtrl-+",
                                   "Zoom buffer in")
        bindings.append((item_zoom_in, self.menu_view_zoom_in))
        item_zoom_out = menu.Append(wx.ID_ANY, "Zoom &out\tCtrl--",
                                    "Zoom buffer out")
        bindings.append((item_zoom_out, self.menu_view_zoom_out))
        item_zoom_0 = menu.Append(wx.ID_ANY, "Zoom &reset\tCtrl-0",
                                  "Reset buffer zoom")
        bindings.append((item_zoom_0, self.menu_view_zoom_0))
        menu.AppendSeparator()
        menu_bar.Append(menu, "&View")
        return bindings

    def menu_view_zoom_in(self, event):
        self.buffer_view.change_font_size('+')
        self.refresh_buffer_dimensions()

    def menu_view_zoom_out(self, event):
        self.buffer_view.change_font_size('-')
        self.refresh_buffer_dimensions()

    def menu_view_zoom_0(self, event):
        self.buffer_view.change_font_size('0')
        self.refresh_buffer_dimensions()

    def makeMenuBar(self):
        menu_file = wx.Menu()
        menu_file.AppendSeparator()
        exitItem = menu_file.Append(wx.ID_EXIT)

        helpMenu = wx.Menu()
        aboutItem = helpMenu.Append(wx.ID_ABOUT)

        menu_bindings = []
        menuBar = wx.MenuBar()
        menuBar.Append(menu_file, "&File")
        menu_bindings += self.register_menu_view(menuBar)
        menuBar.Append(helpMenu, "&Help")

        self.SetMenuBar(menuBar)
        self.Bind(wx.EVT_MENU, self.OnExit, exitItem)
        self.Bind(wx.EVT_MENU, self.OnAbout, aboutItem)
        for item, handler in menu_bindings:
            self.Bind(wx.EVT_MENU, handler, item)

    def OnBufferSize(self, event):
        self.refresh_buffer_dimensions()

    def OnBufferKeyPress(self, event: wx.KeyEvent):
        key = wx_to_kakoune_keys.get(event.KeyCode)
        if key:
            #print("KEY", key)
            if event.altDown:
                key = alt_key(key)
            self.kakoune.send_keys(key)
        else:
            event.Skip()

    def OnBufferChar(self, event: wx.KeyEvent):
        keycode = f"{event.UnicodeKey:c}"
        key = wx_to_kakoune_keys.get(event.UnicodeKey, keycode)
        #print("CHAR", keycode, event.UnicodeKey, keys)
        if event.altDown:
            key = alt_key(key)
        self.kakoune.send_keys(key)
        event.Skip()

    def OnExit(self, event):
        self.kakoune.stop()
        self.Destroy()

    def OnAbout(self, event):
        wx.MessageBox("An experimental Kakoune GUI", "kwax",
                      wx.OK | wx.ICON_INFORMATION)
Ejemplo n.º 4
0
class ChatBotHandler(AbstracHandler):
    def __init__(self, botId, botName, client, socket_delay=1):
        self.botId = botId
        self.botName = botName
        self.mention = self.getMention(botId)
        self.client = client
        self.delay = socket_delay
        self.messageHandler = MessageHandler(self.mention)

    def isPrivate(self, event):
        """Checks if private slack channel"""
        return event.get('channel').startswith('D')

    def _isForMe(self, event):
        eventType = event.get('type')

        if not eventType or eventType != 'message' or \
                event.get('user') == self.botId:
            return False

        if self.isPrivate(event):
            return 'private'

        messageText = event.get('text')
        if messageText:
            messageText = messageText.lower()

        if re.search(str(self.mention), str(messageText)):
            return 'mention'

        if re.search(str(self.botName), str(messageText)):
            return 'name'

    def _postMessage(self, messageText, channel):
        self.client.api_call('chat.postMessage',
                             channel=channel,
                             text=messageText,
                             as_user=True)

    def handle(self, message, user, channel, mention):
        privateChannel = channel.startswith('D')
        response = self.messageHandler.handle(message, user, mention,
                                              privateChannel)
        if response:
            return self._postMessage(response, channel)

    def run(self):
        if not self.client.rtm_connect():
            print('[!] Connection to Slack failed.')
            return

        print('[.] AimBot is ON...')
        while True:
            eventList = self.client.rtm_read()
            if not len(eventList):
                continue

            for event in eventList:
                forMe = self._isForMe(event)
                print('forMe: {0}. Event type: {1}'.format(
                    forMe, event.get('type')))
                if not forMe:
                    continue

                mention = bool(forMe == 'mention')
                print('mention: {0}'.format(mention))
                self.handle(message=event.get('text'),
                            user=event.get('user'),
                            channel=event.get('channel'),
                            mention=mention)
        time.sleep(self.delay)