You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

discord.py开发航空天气机器人 如何实现指定关键词后自动换行

解决方法

你只需要在获取到原始TAF报文后增加一段关键词替换逻辑,调整输出格式即可实现需求,修改后的完整代码如下:

import urllib.request
import csv
# 以上两个导入如果你的代码里已经有就不用重复加

@client.command(aliases=['METAR', 'TAF', 'taf'])
async def metar(ctx, *, metar_station):
    result_metar = "未查询到对应机场的METAR报文"
    result_taf = "未查询到对应机场的TAF报文"
    # METAR
    url_metar = 'https://www.aviationweather.gov/adds/dataserver_current/current/metars.cache.csv'
    response = urllib.request.urlopen(url_metar)
    lines = [l.decode('utf-8') for l in response.readlines()]
    cr = csv.reader(lines)
    for row in cr:
        if row[0].startswith(metar_station.upper()): # 统一转大写,兼容用户小写输入ICAO码
            result_metar = row[0]
            break

    # TAF
    url_taf = 'https://www.aviationweather.gov/adds/dataserver_current/current/tafs.cache.csv'
    response_taf = urllib.request.urlopen(url_taf)
    lines_taf = [l.decode('utf-8') for l in response_taf.readlines()]
    cr_taf = csv.reader(lines_taf)

    for row_taf in cr_taf:
        if row_taf[0].startswith(f'TAF {metar_station.upper()}'):
            raw_taf = row_taf[0]
            # 核心格式化逻辑:给需要换行的关键词前加换行和缩进
            format_keys = [' BECMG', ' TEMPO', ' PROB']
            for key in format_keys:
                raw_taf = raw_taf.replace(key, f'\n  {key.strip()}')
            result_taf = raw_taf
            break
            
    await ctx.send(f'{result_metar}\n\n{result_taf}')

额外优化说明

  • 给ICAO码判断加了大写转换,兼容用户输入小写机场码的场景
  • 补充了默认返回值,避免查询不到对应机场报文时代码报错
  • 加了break跳出循环,查到结果后不需要继续遍历整个CSV文件,提升响应速度

如果你需要保留原来的METAR:、TAF:加粗前缀,只需要把最后一行发送代码改成:

await ctx.send(f'**METAR**: {result_metar}\n\n**TAF**: {result_taf}')

内容的提问来源于stack exchange,提问作者OrangeTiger

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.13 13:21:03