Address channels in Bot API form and add a founder-run send script

The provisioner records the MTProto channel id; the Bot API needs -100<id>.
adapter-config now converts it, so the test channel resolves to
-1004427430639. scripts/send-post.sh starts a short-lived adapter with the
bot token injected from OpenBao (never printed) and sends one reviewed post.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

Assistant: claude-code
Assistant-Model: opus
Assistant-Process: 5457@bnt-lap001
Assistant-Session: 792bf84a-3783-4f5d-a811-cded61dd2012
This commit is contained in:
tegwick 2026-10-08 09:36:03 +02:00
parent 679aad207e
commit b09a5e21d4
3 changed files with 77 additions and 1 deletions

View file

@ -52,11 +52,22 @@ func FromResolved(rs *state.Resolved, channel, tokenRef string) (Config, error)
return Config{
Campaign: rs.Campaign,
Channel: channel,
ChatID: ch.ChatID,
ChatID: BotAPIChatID(ch.ChatID),
TokenRef: tokenRef,
}, nil
}
// BotAPIChatID converts a channel id as the provisioner records it (the
// MTProto channel id, positive) into the form the Bot API addresses it by
// (-100 followed by the id). An id that is already negative is in Bot API
// form and is returned unchanged.
func BotAPIChatID(id int64) int64 {
if id > 0 {
return -1000000000000 - id
}
return id
}
// EnvFile is the non-secret configuration an adapter process is started with.
// The token is named, not emitted: the runtime injects it from OpenBao.
func (c Config) EnvFile() string {

View file

@ -112,3 +112,18 @@ func TestLoadTokenReadsOnlyTheBotToken(t *testing.T) {
}
}
}
func TestBotAPIChatIDPrefixesChannelIDs(t *testing.T) {
if got := BotAPIChatID(4427430639); got != -1004427430639 {
t.Fatalf("BotAPIChatID(4427430639) = %d", got)
}
if got := BotAPIChatID(-1001); got != -1001 {
t.Fatalf("an id already in Bot API form changed: %d", got)
}
rs := provisioned()
rs.Channels[spec.Test] = state.Channel{ChatID: 4427430639, AdminRights: []string{spec.PostMessages}}
cfg, err := FromResolved(rs, spec.Test, "ref")
if err != nil || cfg.ChatID != -1004427430639 {
t.Fatalf("FromResolved chat id = %d, err %v", cfg.ChatID, err)
}
}