开源聊天机器人在GODOT中的实现

作为一名游戏爱好者,假期里稍微研究了下Godot这个游戏引擎,想做一些小游戏。

之前在摸索python的时候曾经按照网上的教程接入了图灵开源聊天机器人,在itchat这个第三方库中实现了微信自动聊天的功能,关于这个怎么接入的具体步骤可以去百度,网上的教程都很全。

所以在制作自己的游戏demo的时候就想在游戏里实现这个功能。经过了一段时间的探索,终于获得了成功,下面就来分享一下整个过程。由于在编程方面还是新手,出现的错误还请原谅和指正。

具体聊天功能的实现分为三个步骤:

  1. 读取用户输入的字符串
  2. 将用户输入的字符串以特定的格式用request功能提交
  3. 将服务器端返回的数据以字符串的形式输出

首先是读取功能。

在Godot中的Node中有一个名叫LineEdit的控件,可以实现读取用户输入的字符串并返回。

通过这个连接这个信号可以实现当用户按下Enter键的时候完成录入。

func _on_LineEdit_text_entered(new_text):
	txtLabel = get_node("LineEdit").get_text()
	get_node("LineEdit").clear()

代码功能为当用户按下回车键时将字符串保存在txtLabel中,并清空当前输入栏。


接下来就是重点:如何接入机器人。

def get_response(msg):
    url = 'http://www.tuling123.com/openapi/api'
    data = {
        'key'    : '*****************',
        'info'   : msg,
        'userid' : 'robot',
    }
    r = requests.post(url=url,data=data).json()
    return r.get('text')

以上是python版本的接入函数,可见request post是json格式,接收也是json格式,最后将其中的text信息输出即可。

依照这个思路,我们可以在Godot中如法炮制,只是在Godot中支持的语言是GDscript,需要些许的变化。

var msg
func get_response(msg):
	var url = 'http://www.tuling123.com/openapi/api'
	var data={'key':'*************',
		'info' : msg,
		'userid':'robot',
		}
	var query=JSON.print(data)
	var headers = ["Content-Type: application/json"]
	$HTTPRequest.request(url, headers, true, HTTPClient.METHOD_POST, query)

func _on_HTTPRequest_request_completed(result, response_code, headers, body):
	var json = JSON.parse(body.get_string_from_utf8())
	var string = json.result['text']
	get_node("Label").set_text(string)
		

如上,既然Godot中没有requests库,我们就要寻找其他可以代替的控件。在Node中有一个HTTPRequest的组件

它的基本函数和信号都可以在文档中查到。 其中我们首先把字典类型的data转化为json格式,通过request函数post。

之后我们在_on_HTTPRequest_request_completed()这个信号中将返回的数据转化为json再将其中的text提取出来,就可以使用啦!

效果如图,还是挺有趣的= =

  • 6
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值