Release Notes: v0.7.0¶
Release Date: 2026-05-31
Summary¶
This release adds significant new capabilities to Discord, Telegram, Slack, and WhatsApp providers including Discord voice channels, Telegram inline keyboards and Web Apps, and WhatsApp newsletter support.
Highlights¶
- Discord voice channel support with join/leave, audio streaming, and auto-follow
- Telegram inline keyboards and Web App integration
- WhatsApp newsletters (channels) and emoji reactions
New Features¶
Discord Voice Channels¶
Full voice channel support for Discord bots:
p, err := discord.New(discord.Config{
Token: os.Getenv("DISCORD_TOKEN"),
Logger: logger,
Voice: &discord.VoiceConfig{
ChannelAllowlist: []string{"123456789"}, // Only these channels
ChannelBlocklist: []string{"111111111"}, // Never these channels
FollowUsers: []string{"user_id"}, // Auto-follow into voice
AutoLeaveEmpty: true, // Leave when empty
AutoLeaveTimeout: 5 * time.Minute,
},
})
// Join voice channel
p.JoinVoice(ctx, guildID, channelID)
// Send Opus audio
conn := p.Voice().GetConnection(guildID)
conn.SendAudio(opusData)
// Stream audio from reader
conn.StreamAudio(ctx, audioReader, frameSize)
// Receive audio
for packet := range conn.ReceiveAudio() {
processAudio(packet.Opus)
}
Voice events:
EventTypeVoiceJoin- User joined voice channelEventTypeVoiceLeave- User left voice channelEventTypeVoiceMove- User moved between channelsEventTypeVoiceSpeaker- User started/stopped speaking
Telegram Inline Keyboards¶
Send messages with interactive buttons:
router.Send(ctx, "telegram", chatID, provider.OutgoingMessage{
Content: "Choose an option:",
Metadata: map[string]any{
telegram.MetaInlineKeyboard: [][]telegram.InlineButton{
{
{Text: "Option 1", CallbackData: "opt1"},
{Text: "Option 2", CallbackData: "opt2"},
},
{
{Text: "Open App", WebAppURL: "https://myapp.example.com"},
},
},
},
})
// Handle button callbacks
tgProvider.OnCallback(func(ctx context.Context, cb *telegram.Callback) error {
tgProvider.AnswerCallback(ctx, cb.ID, "You clicked!", false)
return nil
})
// Handle Web App data
tgProvider.OnWebAppData(func(ctx context.Context, data *telegram.WebAppData) error {
log.Printf("Received: %s", data.Data)
return nil
})
Localized bot commands:
tgProvider.SetLocalizedCommands(ctx, telegram.LocalizedCommands{
"": {{Command: "start", Description: "Start the bot"}},
"es": {{Command: "start", Description: "Iniciar el bot"}},
"de": {{Command: "start", Description: "Bot starten"}},
})
Slack Metadata Options¶
Control link unfurling and reply behavior:
router.Send(ctx, "slack", channelID, provider.OutgoingMessage{
Content: "Check https://example.com",
Metadata: map[string]any{
slack.MetaUnfurlLinks: false, // Disable link preview
slack.MetaUnfurlMedia: false, // Disable media preview
slack.MetaReplyBroadcast: true, // Broadcast thread reply
},
})
WhatsApp Newsletters and Reactions¶
Newsletter (channel) support:
waProvider := p.(*whatsapp.Provider)
// List subscribed newsletters
newsletters, _ := waProvider.GetNewsletters(ctx)
// Subscribe/unsubscribe
waProvider.FollowNewsletter(ctx, "123@newsletter")
waProvider.UnfollowNewsletter(ctx, "123@newsletter")
Emoji reactions:
// Send reaction
waProvider.SendReaction(ctx, chatID, messageID, "👍")
// Remove reaction
waProvider.RemoveReaction(ctx, chatID, messageID)
// Handle incoming reactions
router.OnEvent(func(ctx context.Context, evt provider.Event) error {
if evt.Type == provider.EventTypeReaction {
reaction := evt.Data["reaction"].(string)
added := evt.Data["added"].(bool)
}
return nil
})
New chat types for WhatsApp:
ChatTypeNewsletter- WhatsApp Channel/Newsletter messagesChatTypeStatus- Status broadcast messages
Feature Matrix Update¶
| Feature | Discord | Telegram | Slack | |
|---|---|---|---|---|
| Voice channels | New | - | - | - |
| Inline keyboards | - | New | - | - |
| Web App | - | New | - | - |
| Localized commands | - | New | - | - |
| Unfurl controls | - | - | - | New |
| Reply broadcast | - | - | - | New |
| Newsletters | - | - | New | - |
| Reactions | - | - | New | - |
Dependencies¶
- Bump
github.com/slack-go/slackfrom 0.23.0 to 0.24.0 - Bump
github.com/plexusone/omni-googlefrom 0.4.0 to 0.4.1 - Bump
modernc.org/sqlitefrom 1.50.0 to 1.51.0
Upgrade Guide¶
This release is backwards compatible. Update your dependency:
Discord Voice Setup¶
- Enable voice intents in Discord Developer Portal
- Add
Connect,Speak, andUse Voice Activitypermissions to your bot - Configure
VoiceConfigwhen creating the provider
Telegram Inline Keyboards¶
No setup required. Use MetaInlineKeyboard in message metadata.
WhatsApp Newsletters¶
Newsletter reading works automatically. Posting requires admin permissions.
Contributors¶
- Claude Opus 4.5 (AI pair programming)