Compare commits

..

No commits in common. "main" and "deps" have entirely different histories.
main ... deps

4 changed files with 33 additions and 49 deletions

View file

@ -45,14 +45,6 @@ Then run `npm install .` to install npm modules `axios` and `ws`.
Start the bot with the traditional `node index.js`.
However, you probably want this to run automatically on a web server. You can do this with `systemd` using the example unit file: `mastodon-clippy.service.example`. Adjust this for your user and paths, and then activate it:
```bash
sudo cp mastodon-clippy.service.example /etc/systemd/system/mastodon-clippy.service
sudo systemctl enable mastodon-clippy.service
sudo systemctl start mastodon-clippy service
```
## interacting with the bot
To "sign up" for notification from your bot, users have two options:
@ -60,4 +52,4 @@ To "sign up" for notification from your bot, users have two options:
1. follow the bot account
2. send a toot to the bot with the word `START` in capital letters. e.g. `@auspol_clippy START`
To "unsubscribe" from the bot, users can send a toot with the word `STOP` in capital letters. e.g. `@auspol_clippy STOP`
To "unsubscribe" from the bot, users can send a toot with the word `STOP` in capital letters. e.g. `@auspol_clippy STOP`

View file

@ -1,4 +1,4 @@
/*
/*
Clippy bot for mastodon.
@ -53,33 +53,25 @@ function initiateSettings(socket) {
// return random suggestion string
function suggestion(username) {
const n = crypto.randomInt(12)
const n = crypto.randomInt(8)
switch(n) {
case 0:
return 'How about logging off instead?';
case 1:
return `Would you like to delete your toot, @${username}?`;
return `Would you like to delete your toot, ${username}?`;
case 2:
return 'Can I help you take a walk outside? 🚶‍➡️';
return 'Can I help you take a walk outside?';
case 3:
return 'You may like to reconsider your life choices.';
case 4:
return 'Why not try looking at #CatsOfMastodon instead?';
case 5:
return `Come on @${username}, we've talked about this. 🤷‍♂️`;
return `Come on ${username}, we've talked about this.`;
case 6:
return `You should go look at some trees. Trees are calming 🌳`;
return `You should go look at some trees. Trees are calming`;
case 7:
return `I'm not angry. I'm just very disappointed. 😔`;
case 8:
return `You said you were going to stop doing that ...and yet here we are.`;
case 9:
return `Time to touch some grass 🌱`;
case 10:
return `Why not have a nice cup of tea instead? 🫖`;
case 11:
return `And yet you still haven't read all of those books in your TBR pile. 🤔`;
return `I'm not angry. I'm just very disappointed.`;
}
}
@ -141,42 +133,42 @@ function listen() {
// make sure bot is set up correctly each time it starts
initiateSettings(ws)
// errors
ws.on('error', err => {
console.error(`WebSocket error: ${err.message}`)
resetConnection(ws)
})
// check updates and notifications in the stream
ws.on('message', msg => {
let packet = JSON.parse(msg)
let data = JSON.parse(packet.payload)
// notifications
if (packet.event == 'notification') {
// always follow back
if (data.type == 'follow') {
followAction(data.account.id, 'follow')
}
if (data.type == 'mention') {
let post = data.status.content
// check start requests
if (post.match(/\bSTART\b/)) {
followAction(data.account.id, 'follow')
}
// check stop requests
if (post.match(/\STOP\b/)) {
followAction(data.account.id, 'unfollow')
}
}
}
// updates (posts)
if (packet.event == 'update') {
let rid = data.id
@ -193,7 +185,7 @@ function listen() {
}
else if (data.spoiler_text.toLowerCase().includes(topic)) {
sendResponse(rid, user, username)
}
}
else if (data.tags.map(tag => tag.name.toLowerCase()).includes(topic)) {
sendResponse(rid, user, username)
}

22
package-lock.json generated
View file

@ -1,26 +1,26 @@
{
"name": "mastodon-clippy",
"version": "1.1.1",
"version": "1.1.0",
"lockfileVersion": 1,
"requires": true,
"dependencies": {
"axios": {
"version": "0.21.4",
"resolved": "https://registry.npmjs.org/axios/-/axios-0.21.4.tgz",
"integrity": "sha512-ut5vewkiu8jjGBdqpM44XxjuCjq9LAKeHVmoVfHVzy8eHgxxq8SbAVQNovDA8mVi05kP0Ea/n/UzcSHcTJQfNg==",
"version": "0.21.1",
"resolved": "https://registry.npmjs.org/axios/-/axios-0.21.1.tgz",
"integrity": "sha512-dKQiRHxGD9PPRIUNIWvZhPTPpl1rf/OxTYKsqKUDjBwYylTvV7SjSHJb9ratfyzM6wCdLCOYLzs73qpg5c4iGA==",
"requires": {
"follow-redirects": "^1.14.0"
"follow-redirects": "^1.10.0"
}
},
"follow-redirects": {
"version": "1.15.6",
"resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.6.tgz",
"integrity": "sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA=="
"version": "1.14.1",
"resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.14.1.tgz",
"integrity": "sha512-HWqDgT7ZEkqRzBvc2s64vSZ/hfOceEol3ac/7tKwzuvEyWx3/4UegXh5oBOIotkGsObyk3xznnSRVADBgWSQVg=="
},
"ws": {
"version": "7.5.10",
"resolved": "https://registry.npmjs.org/ws/-/ws-7.5.10.tgz",
"integrity": "sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ=="
"version": "7.5.2",
"resolved": "https://registry.npmjs.org/ws/-/ws-7.5.2.tgz",
"integrity": "sha512-lkF7AWRicoB9mAgjeKbGqVUekLnSNO4VjKVnuPHpQeOxZOErX6BPXwJk70nFslRCEEA8EVW7ZjKwXaP9N+1sKQ=="
}
}
}

View file

@ -1,8 +1,8 @@
{
"name": "mastodon-clippy",
"version": "1.1.2",
"version": "1.1.1",
"description": "Mastodon clippy bot",
"repository": "https://git.suboptimal.solutions/hugh/mastodon-clippy",
"repository": "https://github.com/hughrun/mastodon-clippy.git",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
@ -10,7 +10,7 @@
"author": "Hugh Rundle <hugh@hughrundle.net> (https://www.hughrundle.net)",
"license": "AGPL-3.0-or-later",
"dependencies": {
"axios": "^1.7.3",
"ws": "^8.18"
"axios": "^0.21.2",
"ws": "^7.5.2"
}
}