从Min自动读取聊天文本

2024-05-28 23:39:05 发布

您现在位置:Python中文网/ 问答频道 /正文

在Minecraft中,我希望能找到一种自动阅读聊天的方式,如下图所示

minecraft chat screenshot

以便将虚拟商店中的交易记录到PostgreSQL数据库中。最好使用Python。我不拥有Minecraft服务器。在

我的计划是找到一种直接读取从Minecraft服务器发送的数据包的方法(出于可靠性考虑,但难度未知),或者作为备份计划,也许可以找出如何筛选文本。我找到了一些资源,可以让我把字体改成等宽字体,这将提供一种更可靠的阅读字体的方式,我相信在屏幕上为每个字符创建完全一致的位置。我可以面对一个接近黑色的方向,但不完全是,但我宁愿不必。如上图所示,你可以看到有许多不同颜色的字体也要与之抗衡。在

即使按照上面描述的那样对其进行了缩减,我仍然不确定如何使用python将其转换为文本。在

对我的方法有什么建议吗?有什么提示可以告诉我如何读取来自服务器的数据包吗?有什么关于从屏幕上删除文本的提示吗?在


Tags: 方法文本服务器数据库屏幕postgresql方式记录
2条回答

首先,正如kuyan所建议的,请参见http://wiki.vg/Main_Page,其中包含指向各种可能有用的程序的链接,这些程序可以直接使用,也可以用于源代码查看。在

例如,在Utilities下,首先出现的是一个日志代理。在

下面是mc3p,这是一个Python代理Joran Beasley建议的程序,它支持插件。它只适用于1.2.5版本,但是sadimusi/mc3p声称是一个与1.4.2兼容的fork。正如J.F.Sebastian所说,mc3p有一个日志插件的接口,所以您只需编写一个日志到postgres。在

如果你想自己读这些数据包,那并不难。你可以用几十行Python编写一个通用的TCP代理,也可以用netcat编写2行shell脚本中的一行,将数据传输到Python脚本中。在

困难的部分不是截取数据,而是解析协议。Minecraft可能不是在发“噩梦:每10万美元1 tnt”,而是类似于优惠:夜班:1:梯恩梯:100或“\x13\x09夜班\x00\x01\x72\x00\x64”。维基百科的官方协议有时也很难看,而且很难看。这意味着,找出协议的最佳方法可能是阅读sadimusi/mc3p或其他项目之一,如McPacketSniffer或ProtoProxy,这时您必须问一下,仅仅使用该项目而不是重新实现它是否更容易。在

无论如何,刮屏应该是你最后的选择。在

事实上,有一种更好的方式来阅读Minecraft的聊天,它不需要屏幕抓取或数据包解码。在

Minecraft会自动将聊天信息(以及许多其他东西)写入日志文件,无论是单人游戏还是多人游戏。在Windows上,它们位于%appdata%/.minecraft/logs。以前的日志使用gzip压缩,但最新会话的日志被写入文本文件最新.log实时的。聊天信息包含文本[Client thread/INFO]: [CHAT]。您可以像使用普通文件一样打开它,方法是:

import os
with open(os.getenv("APPDATA")+"/.minecraft/logs/latest.log", "r") as logfile:
    for line in logfile:
        if "[Client thread/INFO]: [CHAT]" in line:
            print line,

或者,如果您想实时阅读chat,您可以使用下面的代码,稍微修改一下这个answer中的代码:

^{pr2}$

相关问题 更多 >

    热门问题