WebService::Discord::Webhook模块上传文件报错,求正确调用示例
解决WebService::Discord::Webhook发送带文件消息的错误
错误原因分析
- 第一次调用的哈希结构不符合模块要求:该模块期望
file参数是包含name和data的哈希引用,而非单独拆分的file和data平键,Discord API无法识别这种扁平结构,因此返回400请求错误。 - 第二次调用的哈希声明语法错误:
%NewsHash = { ... }是错误写法,Perl中哈希变量赋值需用括号(),{}创建的是匿名哈希引用,这样会导致哈希中仅存在一个无效键值对,传递给execute时自然缺失必要参数,触发参数错误提示。
正确调用示例
方式1:传递哈希引用
# 构造符合要求的哈希结构 my %news_data = ( content => "News Report - $CurDate", file => { name => "News.txt", data => $file_content # 直接使用变量,无需额外加引号 } ); # 将哈希引用传入execute方法 $webhook->execute( \%news_data );
方式2:直接传递哈希键值对列表
# 直接传递键值对,无需提前声明哈希变量 $webhook->execute( content => "News Report - $CurDate", file => { name => "News.txt", data => $file_content } );
仅发送文件(无文本内容)
如果不需要附带文本内容,仅发送文件:
$webhook->execute( file => { name => "News.txt", data => $file_content } );
注意事项
$file_content需为文件的原始内容(文本或二进制),若从本地文件读取,建议用binmode打开文件,避免换行符编码转换问题。- 确保Discord Webhook具备发送文件的权限,且文件大小不超过Discord限制(通常为8MB)。
内容的提问来源于stack exchange,提问作者Marisa Giancarla
相关产品推荐
相关产品推荐

