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
0b021784
Commit
0b021784
authored
Aug 10, 2020
by
Mrs4s
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
supported voice download.
parent
3819f2c2
Changes
7
Hide whitespace changes
Inline
Side-by-side
Showing
7 changed files
with
43 additions
and
13 deletions
+43
-13
coolq/api.go
coolq/api.go
+1
-1
coolq/cqcode.go
coolq/cqcode.go
+12
-1
coolq/event.go
coolq/event.go
+18
-5
global/fs.go
global/fs.go
+2
-0
go.mod
go.mod
+1
-1
go.sum
go.sum
+2
-0
main.go
main.go
+7
-5
No files found.
coolq/api.go
View file @
0b021784
...
@@ -439,7 +439,7 @@ func (bot *CQBot) CQGetForwardMessage(resId string) MSG {
...
@@ -439,7 +439,7 @@ func (bot *CQBot) CQGetForwardMessage(resId string) MSG {
}
}
var
r
[]
MSG
var
r
[]
MSG
for
_
,
n
:=
range
m
.
Nodes
{
for
_
,
n
:=
range
m
.
Nodes
{
check
Image
(
n
.
Message
)
check
Media
(
n
.
Message
)
r
=
append
(
r
,
MSG
{
r
=
append
(
r
,
MSG
{
"sender"
:
MSG
{
"sender"
:
MSG
{
"user_id"
:
n
.
SenderId
,
"user_id"
:
n
.
SenderId
,
...
...
coolq/cqcode.go
View file @
0b021784
...
@@ -45,7 +45,11 @@ func ToStringMessage(e []message.IMessageElement, code int64, raw ...bool) (r st
...
@@ -45,7 +45,11 @@ func ToStringMessage(e []message.IMessageElement, code int64, raw ...bool) (r st
case
*
message
.
FaceElement
:
case
*
message
.
FaceElement
:
r
+=
fmt
.
Sprintf
(
`[CQ:face,id=%d]`
,
o
.
Index
)
r
+=
fmt
.
Sprintf
(
`[CQ:face,id=%d]`
,
o
.
Index
)
case
*
message
.
VoiceElement
:
case
*
message
.
VoiceElement
:
r
+=
fmt
.
Sprintf
(
`[CQ:record,file=%s]`
,
o
.
Name
)
if
ur
{
r
+=
fmt
.
Sprintf
(
`[CQ:record,file=%s]`
,
o
.
Name
)
}
else
{
r
+=
fmt
.
Sprintf
(
`[CQ:record,file=%s,url=%s]`
,
o
.
Name
,
o
.
Url
)
}
case
*
message
.
ImageElement
:
case
*
message
.
ImageElement
:
if
ur
{
if
ur
{
r
+=
fmt
.
Sprintf
(
`[CQ:image,file=%s]`
,
o
.
Filename
)
r
+=
fmt
.
Sprintf
(
`[CQ:image,file=%s]`
,
o
.
Filename
)
...
@@ -286,6 +290,13 @@ func (bot *CQBot) ToElement(t string, d map[string]string, group bool) (message.
...
@@ -286,6 +290,13 @@ func (bot *CQBot) ToElement(t string, d map[string]string, group bool) (message.
}
}
data
=
b
data
=
b
}
}
if
global
.
PathExists
(
path
.
Join
(
global
.
VOICE_PATH
,
f
))
{
b
,
err
:=
ioutil
.
ReadFile
(
path
.
Join
(
global
.
VOICE_PATH
,
f
))
if
err
!=
nil
{
return
nil
,
err
}
data
=
b
}
if
!
global
.
IsAMR
(
data
)
{
if
!
global
.
IsAMR
(
data
)
{
return
nil
,
errors
.
New
(
"unsupported voice file format (please use AMR file for now)"
)
return
nil
,
errors
.
New
(
"unsupported voice file format (please use AMR file for now)"
)
}
}
...
...
coolq/event.go
View file @
0b021784
...
@@ -10,11 +10,12 @@ import (
...
@@ -10,11 +10,12 @@ import (
"io/ioutil"
"io/ioutil"
"path"
"path"
"strconv"
"strconv"
"strings"
"time"
"time"
)
)
func
(
bot
*
CQBot
)
privateMessageEvent
(
c
*
client
.
QQClient
,
m
*
message
.
PrivateMessage
)
{
func
(
bot
*
CQBot
)
privateMessageEvent
(
c
*
client
.
QQClient
,
m
*
message
.
PrivateMessage
)
{
check
Image
(
m
.
Elements
)
check
Media
(
m
.
Elements
)
cqm
:=
ToStringMessage
(
m
.
Elements
,
0
,
true
)
cqm
:=
ToStringMessage
(
m
.
Elements
,
0
,
true
)
log
.
Infof
(
"收到好友 %v(%v) 的消息: %v"
,
m
.
Sender
.
DisplayName
(),
m
.
Sender
.
Uin
,
cqm
)
log
.
Infof
(
"收到好友 %v(%v) 的消息: %v"
,
m
.
Sender
.
DisplayName
(),
m
.
Sender
.
Uin
,
cqm
)
fm
:=
MSG
{
fm
:=
MSG
{
...
@@ -39,7 +40,7 @@ func (bot *CQBot) privateMessageEvent(c *client.QQClient, m *message.PrivateMess
...
@@ -39,7 +40,7 @@ func (bot *CQBot) privateMessageEvent(c *client.QQClient, m *message.PrivateMess
}
}
func
(
bot
*
CQBot
)
groupMessageEvent
(
c
*
client
.
QQClient
,
m
*
message
.
GroupMessage
)
{
func
(
bot
*
CQBot
)
groupMessageEvent
(
c
*
client
.
QQClient
,
m
*
message
.
GroupMessage
)
{
check
Image
(
m
.
Elements
)
check
Media
(
m
.
Elements
)
for
_
,
elem
:=
range
m
.
Elements
{
for
_
,
elem
:=
range
m
.
Elements
{
if
file
,
ok
:=
elem
.
(
*
message
.
GroupFileElement
);
ok
{
if
file
,
ok
:=
elem
.
(
*
message
.
GroupFileElement
);
ok
{
log
.
Infof
(
"群 %v(%v) 内 %v(%v) 上传了文件: %v"
,
m
.
GroupName
,
m
.
GroupCode
,
m
.
Sender
.
DisplayName
(),
m
.
Sender
.
Uin
,
file
.
Name
)
log
.
Infof
(
"群 %v(%v) 内 %v(%v) 上传了文件: %v"
,
m
.
GroupName
,
m
.
GroupCode
,
m
.
Sender
.
DisplayName
(),
m
.
Sender
.
Uin
,
file
.
Name
)
...
@@ -117,7 +118,7 @@ func (bot *CQBot) groupMessageEvent(c *client.QQClient, m *message.GroupMessage)
...
@@ -117,7 +118,7 @@ func (bot *CQBot) groupMessageEvent(c *client.QQClient, m *message.GroupMessage)
}
}
func
(
bot
*
CQBot
)
tempMessageEvent
(
c
*
client
.
QQClient
,
m
*
message
.
TempMessage
)
{
func
(
bot
*
CQBot
)
tempMessageEvent
(
c
*
client
.
QQClient
,
m
*
message
.
TempMessage
)
{
check
Image
(
m
.
Elements
)
check
Media
(
m
.
Elements
)
cqm
:=
ToStringMessage
(
m
.
Elements
,
0
,
true
)
cqm
:=
ToStringMessage
(
m
.
Elements
,
0
,
true
)
bot
.
tempMsgCache
.
Store
(
m
.
Sender
.
Uin
,
m
.
GroupCode
)
bot
.
tempMsgCache
.
Store
(
m
.
Sender
.
Uin
,
m
.
GroupCode
)
log
.
Infof
(
"收到来自群 %v(%v) 内 %v(%v) 的临时会话消息: %v"
,
m
.
GroupName
,
m
.
GroupCode
,
m
.
Sender
.
DisplayName
(),
m
.
Sender
.
Uin
,
cqm
)
log
.
Infof
(
"收到来自群 %v(%v) 内 %v(%v) 的临时会话消息: %v"
,
m
.
GroupName
,
m
.
GroupCode
,
m
.
Sender
.
DisplayName
(),
m
.
Sender
.
Uin
,
cqm
)
...
@@ -346,9 +347,10 @@ func (bot *CQBot) groupDecrease(groupCode, userUin int64, operator *client.Group
...
@@ -346,9 +347,10 @@ func (bot *CQBot) groupDecrease(groupCode, userUin int64, operator *client.Group
}
}
}
}
func
check
Image
(
e
[]
message
.
IMessageElement
)
{
func
check
Media
(
e
[]
message
.
IMessageElement
)
{
for
_
,
elem
:=
range
e
{
for
_
,
elem
:=
range
e
{
if
i
,
ok
:=
elem
.
(
*
message
.
ImageElement
);
ok
{
switch
i
:=
elem
.
(
type
)
{
case
*
message
.
ImageElement
:
filename
:=
hex
.
EncodeToString
(
i
.
Md5
)
+
".image"
filename
:=
hex
.
EncodeToString
(
i
.
Md5
)
+
".image"
if
!
global
.
PathExists
(
path
.
Join
(
global
.
IMAGE_PATH
,
filename
))
{
if
!
global
.
PathExists
(
path
.
Join
(
global
.
IMAGE_PATH
,
filename
))
{
_
=
ioutil
.
WriteFile
(
path
.
Join
(
global
.
IMAGE_PATH
,
filename
),
binary
.
NewWriterF
(
func
(
w
*
binary
.
Writer
)
{
_
=
ioutil
.
WriteFile
(
path
.
Join
(
global
.
IMAGE_PATH
,
filename
),
binary
.
NewWriterF
(
func
(
w
*
binary
.
Writer
)
{
...
@@ -359,6 +361,17 @@ func checkImage(e []message.IMessageElement) {
...
@@ -359,6 +361,17 @@ func checkImage(e []message.IMessageElement) {
}),
0777
)
}),
0777
)
}
}
i
.
Filename
=
filename
i
.
Filename
=
filename
case
*
message
.
VoiceElement
:
i
.
Name
=
strings
.
ReplaceAll
(
i
.
Name
,
"{"
,
""
)
i
.
Name
=
strings
.
ReplaceAll
(
i
.
Name
,
"}"
,
""
)
if
!
global
.
PathExists
(
path
.
Join
(
global
.
VOICE_PATH
,
i
.
Name
))
{
b
,
err
:=
global
.
GetBytes
(
i
.
Url
)
if
err
!=
nil
{
log
.
Warnf
(
"语音文件 %v 下载失败: %v"
,
i
.
Name
,
err
)
continue
}
_
=
ioutil
.
WriteFile
(
path
.
Join
(
global
.
VOICE_PATH
,
i
.
Name
),
b
,
0777
)
}
}
}
}
}
}
}
global/fs.go
View file @
0b021784
...
@@ -9,6 +9,8 @@ import (
...
@@ -9,6 +9,8 @@ import (
var
IMAGE_PATH
=
path
.
Join
(
"data"
,
"images"
)
var
IMAGE_PATH
=
path
.
Join
(
"data"
,
"images"
)
var
VOICE_PATH
=
path
.
Join
(
"data"
,
"voices"
)
func
PathExists
(
path
string
)
bool
{
func
PathExists
(
path
string
)
bool
{
_
,
err
:=
os
.
Stat
(
path
)
_
,
err
:=
os
.
Stat
(
path
)
return
err
==
nil
||
os
.
IsExist
(
err
)
return
err
==
nil
||
os
.
IsExist
(
err
)
...
...
go.mod
View file @
0b021784
...
@@ -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-202008
09221224-7a84cfae6795
github.com/Mrs4s/MiraiGo v0.0.0-202008
10032556-a425f9d1b98e
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
github.com/guonaihong/gout v0.1.1
github.com/guonaihong/gout v0.1.1
...
...
go.sum
View file @
0b021784
...
@@ -2,6 +2,8 @@ cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMT
...
@@ -2,6 +2,8 @@ cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMT
github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
github.com/Mrs4s/MiraiGo v0.0.0-20200809221224-7a84cfae6795 h1:Bu4k9ZS/IIy9Shwd9lS/C2P/2I8fYUwg1OpRF91hr1w=
github.com/Mrs4s/MiraiGo v0.0.0-20200809221224-7a84cfae6795 h1:Bu4k9ZS/IIy9Shwd9lS/C2P/2I8fYUwg1OpRF91hr1w=
github.com/Mrs4s/MiraiGo v0.0.0-20200809221224-7a84cfae6795/go.mod h1:0je03wji/tSw4bUH4QCF2Z4/EjyNWjSJTyy5tliX6EM=
github.com/Mrs4s/MiraiGo v0.0.0-20200809221224-7a84cfae6795/go.mod h1:0je03wji/tSw4bUH4QCF2Z4/EjyNWjSJTyy5tliX6EM=
github.com/Mrs4s/MiraiGo v0.0.0-20200810032556-a425f9d1b98e h1:5LYDouOL9ZgTL5PwZuuSlFYSfboRQjnXqRIlhviRcGE=
github.com/Mrs4s/MiraiGo v0.0.0-20200810032556-a425f9d1b98e/go.mod h1:0je03wji/tSw4bUH4QCF2Z4/EjyNWjSJTyy5tliX6EM=
github.com/bwmarrin/snowflake v0.3.0 h1:xm67bEhkKh6ij1790JB83OujPR5CzNe8QuQqAgISZN0=
github.com/bwmarrin/snowflake v0.3.0 h1:xm67bEhkKh6ij1790JB83OujPR5CzNe8QuQqAgISZN0=
github.com/bwmarrin/snowflake v0.3.0/go.mod h1:NdZxfVWX+oR6y2K0o6qAYv6gIOP9rjG0/E9WsDpxqwE=
github.com/bwmarrin/snowflake v0.3.0/go.mod h1:NdZxfVWX+oR6y2K0o6qAYv6gIOP9rjG0/E9WsDpxqwE=
github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU=
github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU=
...
...
main.go
View file @
0b021784
...
@@ -36,14 +36,16 @@ func init() {
...
@@ -36,14 +36,16 @@ func init() {
if
err
==
nil
{
if
err
==
nil
{
log
.
SetOutput
(
io
.
MultiWriter
(
os
.
Stderr
,
w
))
log
.
SetOutput
(
io
.
MultiWriter
(
os
.
Stderr
,
w
))
}
}
if
!
global
.
PathExists
(
"data"
)
{
if
!
global
.
PathExists
(
global
.
IMAGE_PATH
)
{
if
err
:=
os
.
Mkdir
(
"data"
,
0777
);
err
!=
nil
{
if
err
:=
os
.
MkdirAll
(
global
.
IMAGE_PATH
,
0677
);
err
!=
nil
{
log
.
Fatalf
(
"创建数据文件夹失败: %v"
,
err
)
}
if
err
:=
os
.
Mkdir
(
path
.
Join
(
"data"
,
"images"
),
0777
);
err
!=
nil
{
log
.
Fatalf
(
"创建图片缓存文件夹失败: %v"
,
err
)
log
.
Fatalf
(
"创建图片缓存文件夹失败: %v"
,
err
)
}
}
}
}
if
!
global
.
PathExists
(
global
.
VOICE_PATH
)
{
if
err
:=
os
.
MkdirAll
(
global
.
VOICE_PATH
,
06777
);
err
!=
nil
{
log
.
Fatalf
(
"创建语音缓存文件夹失败: %v"
,
err
)
}
}
if
global
.
PathExists
(
"cqhttp.json"
)
{
if
global
.
PathExists
(
"cqhttp.json"
)
{
log
.
Info
(
"发现 cqhttp.json 将在五秒后尝试导入配置,按 Ctrl+C 取消."
)
log
.
Info
(
"发现 cqhttp.json 将在五秒后尝试导入配置,按 Ctrl+C 取消."
)
log
.
Warn
(
"警告: 该操作会删除 cqhttp.json 并覆盖 config.json 文件."
)
log
.
Warn
(
"警告: 该操作会删除 cqhttp.json 并覆盖 config.json 文件."
)
...
...
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