我不知道如何让它工作(也许我只是不擅长编程)。
顾名思义,当我说“!radar”时,我想用我的Discord机器人发送一个gif图像。gif位于https://radar.weather.gov/ridge/standard/CONUS_0.gif
代码
import os, discord, requests, json
from base64 import b64decode
from discord.ext import commands
DISCORD_TOKEN = os.getenv("DISCORD_TOKEN")
client = commands.Bot(command_prefix="!", intents= discord.Intents.all())
@client.event
async def on_ready():
print(f'We have logged in as {client.user}')
@client.event
async def on_message(message):
print("message was: " + message.content)
if message.author == client.user:
return
if message.content == '!radar':
url = 'https://radar.weather.gov/ridge/standard/CONUS_0.gif'
r = requests.get(url, allow_redirects=True)
response_parsed = json.loads(r)
thumbnail_bytes = b64decode(response_parsed['thumbnailBase64'])
await message.channel.send(file=thumbnail_bytes)
@client.command()
async def ng(ctx):
await ctx.send('Pong!')
def start():
client.run(DISCORD_TOKEN)
错误
Traceback (most recent call last):
File "/home/runner/StormyBot/venv/lib/python3.10 /site-packages/discord/client.py", tine 441, in _r un_event
await coro(*args, **kwargs)
File "/home/runner/StormyBot/bot.py", tine 21, i n on_message
response_parsed = json.loads(r)
File "inix/store/hd4cc9rh83j291r5539hkf6qd8lgiik b-python3-3.10.8/lib/python3.10/json/__init__.py", tine 339, in loads
raise TypeError(f'the JSON object must be str, bytes or bytearray, '
TypeError: the JSON object must be str, bytes or bytearray, not Response
3条答案
按热度按时间6yjfywim1#
对于
r = requests.get(url, allow_redirects=True)
行,您将获得Response object,而不是JSON。试试
response_parsed = json.loads(r.json())
,应该能解决问题。vof42yt12#
该URL根本不返回JSON,它只是一个GIF(* 作为文件扩展名建议 *)。您无法将其解析/加载为JSON,也无法获取其
thumbnailBase64
字段。因为它是GIF。而不是JSON文件。wydwbb8l3#
这是可能的
就是这样~
我们可以获取gif并将其保存到
urllib
目录(每次都会覆盖)。然后,我们只需像往常一样使用bot发布一个图像。(在GeeksforGeeks找到了我的基础)
下面是最终代码: