WhatsApp bot for the Remorah group house.
Log chore completion with the following
/trash
/recycling
/dishes
/bins
/surfaces
/vacuum
/car reserve <start datetime> <end datetime>
- ex
/car reserve tomorrow 2pm to 6pm
- uses the lib chrono for natural language date parsing
- will alert you if car is already reserved during this time
- ex
/car unreserve <start datetime> <end datetime>
/car list
- lists all reservations
/shop add a couple lightbulbs
/shop list
- returns shopping item IDs as well
/shop remove <item ID>...
- ex.
/shop remove 16 4
- ex.
If you have the gall to use anti-animal language as defined by PETA in a WhatsApp chat, the configured user will reply to that message with an animal-friendly alternative:
High scores will be tracked. Simply send a message with just the text
/idiomstats
to retrieve this data:
This app deploys to AWS lambda based on your AWS CLI's default profile.
The following parameter store keys need to be populated:
/whapi/token
: API token from Whapi/whatsapp/chat_ids
: comma separated chat IDs to enable the bot in. For regular chats you can find id using this endpoint: https://whapi.readme.io/reference/getchats. For group chats you can find id using this endpoint: https://whapi.readme.io/reference/getgroups/mongo/conn
: mongodb connection string/key
: API key to access your node server (you can just generate a UUID)/splitwise/group_id
: splitwise group id/splitwise/key
: splitwise key/splitwise/secret
: splitwise secret
Create an account at https://whapi.cloud/ to get an API token.
When lambda deploy completes, it will tell you the lambda's gateway endpoint. In your whapi channel, change the webhooks URL
to gateway/webhooks
where gateway
is the lambda gateway. Make sure only the messages POST
button is toggled.
To send your node server's API key with all webhook requests:
PATCH https://gate.whapi.cloud/settings
{
"webhooks": [
{
"events": [
{
"type": "messages",
"method": "post"
}
],
"mode": "body",
"headers": {
"x-api-key": "yourapikey"
},
"url": "https://yourgateway.com/webhooks"
}
]
}
You can get a free shared cluster on Mongo Atlas.
To set up shop item ID auto increment, follow the instructions here: https://www.mongodb.com/resources/products/platform/mongodb-auto-increment and use the following function code
exports = async function(changeEvent) {
var docId = changeEvent.fullDocument._id;
const countercollection = context.services.get("remorahchat").db(changeEvent.ns.db).collection("counters");
const shopcollection = context.services.get("remorahchat").db(changeEvent.ns.db).collection(changeEvent.ns.coll);
var counter = await countercollection.findOneAndUpdate({_id: changeEvent.ns },{ $inc: { seq_value: 1 }}, { returnNewDocument: true, upsert : true});
var updateRes = await shopcollection.updateOne({_id : docId},{ $set : {itemId : counter.seq_value}});
console.log(`Updated ${JSON.stringify(changeEvent.ns)} with counter ${counter.seq_value} result : ${JSON.stringify(updateRes)}`);
};
Create a key here: https://secure.splitwise.com/oauth_clients
npm i
serverless deploy