def test_display(): """Test display functions.""" check(weechat.prefix('action') != '') check(weechat.prefix('error') != '') check(weechat.prefix('join') != '') check(weechat.prefix('network') != '') check(weechat.prefix('quit') != '') check(weechat.prefix('unknown') == '') check(weechat.color('green') != '') check(weechat.color('unknown') == '') weechat.prnt('', '## test print core buffer') weechat.prnt_date_tags('', 946681200, 'tag1,tag2', '## test print_date_tags core buffer') buffer = weechat.buffer_new('test_formatted', 'buffer_input_cb', '', 'buffer_close_cb', '') check(buffer != '') check(weechat.buffer_get_integer(buffer, 'type') == 0) weechat.prnt(buffer, '## test print formatted buffer') weechat.prnt_date_tags(buffer, 946681200, 'tag1,tag2', '## test print_date_tags formatted buffer') weechat.buffer_close(buffer) buffer = weechat.buffer_new_props('test_free', {'type': 'free'}, 'buffer_input_cb', '', 'buffer_close_cb', '') check(weechat.buffer_get_integer(buffer, 'type') == 1) check(buffer != '') weechat.prnt_y(buffer, 0, '## test print_y free buffer') weechat.prnt_y_date_tags(buffer, 0, 946681200, 'tag1,tag2', '## test print_y_date_tags free buffer') weechat.buffer_close(buffer)
def floodit_input_buffer(data, buffer, input): """Input data in floodit buffer.""" global floodit if input: args = input.split(' ') if args[0] in ('d', 'demo'): if not floodit['timer']: delay = 500 if len(args) > 1: try: delay = int(args[1]) except: delay = 500 if delay <= 0: delay = 1 if floodit['end']: floodit_new_game() floodit['timer'] = weechat.hook_timer(delay, 0, 0, 'floodit_timer_cb', '') elif args[0] in ('s', 'single'): floodit['mode'] = 'single' floodit_new_game() elif args[0] in ('v', 'versus'): floodit['mode'] = 'versus' floodit_new_game() elif args[0] in ('n', 'new'): floodit_new_game() elif args[0] in ('q', 'quit'): weechat.buffer_close(floodit['buffer']) elif args[0] == '+': floodit_change_size(+1) elif args[0] == '-': floodit_change_size(-1) return weechat.WEECHAT_RC_OK
def vdm_buffer_input(data, buffer, input_data): """ Read data from user in VDM buffer. """ if input_data == "q" or input_data == "Q": weechat.buffer_close(buffer) else: vdm_get(input_data) return weechat.WEECHAT_RC_OK
def tictactoe_input_buffer(data, buf, input_data): """Input data in tictactoe buffer.""" # pylint: disable=unused-argument if input_data: args = input_data.split(' ') if args[0] in ('n', 'new'): tictactoe_new_game() elif args[0] in ('c', 'computer'): tictactoe_new_game(computer_begins=True) elif args[0] in ('q', 'quit'): weechat.buffer_close(tictactoe['buffer']) elif args[0].isdigit() and not tictactoe['end']: pos = int(args[0]) if 1 <= pos <= 9: posconv = { 1: 6, 2: 7, 3: 8, 4: 3, 5: 4, 6: 5, 7: 0, 8: 1, 9: 2, } tictactoe_play(tictactoe['human'], posconv[pos]) return weechat.WEECHAT_RC_OK
def close_buffers_by_names(names): for name in names: buf = weechat.buffer_search('python', name) if buf: weechat.prnt('', 'Closing buffer %s' % name) weechat.buffer_close(buf) else: weechat.prnt('', 'Error searching buffer %s' % name)
def maze_input_buffer(data: str, buffer: str, str_input: str) -> int: """Input data in maze buffer.""" # pylint: disable=unused-argument if str_input.lower() == "q": weechat.buffer_close(buffer) else: weechat.command("", f"/{SCRIPT_COMMAND} {str_input}") return weechat.WEECHAT_RC_OK
def handle_query(data, signal, signal_data): global buffer_data # data: empty string # signal: <server>,irc_in_PRIVMSG # signal_data: whole message unparsed # parse the message parsed = weechat.info_get_hashtable("irc_message_parse", {"message": signal_data}) # where should we answer? server = signal.split(",")[0] channel = parsed["channel"] current_nick = weechat.info_get("irc_nick", server) user = parsed["nick"] message = parsed["text"] if channel == current_nick: # we got a message through a private query, refuse it buffer_out = weechat.info_get("irc_buffer", server + "," + user) # close private buffers, but not server buffers # localvar_type can assume five values: private, channel, server, weechat and "" if weechat.buffer_get_string(buffer_out,"localvar_type") == "private": weechat.command(buffer_out, "How about speaking to me in public?") weechat.buffer_close(buffer_out) else: # query came from public channel if message.startswith(current_nick + ":"): # it's a command to our bot query = message.split(":")[1].strip() # remove the part before the colon, and lead/trail whitespaces s = query.split(" ", 1) command = s[0].lower() # command is case-insensitive args = s[1] if len(s) == 2 else "" target = "{0},{1}".format(server, channel) # this is the key to the dict containing the lists if command == "coin": out_msg = _coin() elif command == "help": out_msg = _help(user) elif command == "dice": out_msg = _dice(args) elif command == "server": out_msg = _server() elif command == "about": out_msg = _about() elif command == "rps": out_msg = _rps(user, args) elif command == "list": out_msg = _list(target,user,args) elif command == "coffee": out_msg = _coffee() elif command == "eightball": out_msg = _8ball() else: out_msg = "Unrecognized command. Type '{0}: help' to get a list of commands".format(current_nick) buffer_out = weechat.info_get("irc_buffer", server + "," + channel) if weechat.buffer_get_string(buffer_out,"localvar_type") == "channel": weechat.command(buffer_out, out_msg) return weechat.WEECHAT_RC_OK # must always return this or WEECHAT_RC_ERROR
def delete(self) : for chat in reversed(self.chats) : chat.delete() self.disconnect() if self.buffer is not None : weechat.buffer_close(self.buffer) self.buffer = None for option in self.options.keys(): weechat.config_option_free(option)
def delete(self): for chat in reversed(self.chats): chat.delete() self.disconnect() if self.buffer is not None: weechat.buffer_close(self.buffer) self.buffer = None for option in self.options: weechat.config_option_free(option)
def create(self): buffer = weechat.buffer_search('python', self.__name__) if buffer: # close it because the callbacks migth be no longer valid weechat.buffer_close(buffer) buffer = self._create() if self._title: weechat.buffer_set(buffer, 'title', self._title) self._pointer = buffer return buffer
def shell_input_buffer(data, buffer, input): """Input callback on shell buffer.""" global cmd_send_to_buffer if input in ('q', 'Q'): weechat.buffer_close(buffer) return weechat.WEECHAT_RC_OK cmd_send_to_buffer = 'new' weechat.prnt(buffer, '') command = weechat.string_input_for_buffer(input) shell_exec(buffer, command) return weechat.WEECHAT_RC_OK
def timelined_cb(data, command, rc, stdout, stderr): """Very generic callback in case timelined acts weird.""" global buffers buf = buffers[data] name = wc.buffer_get_string(buf, "name") stream = data + "STREAM" del(hooks[stream]) wc.buffer_close(buf) print_error("timelined for %s exited:" % name) print_error(stdout) print_error(stderr) return wc.WEECHAT_RC_OK
def timelined_cb(data, command, rc, stdout, stderr): """Very generic callback in case timelined acts weird.""" global buffers buf = buffers[data] name = wc.buffer_get_string(buf, "name") stream = data + "STREAM" del (hooks[stream]) wc.buffer_close(buf) print_error("timelined for %s exited:" % name) print_error(stdout) print_error(stderr) return wc.WEECHAT_RC_OK
def minesweeper_input_buffer(data, buffer, input): """Input data in minesweeper buffer.""" global minesweeper if input: args = input.split(' ') if args[0] in ('n', 'new'): minesweeper_new_game() elif args[0] in ('q', 'quit'): weechat.buffer_close(minesweeper['buffer']) elif args[0] == '+': minesweeper_change_size(+1) elif args[0] == '-': minesweeper_change_size(-1) return weechat.WEECHAT_RC_OK
def recv_cb(data, remaining_calls): for server in xd: try: message_data = xd[server]["socket"].recv() j = json.loads(message_data) if j["evt"] == "message/new": # get buffer that corresponds to the channel ID buffer_ = weechat.buffer_search( "python", xd[server]["channels"][j["data"]["message"] ["channelID"]]["name"]) # display the message! display_msg(buffer_, j["data"]["message"], xd[server], "notify_message") elif j["evt"] == "pingdata": pong_data = json.dumps({ "evt": "pongdata", "data": { "sessionID": xd[server]["session_id"] } }) xd[server]["socket"].send(pong_data) except websocket.WebSocketConnectionClosedException: weechat.prnt( "", "weecent\tLost connection to server %s. Reconnecting..." % server) # close socket xd[server]["socket"].close() del xd[server]["socket"] # delete everything because I'm lazy weechat.buffer_close(xd[server]["buffer"]) for channel in xd[server]["channels"].itervalues(): weechat.buffer_close(channel["buffer"]) connect(server, servers[server]) except ssl.SSLWantReadError: # not sure what to do here. # it doesn't seem to affect execution much so I'll just ignore it # todo: figure out what this means weechat.prnt("", "weecent\ti got that darn ssl error again") return weechat.WEECHAT_RC_OK
def samegame_input_buffer(data, buffer, input): """Input data in samegame buffer.""" global samegame if input: args = input.split(' ') if args[0] in ('n', 'new'): samegame_new_game() elif args[0] in ('q', 'quit'): weechat.buffer_close(samegame['buffer']) elif args[0] == '+': samegame_change_size(+1) elif args[0] == '-': samegame_change_size(-1) elif args[0].isdigit(): numcolors = int(args[0]) if numcolors >= 3 and numcolors <= 6: samegame['numcolors'] = numcolors samegame_new_game() return weechat.WEECHAT_RC_OK
def samegame_input_buffer(data, buffer, input): """Input data in samegame buffer.""" global samegame if input: args = input.split(" ") if args[0] in ("n", "new"): samegame_new_game() elif args[0] in ("q", "quit"): weechat.buffer_close(samegame["buffer"]) elif args[0] == "+": samegame_change_size(+1) elif args[0] == "-": samegame_change_size(-1) elif args[0].isdigit(): numcolors = int(args[0]) if numcolors >= 3 and numcolors <= 6: samegame["numcolors"] = numcolors samegame_new_game() return weechat.WEECHAT_RC_OK
def infolist_buffer_input_cb(data, buffer, input_data): if input_data == "q" or input_data == "Q": weechat.buffer_close(buffer) else: infolist_display(buffer, input_data) return weechat.WEECHAT_RC_OK
def delete(self): if self.buffer is not None: return weechat.buffer_close(self.buffer) self.server.chats.remove(self)
def delete(self) : if self.buffer is not None : return weechat.buffer_close(self.buffer) self.server.chats.remove(self)
def urlserver_buffer_input_cb(data, buffer, input_data): if input_data in ('q', 'Q'): weechat.buffer_close(buffer) return weechat.WEECHAT_RC_OK
def detach_buffer(self): if self.channel_buffer != None: w.buffer_close(self.channel_buffer) self.channel_buffer = None
def nameday_buffer_input_cb(data, buffer, input_data): """Input callback for buffer.""" if input_data.lower() == 'q': weechat.buffer_close(buffer) return weechat.WEECHAT_RC_OK
def close(self): if self._pointer: weechat.buffer_close(self._pointer)
def close(self): buffer = weechat.buffer_search('python', self.__name__) if buffer: weechat.buffer_close(buffer)
def buffer_input_cb(data, buf, input_data): """Input on weetris buffer.""" if input_data == 'q': weechat.buffer_close(weetris['buffer']) return weechat.WEECHAT_RC_OK
def exit_cb(): log_debug('Exiting') weechat.buffer_close(BUFFER) return weechat.WEECHAT_RC_OK