首页 文章

Discord bot收集信息与JSON / Python显示相同的数据

提问于
浏览
0

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

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

如何在每次有人输入命令时再次收集数据?

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

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

这是一个片段:

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进入服务器时 .

1 回答

  • 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 使编写bot命令更简单一些 .

    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))
    

相关问题