An unofficial bot that creates posts about new tags in Signal repositories in the corresponding beta feedback topics and sends update notices to Discord.
To run this bot, do the following:
- Install Rust.
- Follow the Cloudflare Workers Get started guide from the beginning up to, but not including, step 3.
- Clone this repository using Git:
git clone https://github.com/u32i64/signalupdates-bot
-
Copy the
wrangler.example.toml
file towrangler.toml
. -
In
wrangler.toml
, fill in the following:Field Description account_id
Available in the Cloudflare dashboard. id
forSTATE
binding inkv_namespaces
Create a KV namespace in the dashboard, then copy its ID. If you'll be deploying the staging
variant as well, it is recommended to create a separate KV namespace for it.USER_ID
The bot's numeric user ID like 12345
. You can find it by inspecting the HTML or JSON of any of the bot's posts. It is used to find the bot's posts when confirming post approval (which is done without the API key in case the post is returned even if it's not approved, so theyours
property of posts can't be used).TOPIC_ID_FOR_SERVER_UPDATES
The topic's ID for posting server updates, for example 12345
.TOPIC_ID_OVERRIDE
overrides this one as well.TOPIC_ID_OVERRIDE
If you'd like all of the bot's posts to go to a single topic, set this variable to the topic's ID, for example 12345
. Otherwise, leave it empty.DRY_RUN
If you'd like the bot to skip actually posting to Discourse, but otherwise do everything else, including modifying the state (with dummy post numbers), set this to true
. Otherwise, leave it empty.ENABLED_PLATFORMS
Specify first letters of platform names you want to enable. For example, specify said
to enable all supported platforms (Server, Android, iOS, and Desktop).DISCORD_UPDATES_MENTION_ROLE
Role ID to mention about new versions in Discord. DISCORD_SERVER_UPDATES_MENTION_ROLE
Role ID to mention about new Server versions in Discord. DISCORD_ERRORS_MENTION_ROLE
Role ID to mention about errors in Discord. ACCESS_TOKEN
Token that can be used to run the bot on demand or tell the latest Android Firebase version to it via API. -
In the KV namespace(s) you created, manually create a key-value pair with the key
state
and a value like:{ "android": { "last_posted_tag_previous_release": { "name": "v1.2.3" }, "last_posted_tag": { "name": "v1.3.0" } }, "ios": { "last_posted_tag_previous_release": { "name": "1.2.0.4-beta" }, "last_posted_tag": { "name": "1.3.0.4-beta" } }, "desktop": { "last_posted_tag_previous_release": { "name": "v1.2.0-beta.1" }, "last_posted_tag": { "name": "v1.3.0-beta.1" } }, "server": { "last_posted_tag_previous_release": { "name": "v11.99.0" }, "last_posted_tag": { "name": "v12.6.0" } } }
Adjust the value accordingly if you'd like to skip posting many old versions after starting the bot.
You can also add other values used in
PlatformState
(seesrc/state.rs
), but this is not required, as default values will be used automatically.
Configure the bot's access to Discourse.
-
Create a new user for the bot in the Discourse instance, if necessary.
-
Log in as that user and create a Discourse user API key, for example using this CLI tool: KengoTODA/discourse-api-key-generator.
To use this tool, you will need to install NPM, specifically you need the
npx
command from it. -
In the folder where you have the bot's code, run:
wrangler secret put DISCOURSE_API_KEY -e production
When prompted, paste the API key you've created and press Enter.
If you'll be deploying the
staging
variant as well, run the same command withstaging
instead ofproduction
(and also do this for future commands below). Note that you might not be able to create two different API keys using the tool above (when you create a new one, the old one may be removed); you may have to use the same API key for bothproduction
andstaging
.Note: you may have to publish the bot once before running this command. To publish it, see the Deploying section below.
To send the bot's log to a Discord channel in case an error occurs, set up a webhook.
-
Create a webhook in a Discord server (guild) by following this article.
-
Once you have the webhook URL, configure the bot with it, similar to what you did with the Discourse API key:
wrangler secret put DISCORD_WEBHOOK_URL -e production
For sending update notices themselves to Discord as well, set DISCORD_WEBHOOK_URL_UPDATES
and DISCORD_WEBHOOK_URL_SERVER_UPDATES
in the same way.
Run the following command to deploy the bot:
wrangler publish -e production
The production
variant is configured by default to run every 10 minutes. For the staging
variant, you have to invoke it manually by visiting its URL (that looks like signalupdates-bot-staging.<your-workers-subdomain>.workers.dev/ACCESS_TOKEN/run
).
Special thanks to all participants of the discussion in this topic and to @newuser
for developing their version of the bot.
This is an unofficial project. It is not affiliated with the Signal Technology Foundation or Signal Messenger, LLC.