feat: add group chat support

Set signal_group_id in config to send to a group instead of a DM.
Group ID takes priority over signal_recipient when both are set.
This commit is contained in:
2026-03-10 23:55:19 +00:00
parent d3cca2bb02
commit e5410a5d11
3 changed files with 19 additions and 8 deletions

View File

@@ -10,5 +10,8 @@ signal_url = "http://127.0.0.1:8080"
# signal-cli account (phone number registered with signal-cli)
signal_account = "+1234567890"
# Signal recipient UUID or phone number to send notifications to
# Signal recipient UUID for DM notifications
signal_recipient = ""
# OR: Signal group ID for group notifications (overrides signal_recipient)
# signal_group_id = ""

View File

@@ -12,8 +12,10 @@ type Config struct {
SignalURL string
// SignalAccount is the signal-cli account (phone number or UUID).
SignalAccount string
// SignalRecipient is the default Signal recipient for notifications.
// SignalRecipient is the default Signal recipient UUID for DM notifications.
SignalRecipient string
// SignalGroupID is the Signal group ID for group notifications (overrides SignalRecipient).
SignalGroupID string
}
func loadConfig() Config {
@@ -31,5 +33,6 @@ func loadConfig() Config {
SignalURL: jety.GetString("signal_url"),
SignalAccount: jety.GetString("signal_account"),
SignalRecipient: jety.GetString("signal_recipient"),
SignalGroupID: jety.GetString("signal_group_id"),
}
}

17
main.go
View File

@@ -19,8 +19,8 @@ func main() {
if cfg.SignalAccount == "" {
log.Fatal("signal_account is required (set GH2SIG_SIGNAL_ACCOUNT or config.toml)")
}
if cfg.SignalRecipient == "" {
log.Fatal("signal_recipient is required (set GH2SIG_SIGNAL_RECIPIENT or config.toml)")
if cfg.SignalRecipient == "" && cfg.SignalGroupID == "" {
log.Fatal("signal_recipient or signal_group_id is required")
}
signal := signalcli.NewClient(cfg.SignalURL, cfg.SignalAccount)
@@ -29,6 +29,7 @@ func main() {
notifier := &notifier{
signal: signal,
recipient: cfg.SignalRecipient,
groupID: cfg.SignalGroupID,
}
// Register event handlers.
@@ -73,16 +74,20 @@ func main() {
type notifier struct {
signal *signalcli.Client
recipient string
groupID string
}
func (n *notifier) send(ctx context.Context, msg string) {
if msg == "" {
return
}
_, err := n.signal.Send(ctx, signalcli.SendParams{
Recipient: n.recipient,
Message: msg,
})
params := signalcli.SendParams{Message: msg}
if n.groupID != "" {
params.GroupID = n.groupID
} else {
params.Recipient = n.recipient
}
_, err := n.signal.Send(ctx, params)
if err != nil {
log.Printf("signal send error: %v", err)
}