与pokemon决战交互的可扩展客户端

showdownp的Python项目详细描述


简介

python 3.4和3.5的Pokemon Showdown!客户端。这是为了使编写机器人程序、与用户交互、适度的聊天室和收集数据变得更容易。

设置

使用pip3 install --user showdownpy安装包。如果尚未安装包的websocketsaiohttp依赖项,则也将安装它们。

示例

示例已在./examples directory中提供。确保在./examples/data/目录中创建自己版本的login.txtowner.txt文件。已经提供了这些文件的模板。

客户端本身并没有做太多的工作,而是打算进行扩展和修改。这可以通过遗留在基类中的各种“钩子”协程来完成。下面的程序使用on_private_message钩子回显它接收到的任何pms的内容。

"""An example client that echoes back any message that is private messaged to it"""importshowdownwithopen('./examples/data/login.txt','rt')asf:username,password=f.read().strip().splitlines()classEchoClient(showdown.Client):asyncdefon_private_message(self,pm):ifpm.recipient==self:awaitpm.reply(pm.content)EchoClient(name=username,password=password).start()

其他钩子包括on_connecton_loginon_room_initon_room_deiniton_query_responseon_chat_message

这些钩子决不是包罗万象的(showdown在其协议中有40多种不同类型的消息用于与客户机交互),因此还存在一个catch all钩子on_receive。每个钩子在事件循环中都有自己的任务,因此您不必担心任何任务相互阻塞。

机器人还可以用来收集战斗数据。以下机器人以“ou”格式匿名加入正在进行的匹配,并在用户完成后保存这些匹配的重播。

"""An example client that joins all OU battlesand saves replays."""importshowdownwithopen('./examples/data/login.txt','rt')asf:username,password=f.read().strip().splitlines()classReplayClient(showdown.Client):asyncdefon_query_response(self,response_type,data):ifresponse_type=='roomlist':forbattle_idinset(data['rooms'])-set(self.rooms):awaitself.join(battle_id)asyncdefon_receive(self,room_id,inp_type,params):ifinp_type=='win':withopen('./data/'+room_id,'wt')asf:f.write('\n'.join(self.rooms[room_id].logs))@showdown.Client.on_interval(interval=3)asyncdefcheck_ou(self):awaitself.query_battles(tier='gen7ou',lifespan=3)ReplayClient(name=username,password=password).start(autologin=False)

建议您保存这些匹配项的本地副本,而不是上载它们,以免超过Showdown的重播服务器。

贡献

这套方案仍在进行中,任何贡献都将是伟大的!我目前正在优先考虑文档而不是新特性,但如果你有什么想法,请告诉我。请随意与客户分享您所做的任何事情,如果它足够简洁,我可以将其添加到示例池中。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java中的else if语句返回语法错误   http如何解析从表单到REST Java/Webservice的post请求   java如何在SpringBoot中为RestTemplate编写JUnit测试   java动态检查实例是否实现接口   java在Android中使用ArrayAdaptor时,数据不会显示   根据前序遍历返回二进制树的java方法   Arquillian测试类中的java注入始终为空   用户界面Java Swing自定义控件   java使用CompletableFutures递归地从同一函数的多个调用构建列表   在Java中将“.00”添加到整数BigDecimal   卡夫卡java未知\u主题\u或\u部分错误间歇性   java为什么我的getString()方法总是返回null?   java renameTo无法重命名文件   java为什么我可以强制转换对象?可以用其他对象来完成吗?   带有回写条件的java多根记录器   关于stackoverflow错误的java帮助?   java Websphere消息队列多线程   Java图形窗口/画布未垂直显示完整的六边形网格   java Sakai未在Tomcat服务器中启动