Giter Club home page Giter Club logo

coolq-golang-sdk's People

Contributors

adorableparker avatar npcy avatar tnze avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar

coolq-golang-sdk's Issues

生成json出错

Generating app.json
cqcfg: 统计Git提交数失败: exit status 128
app.go:5: running "cqcfg": exit status 1

noCatch or noCache?

in CoolQ C++ SDK, it uses no_cache:
Group get_group_info(const int64_t group_id, const bool no_cache = false) noexcept(false);
however, noCatch is just a seems little confusing, and there's no docs about it

raw := getRawGroupInfo(group, noCatch)

想让插件读取一个文件并发送文件内容,但插件无法打开指定文件,总是报错

  • dll编译成功,插件启动成功,但通过发送消息调用该插件总是返回预设的报错信息,如“文件不存在“、“文件打开失败”。大多数是“文件不存在”,少数是“文件打开失败”。
  • 酷Q运行在Ubuntu 18.04 的Docker容器里,其它插件运行正常。
  • Golang写一个功能相同且关键代码完全一致的Go文件,在该Ubuntu 18.04中运行可以成功读取同一指定文件并打印输出文件内容。
  • 编译dll是在win10上进行的。猜测可能是文件名中的“/”造成了这一问题?没有找到解决办法。

app.go文件的代码如下:

package main

import (
	"fmt"
	"github.com/Tnze/CoolQ-Golang-SDK/cqp"
	"io/ioutil"
	"os"
)

//go:generate cqcfg -c .
// cqp: 名称: CoolQ-plugins
// cqp: 版本: 1.0.0:1
// cqp: 作者: U
// cqp: 简介: 在QQ群里查看某类小文件~
func main() { /*此处应当留空*/ }

func init() {
	cqp.AppID = "me.cqp.test34.list" // TODO: 修改为这个插件的ID
	cqp.GroupMsg = onGroupMsg
}

func onGroupMsg(subType, msgID int32, fromGroup, fromQQ int64, fromAnonymous, msg string, font int32) int32 {
	defer handlePanic()
	if msg == "#list" {
		reply := handleCmd()
		cqp.SendGroupMsg(fromGroup, reply)
	}
	return 0
}

func handleCmd() string {
	filename := "/opt/dir/some_data.json"
	if !checkFileIsExist(filename) {
		return "文件不存在"
	}
	file, err := os.Open(filename)
	if err != nil {
		return "文件打开失败"
	}
	b, err := ioutil.ReadAll(file)
	if err != nil {
		return "文件读取失败"
	}
	defer file.Close()
	return string(b)
}

func handlePanic() {
	if r := recover(); r != nil {
		cqp.AddLog(cqp.Error, "未知错误", fmt.Sprint(r))
		return
	}
}
func checkFileIsExist(filename string) bool {
	var exist = true
	if _, err := os.Stat(filename); os.IsNotExist(err) {
		exist = false
	}
	return exist
}

自定义菜单按钮

如题, 看了一圈文档和 issue 里的截图, 发现好像没有菜单功能, 所有的菜单都是一个 "详情", 实际上只需要加入对于菜单项点击的处理事件就行了, 至于去拉出来 GUI 界面之类的事情就从自己的函数里处理了

函数头都拟好了, 就叫:

// 或者 SetMenuItem
func AddMenuItem(title string, position uint8, handler func() int32) int32

sqlite3 支持

尝试在项目中引入 github.com/mattn/go-sqlite3

但编译的 dll 总是无法被酷q 正确 load。

折腾后发现,只要引入 go-sqlite3 编译出来的 dll 就一定无法被酷q 正确加载,总是报

错误:不是合法的应用(LoadLibrary 失败,GetLastError=126)(-103)

附上最小测试:

package main

import (
	"github.com/Tnze/CoolQ-Golang-SDK/cqp"

	_ "github.com/mattn/go-sqlite3"
)

//go:generate cqcfg -c .
// cqp: 名称: 测试
// cqp: 版本: 1.0.0:0
// cqp: 作者: doylecnn
// cqp: 简介: 测试
func main() { /*此处应当留空*/ }

func init() {
	cqp.AppID = "me.robirt.test" // TODO: 修改为这个插件的ID
	cqp.PrivateMsg = onPrivateMsg
}

func onPrivateMsg(subType, msgID int32, fromQQ int64, msg string, font int32) int32 {
	cqp.SendPrivateMsg(fromQQ, msg) //复读机
	return 0
}

dll编译成功,但开发者模式下启用应用时酷Q发生错误

  • gcc版本gcc version 9.2.0 (tdm64-1)
  • 在Win10上开发,使用批处理Build.bat得到app.json和app.dll,显示'Build success!',无报错(除了统计Git提交数失败的警告外)
  • Win10酷Q,开发者模式下将得到的dll和json放入指定的文件夹/dev/me.cqp.tom.chattest,'应用管理'菜单内点击启用该插件后,酷Q立即报错。报错信息截图如下:
    报错信息
    报错信息2
  • 给出最简短代码如下:
    app.go文件
package main

import (
	"fmt"
	"github.com/Tnze/CoolQ-Golang-SDK/cqp"
	"github.com/yliu7949/MCDaemon-go/plugins/ChatPlugin"
)

//go:generate cqcfg -c .
// cqp: 名称: CoolQ-ChatTest
// cqp: 版本: 1.0.0:1
// cqp: 作者: Tom
// cqp: 简介: 在QQ群里使用Websocket进行通讯~
func main() { /*此处应当留空*/ }

func init() {
	cqp.AppID = "me.cqp.tom.chattest" // TODO: 修改为这个插件的ID
	cqp.PrivateMsg = onPrivateMsg
}

func onPrivateMsg(subType, msgID int32, fromQQ int64, msg string, font int32) int32 {
	if msg[:5] == "#chat" {
		handleCmd(msg,fromQQ)
	}
	return 0
}

func handleCmd(msg string, fromQQ int64) {
	packageChan = make(chan *msgPackage, ChanMaxSize)
	fmt.Println(packageChan)
	go func() {fmt.Println("123")}()
	cqp.SendPrivateMsg(fromQQ, msg)
	return
}

var packageChan chan *msgPackage

const ChanMaxSize int = 20

type msgPackage struct {
	From int //服务器id
	Msg  *ChatPlugin.Message
}

go.mod文件

module main

go 1.13

require (
	github.com/Tnze/CoolQ-Golang-SDK v1.2.1
	github.com/yliu7949/MCDaemon-go v0.0.0-20200505071320-e4adce8ba83e
)
  • 值得提到的是:当我继续删掉app.go中的代码,使得app.go几乎没什么功能时,编译成功,酷Q加载运行成功;以前使用golang SDK开发的一切正常的酷Q项目,现在重新编译、加载依旧没有任何问题。因此,问题可能出现在我的代码中。
  • 我的开发目的是使用websocket与聊天服务器进行通讯。现在对于这个问题没有头绪,可能是channel的问题?还是import的包的问题?(不应该吧。)
  • 期待实现的结果:找出报错原因,修正代码后能正常加载该app。谢谢!

使用go get命令时提示无法找到cqcfg

go get github.com/Tnze/CoolQ-Golang-SDK/v2/tools/cqcfg
package github.com/Tnze/CoolQ-Golang-SDK/v2/tools/cqcfg: cannot find package "github.com/Tnze/CoolQ-Golang-SDK/v2/tools/cqcfg" in any of:
/usr/lib/golang/src/github.com/Tnze/CoolQ-Golang-SDK/v2/tools/cqcfg (from $GOROOT)
/opt/gopath/src/github.com/Tnze/CoolQ-Golang-SDK/v2/tools/cqcfg (from $GOPATH)
我按照readme里面的步骤,却提示无法找到包,

关于GroupRequest接口的使用

拒绝请求或是同意请求是怎么实现的,文档里面没看到相关说明,好像是只能看见相关请求消息?

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.