Example #1
0
 def Check_Nick(self, prefix):
     if weechat.nicklist_search_nick(self.buffer_ptr, '', prefix):
         return prefix
     else:
         wildcards = '+@'
         if prefix[0] in wildcards:
             if weechat.nicklist_search_nick(self.buffer_ptr, '', prefix[1:]):
                 return prefix[1:]
Example #2
0
 def Check_Nick(self, prefix):
     if weechat.nicklist_search_nick(self.buffer_ptr, '', prefix):
         return prefix
     else:
         wildcards = '+@'
         if prefix[0] in wildcards:
             if weechat.nicklist_search_nick(self.buffer_ptr, '',
                                             prefix[1:]):
                 return prefix[1:]
Example #3
0
def channel_has_nick(fserver, fchannel, fnick):
    """Check if channel has nick in it."""
    # noinspection PyProtectedMember
    function_name = sys._getframe().f_code.co_name  # pylint: disable=W0212

    wp.debug(function_name, "START : %s" % fnick, wdb.SHOW_START)
    thisbuffer = w.buffer_search("", "%s.%s" % (fserver, fchannel))
    # check for nick in the buffer
    is_online = bool(w.nicklist_search_nick(thisbuffer, "", fnick))
    if (fnick == "FlipMoran" and not (is_online)):
        is_online = bool(w.nicklist_search_nick(thisbuffer, "", "FlipMoran2"))
    return is_online
Example #4
0
def connect_to_slack(browser):
  global stuff, login_data, nick, connected, general_buffer_ptr, nick_ptr, name
  reply = browser.open('https://%s' % (domain))
  try:
    browser.select_form(nr=0)
    browser.form['email'] = email
    browser.form['password'] = password
    reply = browser.submit()
  except:
    pass
  #TODO: this is pretty hackish, i am grabbing json from an html comment
  if reply.code == 200:
    data = reply.read()
    n = data.split('var boot_data = {')[1]
    n = n.split("TS.boot(boot_data)")[0]
    n = re.split('[\n\t]', n)
    settings = filter(None, n)
    setting_hash = {}
    for setting in settings:
      name, setting = re.split('[^\w{[\']+',setting, 1)
      setting_hash[name] = setting.lstrip("'").rstrip(",'")
    stuff = setting_hash
    login_data = json.loads(stuff['login_data'])
    nick = login_data["self"]["name"]
    create_slack_lookup_hashes()
    create_slack_websocket(login_data)
    general_buffer_ptr  = w.buffer_search("",server+".#general")
    nick_ptr = w.nicklist_search_nick(general_buffer_ptr,'',nick)
    name = w.nicklist_nick_get_string(general_buffer_ptr,nick,'name')
    connected = True
    return True
  else:
    stuff = None
    connected = False
    return False
Example #5
0
def privmsg(data, signal, signal_data):
    (server, signal) = signal.split(",")
    channels = wc.config_get_plugin('channels').replace(',', '|')
    api_key = wc.config_get_plugin('api_key')
    if re.match('^\${sec\.data\.(.*)}$', api_key):
        api_key = wc.string_eval_expression(api_key, {}, {}, {})
    bots_list = wc.config_get_plugin('other_bots').split(",")
    details = wc.info_get_hashtable("irc_message_parse", {"message": signal_data, "server": server})
    youtube_regex_match = re.compile(r'(.*https?://)?(www\.)?(youtube|youtu|youtube-nocookie)\.(com|be)/(watch\?v=|embed/|v/|.+\?v=)?([a-zA-Z0-9_-]{11})').match(details['text'])
    buffer_name = details['channel']
    buffer_pointer = wc.info_get("irc_buffer", "%s,%s" % (server, buffer_name))
    channels_regex = re.compile(r'(%s)' % (channels), re.I)
    bots_exist = False
    if channels_regex.match(buffer_name) and youtube_regex_match:
        if not bots_list == "not_set":
            for other_bots in bots_list:
                bots_test = wc.nicklist_search_nick(buffer_pointer, "", other_bots)
                if bots_test:
                    bots_exist = True
        if not bots_exist:
            if not api_key == "not_set":
                vid_id = youtube_regex_match.group(6)
                rvt = requests.get('https://www.googleapis.com/youtube/v3/videos/?id={0}&part=snippet&key={1}'.format(vid_id, api_key))
                rvc = requests.get('https://www.googleapis.com/youtube/v3/videos/?id={0}&part=statistics&key={1}'.format(vid_id, api_key))
                try:
                    vid_title = rvt.json()['items'][0]['snippet']['title'].encode('utf-8')
                    vid_channel = rvt.json()['items'][0]['snippet']['channelTitle'].encode('utf-8')
                    vid_views = rvc.json()['items'][0]['statistics']['viewCount']
                    wc.command("", r"/msg {0} [Youtube] {1} | Channel: {2} | Views: {3}".format(buffer_name, vid_title, vid_channel, vid_views))
                except:
                    wc.command("", r"/msg {0} [Youtube] Error getting video info.".format(buffer_name))
            else:
                wc.command("", r"/msg {0} Youtube api key not set.".format(buffer_name))
    return wc.WEECHAT_RC_OK
Example #6
0
def get_nick_prefix(pointer):
    nick = weechat.buffer_get_string(pointer, "localvar_nick")
    nick_pointer = weechat.nicklist_search_nick(pointer, "", nick)

    prefix = weechat.nicklist_nick_get_string(pointer, nick_pointer, "prefix")

    return prefix
Example #7
0
def add_nick(name, buffer, group):
    group = get_nick_group(buffer, 'bot2human')

    if not w.nicklist_search_nick(buffer, group, name):
        w.nicklist_add_nick(buffer, group, name,
                            "weechat.color.nicklist_group", "~", "lightgreen",
                            1)
    return w.WEECHAT_RC_OK
Example #8
0
def add_nick(name, buffer, group):
    # You may uncomment the following line if you want want these nicks grouped.
    # However, Glowing Bear will error and won't show you added nicks, if
    # the group is empty at the moment you open the channel buffer.
    group = get_nick_group(buffer, 'bot2human')

    if not w.nicklist_search_nick(buffer, group, name):
        w.nicklist_add_nick(buffer, group, name, "weechat.color.nicklist_group", "~", "lightgreen", 1)
    return w.WEECHAT_RC_OK
Example #9
0
def process_presence_change(data):
  global nick_ptr
  if data["user"] == nick:
    nick_ptr = w.nicklist_search_nick(general_buffer_ptr,'',nick)
    if data["presence"] == 'active':
      w.nicklist_nick_set(general_buffer_ptr, nick_ptr, "prefix", "+")
    else:
      w.nicklist_nick_set(general_buffer_ptr, nick_ptr, "prefix", " ")
  else:
    pass
Example #10
0
def add_nick(name, buffer, group):
    # You may uncomment the following line if you want want these nicks grouped.
    # However, Glowing Bear will error and won't show you added nicks, if
    # the group is empty at the moment you open the channel buffer.
    group = get_nick_group(buffer, 'bot2human')

    if not w.nicklist_search_nick(buffer, group, name):
        w.nicklist_add_nick(buffer, group, name,
                            "weechat.color.nicklist_group", "~", "lightgreen",
                            1)
    return w.WEECHAT_RC_OK
Example #11
0
def setup_group_buffer(groupId):
    global groups
    group = groups[groupId]
    buffer = get_buffer(groupId, True)
    set_buffer_name(buffer, group['name'])
    weechat.buffer_set(buffer, "nicklist", "1")
    weechat.buffer_set(buffer, "nicklist_display_groups", "0")
    for member in group['members']:
        member_name = contact_name(member['number'])
        entry = weechat.nicklist_search_nick(buffer, "", member_name)
        if len(entry) == 0:
            logger.debug("Adding %s to group %s", member_name, groupId)
            weechat.nicklist_add_nick(buffer, "", member_name, "", "", "", 1)
Example #12
0
def update_fullname(buffer, name):
    if name not in nicklist:
        weechat.prnt('', 'Name %s not known' % name)
        return
    nick = weechat.nicklist_search_nick(buffer, '', name)
    if not nick:
        weechat.prnt('', 'Nick not found for %r in %s' % (name, buffer))
        return

    fullname = encode(nicklist[name]['name'])
    prefix = weechat.nicklist_nick_get_string(buffer, nick, 'prefix')
    if not prefix.startswith(fullname):
        prefix = '%s %s' % (fullname, prefix)
        weechat.nicklist_nick_set(buffer, nick, 'prefix', prefix)
Example #13
0
def privmsg(data, signal, signal_data):
    (server, signal) = signal.split(',')
    channels = wc.config_get_plugin('channels').replace(',', '|')
    consumer_key = wc.config_get_plugin('consumer_key')
    consumer_secret = wc.config_get_plugin('consumer_secret')
    access_token_key = wc.config_get_plugin('access_token_key')
    access_token_secret = wc.config_get_plugin('access_token_secret')
    sec = re.compile('^\${sec\.data\.(.*)}$')
    if sec.match(consumer_key):
        consumer_key = wc.string_eval_expression(consumer_key, {}, {}, {})
    if sec.match(consumer_secret):
        consumer_secret = wc.string_eval_expression(consumer_secret, {}, {}, {})
    if sec.match(access_token_key):
        access_token_key = wc.string_eval_expression(access_token_key, {}, {}, {})
    if sec.match(access_token_secret):
        access_token_secret = wc.string_eval_expression(access_token_secret, {}, {}, {})
    bots_list = wc.config_get_plugin('other_bots').split(',')
    details = wc.info_get_hashtable('irc_message_parse', {'message': signal_data, 'server': server})
    twitter_regex_match = re.compile(r'(.*https?://)?twitter\.com/.*/status/([0-9]{18})(.*)').match(details['text'])
    buffer_name = details['channel']
    buffer_pointer = wc.info_get('irc_buffer', '%s,%s' % (server, buffer_name))
    channels_regex = re.compile(r'(%s)' % (channels), re.I)
    bots_exist = False
    if channels_regex.match(buffer_name) and twitter_regex_match:
        if not bots_list == 'not_set':
            for other_bots in bots_list:
                bots_test = wc.nicklist_search_nick(buffer_pointer, '', other_bots)
                if bots_test:
                    bots_exist = True
        if not bots_exist:
            if consumer_key == 'not_set':
                wc.command('', r'/msg {0} Twitter consumer_key not set.'.format(buffer_name))
            elif consumer_secret == 'not_set':
                wc.command('', r'/msg {0} Twitter consumer_secret not set.'.format(buffer_name))
            elif access_token_key == 'not_set':
                wc.command('', r'/msg {0} Twitter access_token_key not set.'.format(buffer_name))
            elif access_token_secret == 'not_set':
                wc.command('', r'/msg {0} Twitter access_token_secret not set.'.format(buffer_name))
            else:
                tweet_id = twitter_regex_match.group(2)
                tweet = TwitterAPI(consumer_key, consumer_secret, access_token_key, access_token_secret).request('statuses/show/:{0}'.format(tweet_id))
                try:
                    tweet_message = tweet.json()['text'].replace('\n', ' ').encode('utf-8')
                    tweet_message = HTMLParser().unescape(tweet_message)
                    tweet_user = tweet.json()['user']['screen_name'].encode('utf-8')
                    wc.command('', r'/msg {0} [Twitter] "{1}" by @{2}'.format(buffer_name, tweet_message, tweet_user))
                except:
                    wc.command('', r'/msg {0} [Twitter] Error getting tweet info.'.format(buffer_name))
    return wc.WEECHAT_RC_OK
Example #14
0
def handler(data, buffer, argList):

  if len(argList.split(" ")) < 2:
  	weechat.prnt("", "Wrong number of parameters for kbtimeout")
  	return weechat.WEECHAT_RC_ERROR;
  
  nick = argList.split(" ")[0]
  timeout = argList.split(" ")[1]
  
  message = ""
  if len(argList.split(" ")) > 2:
  	message = argList.split(" ", 2)[2]

  nick_ptr = weechat.nicklist_search_nick(buffer, "", nick)
  
  buffer_name = weechat.buffer_get_string(buffer, "name");
  if nick_ptr:
    weechat.command(buffer, "/kickban " + nick + " " + message)
    weechat.hook_timer(int(timeout) * 1000, 0, 1, "kickban_callback", buffer_name + ":" + nick)
   	
  return weechat.WEECHAT_RC_OK
Example #15
0
def handler(server, buffer, argList):

  if len(argList.split(" ")) < 2:
  	weechat.prnt(weechat.current_buffer(), "Wrong number of parameters for kbtimeout")
  	return weechat.WEECHAT_RC_ERROR;
  
  nick = argList.split(" ")[0]
  timeout = argList.split(" ")[1]
  
  message = ""
  if len(argList.split(" ")) > 2:
  	message = argList.split(" ", 2)[2]

  nick_ptr = weechat.nicklist_search_nick(weechat.current_buffer(), "", nick)
  
  buffer_name = weechat.buffer_get_string(weechat.current_buffer(), "name");
  if nick_ptr:
    weechat.command(weechat.current_buffer(), "/kickban " + nick + " " + message)
    weechat.hook_timer(int(timeout) * 1000, 0, 1, "kickban_callback", buffer_name + ":" + nick)
   	
  return weechat.WEECHAT_RC_OK
Example #16
0
def handler(data, buffer, argList):

    split_args = argList.split(" ")
    if len(split_args) < 2:
        weechat.prnt("", "Wrong number of parameters for kbtimeout")
        return weechat.WEECHAT_RC_ERROR

    nick = split_args[0]
    timeout = split_args[1]

    message = ""
    if len(split_args) > 2:
        message = argList.split(" ", 2)[2]

    nick_ptr = weechat.nicklist_search_nick(buffer, "", nick)
    infolist = weechat.infolist_get("irc_nick", "",
                                    "{},{}".format("freenode", "##kbtimeout"))

    buffer_name = weechat.buffer_get_string(buffer, "name")

    found_ban_host = None
    while weechat.infolist_next(infolist):
        ban_nick = weechat.infolist_string(infolist, "name")
        ban_host = weechat.infolist_string(infolist, "host")
        ban_account = weechat.infolist_string(infolist, "account")

        if ban_nick == nick:
            found_ban_host = ban_host
    weechat.infolist_free(infolist)

    found_ban_host = found_ban_host[1:]

    if found_ban_host:
        weechat.command(buffer, "/kickban " + found_ban_host + " " + message)
        weechat.hook_timer(
            int(timeout) * 1000, 0, 1, "kickban_callback",
            buffer_name + ":" + found_ban_host)

    return weechat.WEECHAT_RC_OK
Example #17
0
def detect_highlight_spam(buffer_ptr, message):
    """Return True if the message highlights more than the configured threshold
    of users in the nicklist of the channel"""
    threshold = config['highlight_spam_threshold']
    if threshold < 2:
        return False
    checked = set()

    # extract words to check from message
    words = message.split()
    if not weechat.buffer_get_integer(buffer_ptr, 'nicklist_case_sensitive'):
        words = map(str.lower, words)

    for word in words:
        if word in checked:
            continue
        checked.add(word)
        # check if this highlights a user in the channel
        if weechat.nicklist_search_nick(buffer_ptr, "", word.encode('utf-8')):
            threshold -= 1
            if threshold == 0:
                return True
    return False
Example #18
0
def update_nicklist(buffer_name):
    buffer_pointer = weechat.buffer_search('irc', buffer_name)
    if not buffer_pointer:
        return

    group_pointers = {}

    infolist = weechat.infolist_get('nicklist', buffer_pointer, '')
    infolist_string = weechat.infolist_string
    infolist_next = weechat.infolist_next
    while infolist_next(infolist):
        if not infolist_string(infolist, 'type') == 'nick':
            continue

        nick = infolist_string(infolist, 'name')
        if nick not in ident_nick:
            continue
        
        group = infolist_string(infolist, 'group_name')
        color = infolist_string(infolist, 'color')
        prefix = infolist_string(infolist, 'prefix')
        prefix_color = infolist_string(infolist, 'prefix_color')

        if ident_nick[nick]:
            prefix_new = ' '
            group_new = '080|ident'
            color_new = 'green'
        else:
            prefix_new = '~'
            group_new = '081|unident'
            color_new = 'brown'
            prefix_color = 'cyan'

        if prefix[0] != prefix_new[0]:
            if prefix == ' ':
                prefix = prefix_new
                prefix_new = ''
            elif prefix_new != ' ':
                prefix = prefix_new + prefix
                prefix_new = ''

        if color == 'bar_fg':
            color = color_new
            color_new = ''

        if group[:2] == '08':
            group = group_new
            group_new = ''
            try:
                group_pointer = group_pointers[group]
            except KeyError:
                group_pointer = weechat.nicklist_search_group(buffer_pointer, '', group)
                if not group_pointer:
                    group_pointer = weechat.nicklist_add_group(buffer_pointer, '', group,
                            'weechat.color.nicklist_group', 1)
                group_pointers[group] = group_pointer
        else:
            group_pointer = weechat.nicklist_search_group(buffer_pointer, '', group)

        if prefix_new and group_new and color_new:
            # nothing to change
            continue

        #debug('adding nick: %s%s to %s' %(prefix, nick, group))
        nick_pointer = weechat.nicklist_search_nick(buffer_pointer, '', nick)
        if nick_pointer:
            weechat.nicklist_remove_nick(buffer_pointer, nick_pointer)
        nick_pointer = weechat.nicklist_add_nick(buffer_pointer, group_pointer, nick, color,
                prefix, prefix_color, 1)
        nicklist[buffer_name, nick] = (buffer_pointer, nick_pointer)
    weechat.infolist_free(infolist)
def tc_bar_item (data, item, window):
    '''Item constructor'''
    # window empty? root bar!
    if not window:
        window = w.current_window()

    global length, cursor_pos, tc_input_text, count_over,tc_options
    count_over = '0'
    sms = ''
    tweet = ''
    reverse_chars = 0

    ptr_buffer = w.window_get_pointer(window,"buffer")
    if ptr_buffer == "":
        return ""

    length = w.buffer_get_integer(ptr_buffer,'input_length')
    start_pos = int(tc_options['start_cursor_pos_at_zero'].lower() == 'off')
    cursor_pos = w.buffer_get_integer(ptr_buffer,'input_pos') + start_pos

    plugin = w.buffer_get_string(ptr_buffer, 'plugin')

    host = ''
    if plugin == 'irc':
        servername = w.buffer_get_string(ptr_buffer, 'localvar_server')
        channelname = w.buffer_get_string(ptr_buffer, 'localvar_channel')
        channel_type = w.buffer_get_string(ptr_buffer, 'localvar_type')
        name = w.buffer_get_string(ptr_buffer, 'localvar_name')
        input_line = w.buffer_get_string(ptr_buffer, 'input')
        mynick = w.info_get('irc_nick', servername)
        nick_ptr = w.nicklist_search_nick(ptr_buffer, '', mynick)

        # check for a sms message
        if channel_type == 'private' and name in tc_options['sms_buffer'].split(","):
            # 160 chars for a sms
            # 'sms:name:text'
            get_sms_text = re.match(r'(s|sms):(.*?:)(.*)', input_line)
            if get_sms_text:
#            if get_sms_text.group(2):
                sms_len = len(get_sms_text.group(3))
#                input_length = len(input_line)
#                sms_prefix = input_length - sms_len
                sms = 160-sms_len
                reverse_chars = sms
            else:
                get_sms_text = re.match(r'(r|reply):(.*)', input_line)
                if get_sms_text:
                    sms_len = len(get_sms_text.group(2))
                    sms = 160-sms_len
                    reverse_chars = sms

        # check for a tweet buffer
        elif name in tc_options['tweet_buffer'].split(","):
            # 140 chars for a tweet! prefix "post " = 5 chars

            # check out if length >= 5 and matches "post "
            if length >= 5 and re.match(r'post (.*)', input_line):
                tweet = 145 - length
                reverse_chars = tweet

        # get host and length from host
        elif servername != channelname:
            infolist = w.infolist_get('irc_nick', '', '%s,%s,%s' % (servername,channelname,mynick))
#            w.prnt("","%s.%s.%s.%s" % (servername,channelname,mynick,nick_ptr))
            while w.infolist_next(infolist):
                host = w.infolist_string(infolist, 'host')
            w.infolist_free(infolist)
            if host != '':
                host = ':%s!%s PRIVMSG %s :' % (mynick,host,channelname)
                host_length = len(host)
#        w.prnt("","%d" % host_length)
                reverse_chars = (475 - int(host_length) - length -1)    # -1 = return
            else:
                reverse_chars = (int(tc_options['max_chars']) - length)
        else:
            reverse_chars = (int(tc_options['max_chars']) - length)
    else:
        # reverse check for max_chars
        reverse_chars = (int(tc_options['max_chars']) - length)

    if reverse_chars == 0:
        reverse_chars = "%s" % ("0")
    else:
        if reverse_chars < 0:
            count_over = "%s%s%s" % (w.color(tc_options['warn_colour']),str(reverse_chars*-1), w.color('default'))
            reverse_chars = "%s" % ("0")
            tc_action_cb()
        else:
            reverse_chars = str(reverse_chars)

    out_format = tc_options['format']
    if tc_options['warn']:
        if length >= int(tc_options['warn']):
            length_warn = "%s%s%s" % (w.color(tc_options['warn_colour']), str(length), w.color('default'))
            out_format = out_format.replace('%L', length_warn)
        else:
            out_format = out_format.replace('%L', str(length))
    else:
            out_format = out_format.replace('%L', str(length))

    out_format = out_format.replace('%P', str(cursor_pos))
    if sms:
        out_format = out_format.replace('%R', "s:" + reverse_chars)
    elif tweet:
        out_format = out_format.replace('%R', "t:" + reverse_chars)
    else:
        out_format = out_format.replace('%R', reverse_chars)
    out_format = out_format.replace('%C', count_over)
#    out_format = out_format.replace('%T', str(tweet))
#    out_format = out_format.replace('%S', str(sms))
    tc_input_text = out_format

    return substitute_colors(tc_input_text)
Example #20
0
def remove_from_nicklist(buf, nick, group=""):
    """Remove nick from the nicklist."""
    if group == "":
        group = friends_nicks_group[buf]
    nick_ptr = weechat.nicklist_search_nick(buf, group, nick)
    weechat.nicklist_remove_nick(buf, nick_ptr)
def add_nick(name, buffer, group):
    if not weechat.nicklist_search_nick(buffer, "", name):
        weechat.nicklist_add_nick(buffer, group, name,
                                  "weechat.color.nicklist_group", " ",
                                  "lightgreen", 1)
    return weechat.WEECHAT_RC_OK
Example #22
0
def add_nick(info, bot, rnick, rtext, result):
    buffer = weechat.buffer_search("==", "irc.%s.%s" % (info["server"], info["channel"]))
    if buffer and not weechat.nicklist_search_nick(buffer, "", rnick):
        result.append(":%s!~%s@%s.%s JOIN %s" % (rnick, rnick, info["nick"], SCRIPT_NAME, info["channel"]))
Example #23
0
def channel_has_nick(server, channel, nick):
    buffer = w.buffer_search("", "%s.%s" % (server, channel))
    return bool(w.nicklist_search_nick(buffer, "", nick))
Example #24
0
def set_colors( users_logged_in ):
	global rbon_messages								# Variable to hold contents of rbon bar item
	global first_run									# Script needs one run to populate online and offline dictionaries

	global online_dict
	global offline_dict
	global outgoing_list
	global incoming_list

	nicks = weechat.infolist_get( 'irc_nick', '', 'redbrick,#lobby' )
	buff_ptr = weechat.buffer_search( "irc","redbrick.#lobby" )
	if( nicks == "" and buff_ptr == "" ):
		nicks = weechat.infolist_get( 'irc_nick', '', 'irc.redbrick.dcu.ie,#lobby' )
		buff_ptr = weechat.buffer_search( "irc","irc.redbrick.dcu.ie.#lobby" )

	group_normal_ptr = weechat.nicklist_search_group( buff_ptr, "", "..." )
	group_op_ptr = weechat.nicklist_search_group( buff_ptr, "", "o" )
	color_nick_online = weechat.config_get_plugin( "color_nick_online" )
	if( nicks != None ):
		if( nicks == {} ):
			weechat.prnt( "No nicks" )
		else:
			while weechat.infolist_next( nicks ):										# Stepping through each nick in #lobby
				name = weechat.infolist_string(nicks, 'name')
				host = weechat.infolist_string(nicks, 'host')
				flag = weechat.infolist_integer(nicks, 'flags')
				timeout = int(weechat.config_get_plugin("interim_period"))
				if( "@Redbrick.dcu.ie" in host ):
					rnick = re.sub('@Redbrick.dcu.ie', '', host)						# Strip real nick from host
					nick_ptr = weechat.nicklist_search_nick(buff_ptr, "", name)         # Find nick pointer

					#
					# - Incoming/Outgoing lists won't be populated if at least one iteration of the list hasn't happened.
					#		first_run set false at the end of first iteration
					# - Set outgoing if - user is offline, user WAS online on the last iteration, user is not currently outgoing
					# - Set incoming if - user is online, user was NOT online on the last iteration, user is not currently incoming 
					#

					#
					# - Script uses stacks
					#		When user moves into a state they are pushed onto the stack
					#		After a set time hook_timer's callback pops the user off the stack and they are moved into either offline or online dictionary
					#

					# If NOT already logged in NOT first run WAS online on last loop NOT in outgoing list 

					if( not rnick in users_logged_in and not first_run and rnick in online_dict and rnick not in outgoing_list ):
						# weechat.prnt("", "OUTgoing user - %s" % rnick)
						outgoing_list.insert(0, rnick)
						weechat.hook_timer(timeout * 1000, 0, 1, "pop_outgoing", "")				# TODO - This hook executes pop_outgoing immediately instead of waiting 10 seconds
						color = weechat.config_get_plugin( "outgoing_color" )
						# TODO - Add OUTGOING nick to rbon_messages here to be displayed in the rbon bar item
						rbon_nick_color = weechat.color( color )
						string = "%s%s" % ( rbon_nick_color,name )

						rbon_messages.append( string )
						weechat.bar_item_update( "rbon" )

						if( rnick in online_dict ):
							del online_dict[ rnick ]

					# If IS logged in NOT first run IN nicklist WAS offline on last loop NOT in incoming list

					elif( rnick in users_logged_in and not first_run and rnick in offline_dict and rnick not in incoming_list ):
						# weechat.prnt("", "INcoming user - %s" % rnick)
						incoming_list.insert(0, rnick)
						weechat.hook_timer(timeout * 1000, 0, 1, "pop_incoming", "")				# TODO - This hook executes pop_incoming immediately instead of waiting 10 seconds
						color = weechat.config_get_plugin("incoming_color")												# Color incoming users red
						# TODO - Add INCOMING nick to rbon_messages here to be displayed in the rbon bar item
						rb_nick_color = weechat.color( color )	
						string = "%s%s" % ( rb_nick_color, name )
						
						rbon_messages.append( string )
						weechat.bar_item_update( "rbon" )

						if( rnick in offline_dict ):
							del offline_dict[rnick]

					elif( rnick in incoming_list ): color = weechat.config_get_plugin( "incoming_color" )

					elif( rnick in outgoing_list ): color = weechat.config_get_plugin( "outgoing_color" )

					# Check to see if that user is logged
					elif( rnick in users_logged_in ):
						if( rnick in offline_dict ):
							del offline_dict[rnick]
						online_dict[rnick] = ""
						color = weechat.config_get_plugin( "online_color" )												# Color online user user nicks

					else:
						offline_dict[rnick] = ""
						if( rnick in online_dict ):
							del online_dict[rnick]
						color = weechat.config_get_plugin( "offline_color" )											# Colour offline user nicks

					# Adding nicks with relevant colours back into the nicklist

					if( buff_ptr and nick_ptr ):
						# TODO - Decide whether or not this REMOVE should be moved...
						weechat.nicklist_remove_nick(buff_ptr, nick_ptr)
					if( buff_ptr ):															# The nick may already have been removed from the buffer....
						if( flag == 0 ):													# Check if normal user
							weechat.nicklist_add_nick(buff_ptr, group_normal_ptr, name, weechat.color(color), " ", color, 1)
						elif( flag == 8 ):													# Check if ops (include @ prefix) 
							weechat.nicklist_add_nick(buff_ptr, group_op_ptr, name, weechat.color(color), "@", color, 1)
	first_run = 0
	users_rb_dict.clear()
	weechat.infolist_free( nicks )
	return weechat.WEECHAT_RC_OK
def add_nick(name, buffer, group):
    if not weechat.nicklist_search_nick(buffer, "", name):
        weechat.nicklist_add_nick(buffer, group, name, "weechat.color.nicklist_group", " ", "lightgreen", 1)
    return weechat.WEECHAT_RC_OK
Example #26
0
def weechat_nicklist_search_nick(buffer, nick):
    return weechat.nicklist_search_nick(buffer, "", nick)
Example #27
0
def isnick(buff, nickname):
    return w.nicklist_search_nick(buff, "", nickname)
def remove_nick(name, buffer, group):
    pointer = weechat.nicklist_search_nick(buffer, "", name)
    if pointer:
        weechat.nicklist_remove_nick(buffer, pointer)
    return weechat.WEECHAT_RC_OK
Example #29
0
def add_nick(name, buffer, group):
    group = get_nick_group(buffer, 'bot2human')

    if not w.nicklist_search_nick(buffer, group, name):
        w.nicklist_add_nick(buffer, group, name, "weechat.color.nicklist_group", "~", "lightgreen", 1)
    return w.WEECHAT_RC_OK
Example #30
0
def remove_from_nicklist(buf, nick):
    """Remove nick from the nicklist."""
    nick_ptr = wc.nicklist_search_nick(buf, "", nick)
    wc.nicklist_remove_nick(buf, nick_ptr)
def weechat_nicklist_search_nick(buffer, nick):
    return weechat.nicklist_search_nick(buffer, "", nick)
Example #32
0
def remove_from_nicklist(buf, nick):
    """Remove nick from the nicklist."""
    nick_ptr = wc.nicklist_search_nick(buf, "", nick)
    wc.nicklist_remove_nick(buf, nick_ptr)
Example #33
0
def tc_bar_item (data, item, window):
    '''Item constructor'''
    # window empty? root bar!
    if not window:
        window = w.current_window()

    global length, cursor_pos, tc_input_text, count_over,tc_options
    count_over = '0'
    sms = ''
    tweet = ''
    reverse_chars = 0

    ptr_buffer = w.window_get_pointer(window,"buffer")
    if ptr_buffer == "":
        return ""

    length = w.buffer_get_integer(ptr_buffer,'input_length')
    start_pos = int(tc_options['start_cursor_pos_at_zero'].lower() == 'off')
    cursor_pos = w.buffer_get_integer(ptr_buffer,'input_pos') + start_pos

    plugin = w.buffer_get_string(ptr_buffer, 'plugin')

    host = ''
    if plugin == 'irc':
        servername = w.buffer_get_string(ptr_buffer, 'localvar_server')
        channelname = w.buffer_get_string(ptr_buffer, 'localvar_channel')
        channel_type = w.buffer_get_string(ptr_buffer, 'localvar_type')
        name = w.buffer_get_string(ptr_buffer, 'localvar_name')
        input_line = w.buffer_get_string(ptr_buffer, 'input')
        mynick = w.info_get('irc_nick', servername)
        nick_ptr = w.nicklist_search_nick(ptr_buffer, '', mynick)

        # check for a sms message
        if channel_type == 'private' and name in tc_options['sms_buffer'].split(","):
            # 160 chars for a sms
            # 'sms:name:text'
            get_sms_text = re.match(r'(s|sms):(.*?:)(.*)', input_line)
            if get_sms_text:
#            if get_sms_text.group(2):
                sms_len = len(get_sms_text.group(3))
#                input_length = len(input_line)
#                sms_prefix = input_length - sms_len
                sms = 160-sms_len
                reverse_chars = sms
            else:
                get_sms_text = re.match(r'(r|reply):(.*)', input_line)
                if get_sms_text:
                    sms_len = len(get_sms_text.group(2))
                    sms = 160-sms_len
                    reverse_chars = sms

        # check for a tweet buffer
        elif name in tc_options['tweet_buffer'].split(","):
            # 140 chars for a tweet! prefix "post " = 5 chars

            # check out if length >= 5 and matches "post "
            if length >= 5 and re.match(r'post (.*)', input_line):
                tweet = 145 - length
                reverse_chars = tweet

        # get host and length from host
        elif servername != channelname:
            infolist = w.infolist_get('irc_nick', '', '%s,%s,%s' % (servername,channelname,mynick))
#            w.prnt("","%s.%s.%s.%s" % (servername,channelname,mynick,nick_ptr))
            while w.infolist_next(infolist):
                host = w.infolist_string(infolist, 'host')
            w.infolist_free(infolist)
            if host != '':
                host = ':%s!%s PRIVMSG %s :' % (mynick,host,channelname)
                host_length = len(host)
#        w.prnt("","%d" % host_length)
                reverse_chars = (475 - int(host_length) - length -1)    # -1 = return
            else:
                reverse_chars = (int(tc_options['max_chars']) - length)
        else:
            reverse_chars = (int(tc_options['max_chars']) - length)
    else:
        # reverse check for max_chars
        reverse_chars = (int(tc_options['max_chars']) - length)

    if reverse_chars == 0:
        reverse_chars = "%s" % ("0")
    else:
        if reverse_chars < 0:
            count_over = "%s%s%s" % (w.color(tc_options['warn_colour']),str(reverse_chars*-1), w.color('default'))
            reverse_chars = "%s" % ("0")
            tc_action_cb()
        else:
            reverse_chars = str(reverse_chars)

    out_format = tc_options['format']
    if tc_options['warn']:
        if length >= int(tc_options['warn']):
            length_warn = "%s%s%s" % (w.color(tc_options['warn_colour']), str(length), w.color('default'))
            out_format = out_format.replace('%L', length_warn)
        else:
            out_format = out_format.replace('%L', str(length))
    else:
            out_format = out_format.replace('%L', str(length))

    out_format = out_format.replace('%P', str(cursor_pos))
    if sms:
        out_format = out_format.replace('%R', "s:" + reverse_chars)
    elif tweet:
        out_format = out_format.replace('%R', "t:" + reverse_chars)
    else:
        out_format = out_format.replace('%R', reverse_chars)
    out_format = out_format.replace('%C', count_over)
#    out_format = out_format.replace('%T', str(tweet))
#    out_format = out_format.replace('%S', str(sms))
    tc_input_text = out_format

    return substitute_colors(tc_input_text)
Example #34
0
def roomRead(pssName, _):
	global _tmp_room_initial

	for r in cache.rooms.values():

		if not _tmp_room_initial[r.get_name()]:
			continue

		msgs = []

		ctx = EventContext()
		ctx.reset(PSS_BUFTYPE_ROOM, pssName, r.get_name())
		buf = weechat.buffer_search("python", ctx.to_buffer_name())

		(_, fails) = r.feedcollection.gethead(cache.get_active_bzz(), True)
		for f in fails:
			nick = cache.get_contact_by_public_key(f.get_public_key()).get_nick()
			nickbufp = weechat.nicklist_search_nick(buf, "", nick)
			#weechat.nicklist_remove_nick(buf, nickbufp)
			weechat.nicklist_nick_set(buf, nickbufp, "color", "240")
			wOut(
				PSS_BUFPFX_WARN,
				[buf],
				"---",
				"Feed for '" +  nick + "' timed out and has been deactivated. Read-add manually to reactivate"
			)


		msgs = r.feedcollection.get()
		#sys.stderr.write("getting feed for room: " + repr(r) + ": " + "msglen" + repr(len(msgs)))

		for m in msgs:

			# use set nick if message sender is self
			# \todo eliminate, move to instant feedback on send for self
			contact = None
			nick = ""
			ps = cache.get_pss(ctx.get_node())
			if ps.get_public_key() == m.key:
				contact = ps.account
				nick = cache.get_nodeself(ctx.get_node())
			# \todo use binary key repr in nicks dict
			else:
				contact = cache.get_contact_by_public_key(m.key)
				nick = contact.get_nick()

			msg = r.extract_message(m.content, contact)

			wOut(
				PSS_BUFPFX_DEBUG,
				[],
				">>>",
				"write buf " + ctx.to_buffer_name() + " room " + r.get_name()
			)
			wOut(
				PSS_BUFPFX_IN,
				[buf],
				nick,
				msg
			)


	return weechat.WEECHAT_RC_OK	
Example #35
0
def channel_has_nick(server, channel, nick):
    buffer = w.buffer_search("", "%s.%s" % (server, channel))
    return bool(w.nicklist_search_nick(buffer, "", nick))
def remove_nick(name, buffer, group):
    pointer = weechat.nicklist_search_nick(buffer, "", name)
    if pointer:
        weechat.nicklist_remove_nick(buffer, pointer)
    return weechat.WEECHAT_RC_OK
Example #37
0
def isnick(buff, nickname):
    return w.nicklist_search_nick(buff, "", nickname)
Example #38
0
def update_nicklist(buffer_name):
    buffer_pointer = weechat.buffer_search('irc', buffer_name)
    if not buffer_pointer:
        return

    group_pointers = {}

    infolist = weechat.infolist_get('nicklist', buffer_pointer, '')
    infolist_string = weechat.infolist_string
    infolist_next = weechat.infolist_next
    while infolist_next(infolist):
        if not infolist_string(infolist, 'type') == 'nick':
            continue

        nick = infolist_string(infolist, 'name')
        if nick not in ident_nick:
            continue

        group = infolist_string(infolist, 'group_name')
        color = infolist_string(infolist, 'color')
        prefix = infolist_string(infolist, 'prefix')
        prefix_color = infolist_string(infolist, 'prefix_color')

        if ident_nick[nick]:
            prefix_new = ' '
            group_new = '080|ident'
            color_new = 'green'
        else:
            prefix_new = '~'
            group_new = '081|unident'
            color_new = 'brown'
            prefix_color = 'cyan'

        if prefix[0] != prefix_new[0]:
            if prefix == ' ':
                prefix = prefix_new
                prefix_new = ''
            elif prefix_new != ' ':
                prefix = prefix_new + prefix
                prefix_new = ''

        if color == 'bar_fg':
            color = color_new
            color_new = ''

        if group[:2] == '08':
            group = group_new
            group_new = ''
            try:
                group_pointer = group_pointers[group]
            except KeyError:
                group_pointer = weechat.nicklist_search_group(
                    buffer_pointer, '', group)
                if not group_pointer:
                    group_pointer = weechat.nicklist_add_group(
                        buffer_pointer, '', group,
                        'weechat.color.nicklist_group', 1)
                group_pointers[group] = group_pointer
        else:
            group_pointer = weechat.nicklist_search_group(
                buffer_pointer, '', group)

        if prefix_new and group_new and color_new:
            # nothing to change
            continue

        #debug('adding nick: %s%s to %s' %(prefix, nick, group))
        nick_pointer = weechat.nicklist_search_nick(buffer_pointer, '', nick)
        if nick_pointer:
            weechat.nicklist_remove_nick(buffer_pointer, nick_pointer)
        nick_pointer = weechat.nicklist_add_nick(buffer_pointer, group_pointer,
                                                 nick, color, prefix,
                                                 prefix_color, 1)
        nicklist[buffer_name, nick] = (buffer_pointer, nick_pointer)
    weechat.infolist_free(infolist)