mirror of
https://github.com/SpaceVim/SpaceVim.git
synced 2025-01-24 09:20:06 +08:00
85 lines
2.3 KiB
VimL
Vendored
85 lines
2.3 KiB
VimL
Vendored
"=============================================================================
|
|
" 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
|