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

Python中Discord Webhook重复发送历史Embed消息问题求助

解决Discord Webhook重复发送Embed消息的问题

问题代码

from discord_webhook import DiscordWebhook, DiscordEmbed
import csv
import os

webhook = DiscordWebhook(url='https://discordapp.c.........')


file_name = 'symbols.csv'
all_data = []
def load_csv():
    with open(file_name, 'r') as dict:
        rows = csv.DictReader(dict)
        for row in rows:
            all_data.append(row)

load_csv()
while True:
    coinname = (input("ENTER COINNAME: ")).upper()                    
    if coinname:
        for data in all_data:
            if data['BASE'].strip()  == coinname.strip():
                embed = DiscordEmbed(title=f'{coinname}/USDT', description=f'**{coinname}**', color=65280, url=f'https://www.binance.com/en/trade/{coinname}_USDT?layout=pro')
                print(f"[+] Message: {embed}")
                webhook.add_embed(embed)
                response = webhook.execute()
                print(response)
                os.system('cls') 

问题描述

首次输入加密货币名称(如ETH)时,Discord Webhook可正常发送对应Embed消息;但第二次输入(如BTC)时,会将首次与当前的Embed消息一并发送。希望每次输入仅发送当前对应加密货币的Embed消息。

原因分析

你只初始化了一个webhook实例,每次调用webhook.add_embed()都会往这个实例里追加新的Embed内容,导致后续发送时会包含之前所有添加过的Embed。

解决方案

有两种简单的解决方式:

方式一:每次发送前清空已有Embed

在添加新Embed之前,调用webhook.remove_embeds()清空实例中已有的所有Embed,确保每次只发送当前的内容。

修改后的代码:

from discord_webhook import DiscordWebhook, DiscordEmbed
import csv
import os

webhook = DiscordWebhook(url='https://discordapp.c.........')

file_name = 'symbols.csv'
all_data = []
def load_csv():
    with open(file_name, 'r') as dict:
        rows = csv.DictReader(dict)
        for row in rows:
            all_data.append(row)

load_csv()
while True:
    coinname = (input("ENTER COINNAME: ")).upper()                    
    if coinname:
        for data in all_data:
            if data['BASE'].strip()  == coinname.strip():
                embed = DiscordEmbed(title=f'{coinname}/USDT', description=f'**{coinname}**', color=65280, url=f'https://www.binance.com/en/trade/{coinname}_USDT?layout=pro')
                print(f"[+] Message: {embed}")
                # 清空之前添加的所有Embed
                webhook.remove_embeds()
                webhook.add_embed(embed)
                response = webhook.execute()
                print(response)
                os.system('cls') 

方式二:每次循环内重新创建Webhook实例

把webhook的初始化代码放到while True循环内部,每次输入都新建一个独立的Webhook对象,自然不会携带之前的Embed内容。

修改后的代码:

from discord_webhook import DiscordWebhook, DiscordEmbed
import csv
import os

file_name = 'symbols.csv'
all_data = []
def load_csv():
    with open(file_name, 'r') as dict:
        rows = csv.DictReader(dict)
        for row in rows:
            all_data.append(row)

load_csv()
while True:
    coinname = (input("ENTER COINNAME: ")).upper()                    
    if coinname:
        # 每次输入都新建Webhook实例
        webhook = DiscordWebhook(url='https://discordapp.c.........')
        for data in all_data:
            if data['BASE'].strip()  == coinname.strip():
                embed = DiscordEmbed(title=f'{coinname}/USDT', description=f'**{coinname}**', color=65280, url=f'https://www.binance.com/en/trade/{coinname}_USDT?layout=pro')
                print(f"[+] Message: {embed}")
                webhook.add_embed(embed)
                response = webhook.execute()
                print(response)
                os.system('cls') 

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 22:15:54