使用 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?