Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Sign in / Register
Toggle navigation
G
go-cqhttp
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Locked Files
Issues
0
Issues
0
List
Boards
Labels
Service Desk
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Security & Compliance
Security & Compliance
Dependency List
License Compliance
Packages
Packages
List
Container Registry
Analytics
Analytics
CI / CD
Code Review
Insights
Issues
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
nanahira
go-cqhttp
Commits
65acc888
Commit
65acc888
authored
Aug 23, 2020
by
wdvxdr1123
Committed by
GitHub
Aug 23, 2020
Browse files
Options
Browse Files
Download
Plain Diff
Merge pull request #2 from Mrs4s/master
update
parents
2b92035f
84a82681
Changes
5
Expand all
Show whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
76 additions
and
45 deletions
+76
-45
coolq/cqcode.go
coolq/cqcode.go
+41
-2
global/net.go
global/net.go
+9
-0
go.mod
go.mod
+1
-1
go.sum
go.sum
+4
-22
server/websocket.go
server/websocket.go
+21
-20
No files found.
coolq/cqcode.go
View file @
65acc888
...
@@ -111,6 +111,15 @@ func ToStringMessage(e []message.IMessageElement, code int64, raw ...bool) (r st
...
@@ -111,6 +111,15 @@ func ToStringMessage(e []message.IMessageElement, code int64, raw ...bool) (r st
if
len
(
raw
)
!=
0
{
if
len
(
raw
)
!=
0
{
ur
=
raw
[
0
]
ur
=
raw
[
0
]
}
}
// 方便
m
:=
&
message
.
SendingMessage
{
Elements
:
e
}
reply
:=
m
.
FirstOrNil
(
func
(
e
message
.
IMessageElement
)
bool
{
_
,
ok
:=
e
.
(
*
message
.
ReplyElement
)
return
ok
})
if
reply
!=
nil
{
r
+=
fmt
.
Sprintf
(
"[CQ:reply,id=%d]"
,
ToGlobalId
(
code
,
reply
.
(
*
message
.
ReplyElement
)
.
ReplySeq
))
}
for
_
,
elem
:=
range
e
{
for
_
,
elem
:=
range
e
{
switch
o
:=
elem
.
(
type
)
{
switch
o
:=
elem
.
(
type
)
{
case
*
message
.
TextElement
:
case
*
message
.
TextElement
:
...
@@ -121,8 +130,6 @@ func ToStringMessage(e []message.IMessageElement, code int64, raw ...bool) (r st
...
@@ -121,8 +130,6 @@ func ToStringMessage(e []message.IMessageElement, code int64, raw ...bool) (r st
continue
continue
}
}
r
+=
fmt
.
Sprintf
(
"[CQ:at,qq=%d]"
,
o
.
Target
)
r
+=
fmt
.
Sprintf
(
"[CQ:at,qq=%d]"
,
o
.
Target
)
case
*
message
.
ReplyElement
:
r
+=
fmt
.
Sprintf
(
"[CQ:reply,id=%d]"
,
ToGlobalId
(
code
,
o
.
ReplySeq
))
case
*
message
.
ForwardElement
:
case
*
message
.
ForwardElement
:
r
+=
fmt
.
Sprintf
(
"[CQ:forward,id=%s]"
,
o
.
ResId
)
r
+=
fmt
.
Sprintf
(
"[CQ:forward,id=%s]"
,
o
.
ResId
)
case
*
message
.
FaceElement
:
case
*
message
.
FaceElement
:
...
@@ -418,6 +425,38 @@ func (bot *CQBot) ToElement(t string, d map[string]string, group bool) (message.
...
@@ -418,6 +425,38 @@ func (bot *CQBot) ToElement(t string, d map[string]string, group bool) (message.
return
message
.
NewAt
(
t
),
nil
return
message
.
NewAt
(
t
),
nil
case
"share"
:
case
"share"
:
return
message
.
NewUrlShare
(
d
[
"url"
],
d
[
"title"
],
d
[
"content"
],
d
[
"image"
]),
nil
return
message
.
NewUrlShare
(
d
[
"url"
],
d
[
"title"
],
d
[
"content"
],
d
[
"image"
]),
nil
case
"music"
:
if
d
[
"type"
]
==
"qq"
{
info
,
err
:=
global
.
QQMusicSongInfo
(
d
[
"id"
])
if
err
!=
nil
{
return
nil
,
err
}
if
!
info
.
Get
(
"track_info"
)
.
Exists
()
{
return
nil
,
errors
.
New
(
"song not found"
)
}
aid
:=
strconv
.
FormatInt
(
info
.
Get
(
"track_info.album.id"
)
.
Int
(),
10
)
name
:=
info
.
Get
(
"track_info.name"
)
.
Str
if
len
(
aid
)
<
2
{
return
nil
,
errors
.
New
(
"song error"
)
}
xml
:=
fmt
.
Sprintf
(
`<?xml version='1.0' encoding='UTF-8' standalone='yes' ?><msg serviceID="2" templateID="1" action="web" brief="[分享] %s" sourceMsgId="0" url="https://i.y.qq.com/v8/playsong.html?_wv=1&songid=%s&souce=qqshare&source=qqshare&ADTAG=qqshare" flag="0" adverSign="0" multiMsgFlag="0"><item layout="2"><audio cover="http://imgcache.qq.com/music/photo/album_500/%s/500_albumpic_%s_0.jpg" src="%s" /><title>%s</title><summary>%s</summary></item><source name="QQ音乐" icon="https://i.gtimg.cn/open/app_icon/01/07/98/56/1101079856_100_m.png" url="http://web.p.qq.com/qqmpmobile/aio/app.html?id=1101079856" action="app" a_actionData="com.tencent.qqmusic" i_actionData="tencent1101079856://" appid="1101079856" /></msg>`
,
name
,
d
[
"id"
],
aid
[
:
len
(
aid
)
-
2
],
aid
,
name
,
""
,
info
.
Get
(
"track_info.singer.name"
)
.
Str
)
return
&
message
.
ServiceElement
{
Id
:
60
,
Content
:
xml
,
SubType
:
"music"
,
},
nil
}
if
d
[
"type"
]
==
"custom"
{
xml
:=
fmt
.
Sprintf
(
`<?xml version='1.0' encoding='UTF-8' standalone='yes' ?><msg serviceID="2" templateID="1" action="web" brief="[分享] %s" sourceMsgId="0" url="%s" flag="0" adverSign="0" multiMsgFlag="0"><item layout="2"><audio cover="%s" src="%s"/><title>%s</title><summary>%s</summary></item><source name="音乐" icon="https://i.gtimg.cn/open/app_icon/01/07/98/56/1101079856_100_m.png" url="http://web.p.qq.com/qqmpmobile/aio/app.html?id=1101079856" action="app" a_actionData="com.tencent.qqmusic" i_actionData="tencent1101079856://" appid="1101079856" /></msg>`
,
d
[
"title"
],
d
[
"url"
],
d
[
"image"
],
d
[
"audio"
],
d
[
"title"
],
d
[
"content"
])
return
&
message
.
ServiceElement
{
Id
:
60
,
Content
:
xml
,
SubType
:
"music"
,
},
nil
}
return
nil
,
errors
.
New
(
"unsupported music type: "
+
d
[
"type"
])
default
:
default
:
return
nil
,
errors
.
New
(
"unsupported cq code: "
+
t
)
return
nil
,
errors
.
New
(
"unsupported cq code: "
+
t
)
}
}
...
...
global/net.go
View file @
65acc888
...
@@ -3,6 +3,7 @@ package global
...
@@ -3,6 +3,7 @@ package global
import
(
import
(
"bytes"
"bytes"
"compress/gzip"
"compress/gzip"
"github.com/tidwall/gjson"
"io/ioutil"
"io/ioutil"
"net/http"
"net/http"
"strings"
"strings"
...
@@ -32,3 +33,11 @@ func GetBytes(url string) ([]byte, error) {
...
@@ -32,3 +33,11 @@ func GetBytes(url string) ([]byte, error) {
}
}
return
body
,
nil
return
body
,
nil
}
}
func
QQMusicSongInfo
(
id
string
)
(
gjson
.
Result
,
error
)
{
d
,
err
:=
GetBytes
(
`https://u.y.qq.com/cgi-bin/musicu.fcg?format=json&inCharset=utf8&outCharset=utf-8¬ice=0&platform=yqq.json&needNewCode=0&data={%22comm%22:{%22ct%22:24,%22cv%22:0},%22songinfo%22:{%22method%22:%22get_song_detail_yqq%22,%22param%22:{%22song_type%22:0,%22song_mid%22:%22%22,%22song_id%22:`
+
id
+
`},%22module%22:%22music.pf_song_detail_svr%22}}`
)
if
err
!=
nil
{
return
gjson
.
Result
{},
err
}
return
gjson
.
ParseBytes
(
d
)
.
Get
(
"songinfo.data"
),
nil
}
go.mod
View file @
65acc888
...
@@ -3,7 +3,7 @@ module github.com/Mrs4s/go-cqhttp
...
@@ -3,7 +3,7 @@ module github.com/Mrs4s/go-cqhttp
go 1.14
go 1.14
require (
require (
github.com/Mrs4s/MiraiGo v0.0.0-2020082
1182324-7654a7a2a106
github.com/Mrs4s/MiraiGo v0.0.0-2020082
2190748-ce670caee0a8
github.com/fastly/go-utils v0.0.0-20180712184237-d95a45783239 // indirect
github.com/fastly/go-utils v0.0.0-20180712184237-d95a45783239 // indirect
github.com/gin-gonic/gin v1.6.3
github.com/gin-gonic/gin v1.6.3
github.com/gorilla/websocket v1.4.2
github.com/gorilla/websocket v1.4.2
...
...
go.sum
View file @
65acc888
This diff is collapsed.
Click to expand it.
server/websocket.go
View file @
65acc888
...
@@ -180,33 +180,31 @@ func (c *websocketClient) onBotPushEvent(m coolq.MSG) {
...
@@ -180,33 +180,31 @@ func (c *websocketClient) onBotPushEvent(m coolq.MSG) {
}
}
if
c
.
eventConn
!=
nil
{
if
c
.
eventConn
!=
nil
{
log
.
Debugf
(
"向WS服务器 %v 推送Event: %v"
,
c
.
eventConn
.
RemoteAddr
()
.
String
(),
m
.
ToJson
())
log
.
Debugf
(
"向WS服务器 %v 推送Event: %v"
,
c
.
eventConn
.
RemoteAddr
()
.
String
(),
m
.
ToJson
())
c
.
eventConn
.
Lock
()
conn
:=
c
.
eventConn
defer
c
.
eventConn
.
Unlock
()
conn
.
Lock
()
defer
conn
.
Unlock
()
_
=
c
.
eventConn
.
SetWriteDeadline
(
time
.
Now
()
.
Add
(
time
.
Second
*
15
))
_
=
c
.
eventConn
.
SetWriteDeadline
(
time
.
Now
()
.
Add
(
time
.
Second
*
15
))
if
err
:=
c
.
eventConn
.
WriteJSON
(
m
);
err
!=
nil
{
if
err
:=
c
.
eventConn
.
WriteJSON
(
m
);
err
!=
nil
{
log
.
Warnf
(
"向WS服务器 %v 推送Event时出现错误: %v"
,
c
.
eventConn
.
RemoteAddr
()
.
String
(),
err
)
log
.
Warnf
(
"向WS服务器 %v 推送Event时出现错误: %v"
,
c
.
eventConn
.
RemoteAddr
()
.
String
(),
err
)
_
=
c
.
eventConn
.
Close
()
_
=
c
.
eventConn
.
Close
()
if
c
.
conf
.
ReverseReconnectInterval
!=
0
{
if
c
.
conf
.
ReverseReconnectInterval
!=
0
{
go
func
()
{
time
.
Sleep
(
time
.
Millisecond
*
time
.
Duration
(
c
.
conf
.
ReverseReconnectInterval
))
time
.
Sleep
(
time
.
Millisecond
*
time
.
Duration
(
c
.
conf
.
ReverseReconnectInterval
))
c
.
connectEvent
()
c
.
connectEvent
()
}()
}
}
}
}
}
}
if
c
.
universalConn
!=
nil
{
if
c
.
universalConn
!=
nil
{
log
.
Debugf
(
"向WS服务器 %v 推送Event: %v"
,
c
.
universalConn
.
RemoteAddr
()
.
String
(),
m
.
ToJson
())
log
.
Debugf
(
"向WS服务器 %v 推送Event: %v"
,
c
.
universalConn
.
RemoteAddr
()
.
String
(),
m
.
ToJson
())
c
.
universalConn
.
Lock
()
conn
:=
c
.
universalConn
defer
c
.
universalConn
.
Unlock
()
conn
.
Lock
()
defer
conn
.
Unlock
()
_
=
c
.
universalConn
.
SetWriteDeadline
(
time
.
Now
()
.
Add
(
time
.
Second
*
15
))
_
=
c
.
universalConn
.
SetWriteDeadline
(
time
.
Now
()
.
Add
(
time
.
Second
*
15
))
if
err
:=
c
.
universalConn
.
WriteJSON
(
m
);
err
!=
nil
{
if
err
:=
c
.
universalConn
.
WriteJSON
(
m
);
err
!=
nil
{
log
.
Warnf
(
"向WS服务器 %v 推送Event时出现错误: %v"
,
c
.
universalConn
.
RemoteAddr
()
.
String
(),
err
)
log
.
Warnf
(
"向WS服务器 %v 推送Event时出现错误: %v"
,
c
.
universalConn
.
RemoteAddr
()
.
String
(),
err
)
_
=
c
.
universalConn
.
Close
()
_
=
c
.
universalConn
.
Close
()
if
c
.
conf
.
ReverseReconnectInterval
!=
0
{
if
c
.
conf
.
ReverseReconnectInterval
!=
0
{
go
func
()
{
time
.
Sleep
(
time
.
Millisecond
*
time
.
Duration
(
c
.
conf
.
ReverseReconnectInterval
))
time
.
Sleep
(
time
.
Millisecond
*
time
.
Duration
(
c
.
conf
.
ReverseReconnectInterval
))
c
.
connectUniversal
()
c
.
connectUniversal
()
}()
}
}
}
}
}
}
...
@@ -324,18 +322,21 @@ func (c *websocketConn) handleRequest(bot *coolq.CQBot, payload []byte) {
...
@@ -324,18 +322,21 @@ func (c *websocketConn) handleRequest(bot *coolq.CQBot, payload []byte) {
func
(
s
*
websocketServer
)
onBotPushEvent
(
m
coolq
.
MSG
)
{
func
(
s
*
websocketServer
)
onBotPushEvent
(
m
coolq
.
MSG
)
{
s
.
eventConnMutex
.
Lock
()
s
.
eventConnMutex
.
Lock
()
defer
s
.
eventConnMutex
.
Unlock
()
defer
s
.
eventConnMutex
.
Unlock
()
pos
:=
0
for
i
,
l
:=
0
,
len
(
s
.
eventConn
);
i
<
l
;
i
++
{
for
_
,
conn
:=
range
s
.
eventConn
{
conn
:=
s
.
eventConn
[
i
]
log
.
Debugf
(
"向WS客户端 %v 推送Event: %v"
,
conn
.
RemoteAddr
()
.
String
(),
m
.
ToJson
())
log
.
Debugf
(
"向WS客户端 %v 推送Event: %v"
,
conn
.
RemoteAddr
()
.
String
(),
m
.
ToJson
())
err
:=
conn
.
WriteMessage
(
websocket
.
TextMessage
,
[]
byte
(
m
.
ToJson
()))
if
err
:=
conn
.
WriteMessage
(
websocket
.
TextMessage
,
[]
byte
(
m
.
ToJson
()));
err
!=
nil
{
if
err
!=
nil
{
_
=
conn
.
Close
()
_
=
conn
.
Close
()
s
.
eventConn
=
append
(
s
.
eventConn
[
:
pos
],
s
.
eventConn
[
pos
+
1
:
]
...
)
next
:=
i
+
1
if
pos
>
0
{
if
next
>=
l
{
pos
++
next
=
l
-
1
}
}
s
.
eventConn
[
i
],
s
.
eventConn
[
next
]
=
s
.
eventConn
[
next
],
s
.
eventConn
[
i
]
s
.
eventConn
=
append
(
s
.
eventConn
[
:
next
],
s
.
eventConn
[
next
+
1
:
]
...
)
i
--
l
--
conn
=
nil
}
}
pos
++
}
}
}
}
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment