Skip to content

feat: Kick.com platform support#986

Draft
Satont wants to merge 105 commits into
mainfrom
feat/kick-platform
Draft

feat: Kick.com platform support#986
Satont wants to merge 105 commits into
mainfrom
feat/kick-platform

Conversation

@Satont
Copy link
Copy Markdown
Member

@Satont Satont commented Apr 12, 2026

Summary

Transform Twir from a Twitch-only bot into a platform-agnostic streaming bot by adding Kick.com as a second supported platform.

Deliverables

  • user_platform_accounts table + users.id → internal UUID migration
  • Kick OAuth 2.1 + PKCE auth flow
  • Kick EventSub HTTP webhooks with HMAC-SHA256 verification
  • Generic ChatMessage bus type (parallel queue strategy)
  • platforms column on commands/timers/keywords with platform filtering
  • $(platform) built-in parser variable
  • KickProfile + linkedAccounts in GraphQL schema
  • GetProfileByKickId for 7TV integration
  • kick_bots table for single Kick bot account
  • Frontend: Kick login button, linked accounts UI, platform selectors

Architecture

  • Platform as enum everywhere — typed Platform enum in Go, Postgres ENUM type, GraphQL enum, TS generated enum
  • No GORM in new code — all new Go code uses pgx via libs/repositories
  • Parallel NATS queue strategy — old TwitchChatMessage queue preserved until all consumers migrated

Progress

  • Wave 0: Platform enum foundation (Go + DB + GraphQL)
  • Wave 1: DB migrations (users UUID, kick_bots, platforms[], channels multi-platform)
  • Wave 2: Core interfaces + entities
  • Wave 3: Auth refactor + Kick OAuth
  • Wave 4: EventSub / Kick webhooks
  • Wave 5: Generic bus + Kick event handlers
  • Wave 6: Parser platform awareness
  • Wave 7: GraphQL + 7TV
  • Wave 8: Frontend
  • Wave 9: Kick bot message sending\

Todo:

  • - cover generic bus event with platform enum
  • - remove inline svg inside web
  • - fix 2026/04/13 04:38:31 /home/satont/Projects/twir/worktrees/feat/kick-platform/apps/api-gql/internal/auth/sessions_user.go:65 ERROR: invalid input syntax for type uuid: "12345" (SQLSTATE 22P02) [0.880ms] [rows:0] SELECT * FROM "users" WHERE "users"."id" = $1$ ORDER BY "users"."id" LIMIT $2$
  • - fix 2026/04/13 04:39:50 /home/satont/Projects/twir/worktrees/feat/kick-platform/apps/scheduler/internal/timers/expired_commands.go:88 ERROR: cached plan must not change result type (SQLSTATE 0A000) [0.863ms] [rows:0] SELECT * FROM "channels_commands" WHERE "expires_at" < $1$
  • - find other sql problem places
  • - mind way to easy retrieve platform user id, broadcaster ids, maybe via entities and methods.
  • - store user messages in clickhouse.

@Satont Satont force-pushed the feat/kick-platform branch from 76a93c1 to 7cbcccf Compare April 21, 2026 22:08
Satont and others added 29 commits April 22, 2026 01:18
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
… FK + platform column

Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
Core repository signature change plus the required caller updates must land together so the UUID boundary is consistent end-to-end.
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
@Satont Satont requested a review from Copilot May 2, 2026 15:22
Copy link
Copy Markdown
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copilot wasn't able to review this pull request because it exceeds the maximum number of files (300). Try reducing the number of changed files and requesting a review from Copilot again.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants