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
相关产品推荐
相关产品推荐

