Merge pull request 'Adding !fetch command.' (#3) from subscribe into main

Reviewed-on: #3
This commit is contained in:
Stephen Vanderwarker 2023-11-16 22:48:09 -05:00
commit b27fcf8308

219
index.js
View File

@ -9,103 +9,146 @@ const xmpp = require('simple-xmpp');
var db = new sqlite3.Database('nip26.db'); var db = new sqlite3.Database('nip26.db');
let { bech32, bech32m } = require('bech32'); let {
bech32,
bech32m
} = require('bech32');
let letsCID; let letsCID;
let signedEvent; let signedEvent;
if (fs.existsSync('./config.ini')) { if (fs.existsSync('./config.ini')) {
const config = ini.parse(fs.readFileSync('./config.ini', 'utf-8')); const config = ini.parse(fs.readFileSync('./config.ini', 'utf-8'));
let sk = config.nostr.pkhex; let sk = config.nostr.pkhex;
let pk = nostr.getPublicKey(sk); let pk = nostr.getPublicKey(sk);
xmpp.on('online', function (data, to) { xmpp.on('online', function (data, to) {
console.log('Connected with JID: ' + config.xmpp.jid); console.log('Connected with JID: ' + config.xmpp.jid);
}); });
xmpp.on('chat', function (from, message) { xmpp.on('chat', function (from, message) {
function debug() { function debug() {
if (config.debug === '1') { if (config.debug === '1') {
console.log('[DEBUG]'); console.log('[DEBUG]');
console.log(message); console.log(message);
console.log(from); console.log(from);
}; };
} }
if (message === '!help') { // Add NIP-05, to get users latest kind 3, and notes.
xmpp.send(from, 'https://wiki.vanderwarker.family/doku.php?id=code:nostrsms:commands'); if (message === "!fetch") {
debug(); xmpp.send(from, "Sure. Please standby...");
} async function gogoGlobalShoes() {
else if (message === "!auth"){ const relay = nostr.relayInit(config.relays.read, WebSocket);
xmpp.send(from,"reauth (nip-26)"); relay.on('connect', () => {
console.log(`connected to ${relay.url}`);
const now = new Date(); });
const validUntil = now.getTime() + (30 * 24 * 60 * 60 * 1000); relay.on('error', () => {
const insertStmt = db.prepare('INSERT INTO users (pnum, pk) VALUES (?, ?)'); console.log(`failed to connect to ${relay.url}`);
insertStmt.run(from.split("@")[0], validUntil);
insertStmt.finalize();
debug();
}
else {
async function main() {
const relay = nostr.relayInit(config.relays.write, WebSocket);
relay.on('connect', () => {
console.log(`connected to ${relay.url}`);
});
relay.on('error', () => {
console.log(`failed to connect to ${relay.url}`);
});
await relay.connect();
let event = {
kind: 1,
pubkey: pk,
created_at: Math.floor(Date.now() / 1000),
tags: [],
content: message,
};
const signedEvent = nostr.finishEvent(event, sk);
letsCID = signedEvent.id;
showSID(letsCID,pk);
await relay.publish(signedEvent);
relay.close();
}
main().catch((error) => {
console.error(error);
}); });
async function showSID(letsCID,pk) { await relay.connect();
console.log(letsCID);
console.log(pk); let sub = relay.sub([{
const event = { kinds: [1],
id: letsCID, authors: [pk],
relays: [config.relays.write], limit: 5
author: pk, }, ])
kind: 1, sub.on('event', event => {
}; console.log('got event:', event);
const encodedNEvent = nostr.nip19.neventEncode(event);
xmpp.send(from, "nostr:" + encodedNEvent); // Check if the event is already an object
debug(); const conny = typeof event === 'string' ? JSON.parse(event) : event;
}
if (conny && conny.content && conny.pubkey && conny.created_at) {
const content = conny.content;
const author = conny.pubkey;
const createdAt = conny.created_at;
// Use the extracted properties as needed
console.log('Content:', content);
console.log('Author:', author);
console.log('Created At:', createdAt);
// You can send these properties via XMPP or perform other actions here
xmpp.send(from, `\"${content}\", - ${author} @ ${createdAt}`);
} else {
console.error('Invalid event structure or missing required properties.');
} }
}); });
xmpp.on('error', function (err) { }
console.error(err); gogoGlobalShoes().catch((error) => {
}); console.error(error);
xmpp.setPresence('chat', 'https://nostrsms.com');
xmpp.connect({
jid: config.xmpp.jid,
password: config.xmpp.password,
host: config.xmpp.host,
port: 5222
});
process.on('SIGINT', function() {
console.log("SigInt receieved. Shutdown inevitable!")
process.exit();
}); });
} else if (message === '!help') {
xmpp.send(from, 'https://wiki.vanderwarker.family/doku.php?id=code:nostrsms:commands');
debug();
} else if (message === "!auth") {
xmpp.send(from, "reauth (nip-26)");
const now = new Date();
const validUntil = now.getTime() + (30 * 24 * 60 * 60 * 1000);
const insertStmt = db.prepare('INSERT INTO users (pnum, token) VALUES (?, ?)');
insertStmt.run(from.split("@")[0], validUntil);
insertStmt.finalize();
debug();
} else {
async function newPost() {
const relay = nostr.relayInit(config.relays.write, WebSocket);
relay.on('connect', () => {
console.log(`connected to ${relay.url}`);
});
relay.on('error', () => {
console.log(`failed to connect to ${relay.url}`);
});
await relay.connect();
let event = {
kind: 1,
pubkey: pk,
created_at: Math.floor(Date.now() / 1000),
tags: [],
content: message,
};
const signedEvent = nostr.finishEvent(event, sk);
letsCID = signedEvent.id;
showSID(letsCID, pk);
await relay.publish(signedEvent);
relay.close();
}
newPost().catch((error) => {
console.error(error);
});
async function showSID(letsCID, pk) {
console.log(letsCID);
console.log(pk);
const event = {
id: letsCID,
relays: [config.relays.write],
author: pk,
kind: 1,
};
const encodedNEvent = nostr.nip19.neventEncode(event);
xmpp.send(from, "nostr:" + encodedNEvent);
debug();
}
}
});
xmpp.on('error', function (err) {
console.error(err);
});
xmpp.setPresence('chat', 'https://nostrsms.com');
xmpp.connect({
jid: config.xmpp.jid,
password: config.xmpp.password,
host: config.xmpp.host,
port: 5222
});
process.on('SIGINT', function () {
console.log("SigInt receieved. Shutdown inevitable!")
process.exit();
});
} else { } else {
console.log("Please create a config.ini"); console.log("Please create a config.ini");
console.log("See https://wiki.vanderwarker.family/doku.php?id=code:nostrsms:install"); console.log("See https://wiki.vanderwarker.family/doku.php?id=code:nostrsms:install");
console.log("and choose your preferred install method."); console.log("and choose your preferred install method.");
} }