# v0.3.1 Release Notes

> v0.3.0 -> v0.3.1

## Summary

Brings Discord's interactive surface to parity with Telegram in Discord-native ways: `SendInput` mounts a Primary Button → Modal flow (Discord's only path to free-text capture from a message context), `SendSelect` and `SendMultiSelect` use String Select Menu dropdowns (`MaxValues=1` and `MaxValues=N` — Discord supports multi-pick natively so the telegram ✅/⬜ toggle + "Done" button machinery isn't needed), `SendVoice` uploads Gemini TTS output as an `audio/ogg` attachment, and `Delete` is added as a thin `ChannelMessageDelete` wrapper for Q&A prompt cleanup. `Input` gains `CallbackPicks []string` so multi-select results land on a dedicated field instead of overloading `Text`.
<details>
<summary>翻譯</summary>
把 Discord 的互動 surface 補齊到對齊 telegram、且走 Discord 原生路徑：`SendInput` 用 Primary Button → Modal 流程（Discord 從 MessageCreate context 抓自由文字輸入的唯一路徑）；`SendSelect` 與 `SendMultiSelect` 走 String Select Menu dropdown（`MaxValues=1` / `MaxValues=N`，Discord 原生支援多選，不需 telegram 那套 ✅/⬜ + Done button 中介）；`SendVoice` 把 Gemini TTS OGG 上傳為 `audio/ogg` 附件；新增 `Delete` 薄封裝 `ChannelMessageDelete` 用於 Q&A prompt 清場。`Input` 新增 `CallbackPicks []string`，多選結果走專屬欄位不擠在 `Text`。
</details>

## Changes

### FEAT
- Add Discord SendMultiSelect and SendVoice APIs (@pardnchiu) [2eac4ec]
- Add Discord SendSelect with StringSelectMenu dropdown (@pardnchiu) [e5afaae]
- Add Discord SendInput via button+modal and Delete (@pardnchiu) [077cc54]

<details>
<summary>翻譯</summary>

- 新增 `SendInput`（Button → Modal，唯一從 message context 取自由文字的 Discord-native 路徑）
- 新增 `Delete` 薄封裝 `ChannelMessageDelete`，對齊 telegram contract
- 新增 `SendSelect` StringSelectMenu 單選下拉
- 新增 `SendMultiSelect` StringSelectMenu 多選（MaxValues=N，無需 toggle + Done 中介）
- 新增 `SendVoice`，內部 `tts.Get` → OGG → `audio/ogg` 附件（非波形 voice bubble）
- `Input` 新增 `CallbackPicks []string` 一級欄位，與 `Text` 互斥
- `interactionDispatch` 升級成 by `CustomID prefix` 的兩層 switch 路由（input button / select menu / modal submit）

</details>

## Scope

- `discord/sendInput.go` — FEAT（新檔；button 中介 + modal 開啟 + modal submit 三段 handler + `interactionDispatch` 路由）
- `discord/sendSelect.go` — FEAT（新檔；StringSelectMenu 單選，`selectState{multi=false}`）
- `discord/sendMultiSelect.go` — FEAT（新檔；`MaxValues=len(options)`、`selectState{multi=true}`、共用 `selects` map 與 handler）
- `discord/sendVoice.go` — FEAT（新檔；`tts.Get` → `bytes.NewReader` → `audio/ogg` File）
- `discord/send.go` — UPDATE（`Input` 加 `CallbackPicks`、新增 `Delete`）
- `discord/bot.go` — UPDATE（`inputsMu`/`inputs`、`selectsMu`/`selects` map 與 init / Close cleanup、註冊 `interactionDispatch`）
- `README.md` — DOC（discord 段補完整 contract 表 + 多互動 example）

***

Generated by [SKILL](https://github.com/pardnchiu/skill-version-generate)
