使用 JSON/Python 收集信息的 Discord 机器人显示相同的数据

Posted

技术标签:

【中文标题】使用 JSON/Python 收集信息的 Discord 机器人显示相同的数据【英文标题】:Discord bot gathering info with JSON/Python Displays Same Data 【发布时间】:2018-07-21 03:56:34 【问题描述】:

我想做一个 Discord 机器人。一切正常,直到我想使用 JSON 和 Python 从网站收集一些信息。

数据被收集,但每次我在 Discord 中键入命令以获取我的信息时,它都会显示它使用的相同数据,就像它只获取一次一样 - 当我将机器人连接到我的服务器时。这正是它的作用。

我怎样才能让它在每次有人键入命令时再次收集数据?

示例:我有命令 !status,每当我键入它时,我的机器人都会使用 JSON 从网站获取游戏服务器的状态。假设服务器在线,因此它显示“状态:在线”,但如果服务器关闭并且我再次输入!状态,它仍然显示状态为在线。我必须将机器人重新连接到 Discord 服务器,以便它恢复状态。

我知道我的 python 脚本只能运行一次。

这是一个sn-p:

r = requests.get('http://etcthewebsite')

json_data = json.loads(r.text)
status_server = json_data['status']
def on_message(message):
    if message.content == "!status":
        yield from client.send_message(message.chanel, "Status is: " + status_server)

希望你们明白我的意思。我再说一遍:代码工作正常等等,但它不会在我每次输入命令时都选择信息;只有一次 - 当 BOT 进入服务器时。

【问题讨论】:

您应该在此处发布命令的代码。你在用discord.py吗? 您没有发布任何代码,所以我不确定您希望获得多少帮助。 对不起。我想先添加标签,但我发布了问题。现在修好了!是的,我正在使用 discord.py,python 3.4,因此为什么要从! 这里没有对服务器的请求。你在做什么来收集数据?提示:每次您希望数据发生变化时,您都必须从 Internet 获取数据。 您的代码只向其他服务器发出一次请求 - 当模块加载时 - 并且 on_message 将始终产生相同的值。解决方案是在 on_message 中执行请求。 【参考方案1】:

每次将外部数据提供给用户时,您都应该从服务器获取外部数据。根据您期望它更改的频率,您可以尝试保留它的副本并跟踪您访问它的时间,但这可能是不必要的。

def on_message(message):
    if message.content == '!status':
        r = requests.get('http://etcthewebsite')
        json_data = json.loads(r.text)
        status_server = json_data['status']
        yield from client.send_message(message.chanel, "Status is: " + status_server)

编辑:

顺便说一句,您可以使用discord.ext.commands 来简化编写机器人命令。

from discord.ext import commands
import requests

bot = commands.Bot(command_prefix='!')

@bot.command()
async def status():
    r = requests.get('http://etcthewebsite')
    json_data = json.loads(r.text)
    status_server = json_data['status']
    await bot.say('Status is '.format(status_server))

【讨论】:

谢谢。像魅力一样工作。

以上是关于使用 JSON/Python 收集信息的 Discord 机器人显示相同的数据的主要内容,如果未能解决你的问题,请参考以下文章

Tailwind css - “list-disc”没有正确设置 <li> 项目符号(双项目符号)

如何将 list-disc 应用于 Markdownit 呈现的 ul?

python3-disc和set

PostgreSQL 中的 PERCENTILE_DISC() 作为窗口函数

STM32F429-DISC1 LCD打印双像素

如何在日期时间内聚合 percentile_disc() 函数