1
0
mirror of https://github.com/SpaceVim/SpaceVim.git synced 2025-01-24 09:20:06 +08:00
SpaceVim/bundle/vim-chat/autoload/chat/irc.vim
2023-03-26 13:50:22 +08:00

85 lines
2.3 KiB
VimL

"=============================================================================
" irc.vim --- irc protocol for vim-chat
" Copyright (c) 2016-2023 Wang Shidong & Contributors
" Author: Wang Shidong < wsdjeg@outlook.com >
" URL: https://spacevim.org
" License: GPLv3
"=============================================================================
let g:chat_irc_server_address = 'irc.libera.chat'
let g:char_irc_server_port = '6667'
let s:server_lib = g:_spacevim_root_dir . 'bundle/Chatting-server/target'
let s:LOG = SpaceVim#logger#derive('irc')
let s:JOB = SpaceVim#api#import('job')
function! chat#irc#send(room, msg) abort
call chat#irc#send_raw(printf('PRIVMSG %s %s', a:room, a:msg))
call chat#windows#push({
\ 'user' : 'wsdjeg2',
\ 'username' : 'wsdjeg2',
\ 'room' : a:room,
\ 'msg' : a:msg,
\ 'time': strftime("%Y-%m-%d %H:%M"),
\ })
endfunction
function! chat#irc#enter_room(room) abort
call chat#irc#send_raw('JOIN ' . a:room)
return 1
endfunction
let s:irc_channel_id = 0
function! chat#irc#send_raw(msg) abort
call s:JOB.send(s:irc_channel_id, a:msg)
endfunction
function! chat#irc#get_channels() abort
if s:irc_channel_id <= 0
let s:irc_channel_id = s:JOB.start(['java', '-cp', s:server_lib, 'com.wsdjeg.chat.Client', g:chat_irc_server_address, g:char_irc_server_port],{
\ 'on_stdout' : function('s:on_data'),
\ 'on_exit' : function('s:on_exit'),
\ })
call chat#irc#send_raw('NICK wsdjeg2')
call chat#irc#send_raw('USER wsdjeg2 - - wsdjeg2')
endif
return []
endfunction
function! s:on_data(id, data, name) abort
for line in a:data
let line = substitute(line, '\r', '', 'g')
call s:LOG.debug(line)
if line =~# 'PRIVMSG'
let user = matchstr(line, '^:\zs[^!]*')
let room = matchstr(line, 'PRIVMSG\s\zs#\S*')
let msg = matchstr(line, 'PRIVMSG\s#\S*\s:\zs.*')
call chat#windows#push({
\ 'user' : user,
\ 'username' : user,
\ 'room' : room,
\ 'msg' : msg,
\ 'time': strftime("%Y-%m-%d %H:%M"),
\ })
endif
endfor
endfunction
function! s:on_exit(...) abort
let s:irc_channel_id = 0
endfunction
function! s:on_vim_data(channel, data) abort
call s:LOG.debug(a:data)
endfunction
function! chat#irc#get_user_count(room) abort
return ''
endfunction