Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Proposal: BlackSky greeting and suggestion bot #27

Open
tajhlande opened this issue Dec 13, 2024 · 3 comments
Open

Proposal: BlackSky greeting and suggestion bot #27

tajhlande opened this issue Dec 13, 2024 · 3 comments

Comments

@tajhlande
Copy link

Per a conversation with Rudy Fraser on BlueSky in this thread, I propose a bot to watch the #BlackSky hashtag and see if those users have subscribed to the BlackSky feed. If we see that they have not, we reply to their post with a message letting them know how they can subscribe to the feed.

Other constraints and requirements:

  • Must clearly identify itself as a bot
  • Should not reply to a given user more than once within some time window (a day? a week? a month?), which means it needs a place to store this information
  • Needs access to the list of users / DIDs subscribed to BlackSky
@tajhlande
Copy link
Author

I will note that I haven't written in Rust before, but I have decades of experience writing in other languages... Java, Javascript, Python, and other things I won't claim. I have written a similar bot in Python on Twitter in the past (now decommissioned).

@rudyfraser
Copy link
Member

Python would be fine for this and there's already a 'bots' folder: https://github.com/blacksky-algorithms/rsky/tree/main/bots
Currently just has a twitter mirror bot in there but that can safely be renamed from main and a new .py script for the reply bot could be made.

You could use atproto.blue for the firehose subscriber and to make the reply: https://atproto.blue/en/latest/
For not replying to a user more than once within some window, some kind of in-memory or sqlite store would be fine for that.

You can see the membership schema here (

diesel::table! {
membership (did, list) {
did -> Varchar,
included -> Bool,
excluded -> Bool,
list -> Varchar,
}
}
). A person is an existing member if included is true and list='blacksky'.

@tajhlande
Copy link
Author

Cool thanks! I'll get started

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

No branches or pull requests

2 participants