Compare commits

..

27 Commits

Author SHA1 Message Date
b88337c398 Merge pull request 'Fixed app.js not sending user ID itself and only peers it knows' (#5) from MiTask/LinkUp-P2P-Chat:main into main
Reviewed-on: #5
2024-06-10 15:26:59 +00:00
MrMasrozYTLIVE
bfe0bafebc I removed all of the debugging code for now to push the fix for app.js 2024-06-10 18:23:47 +03:00
MrMasrozYTLIVE
d233f9e5aa I sometimes really hate nodej 2024-06-10 18:07:59 +03:00
MrMasrozYTLIVE
4134e20403 Array of arrays got fixed but i still cant figure out the issue with topics ehh 2024-06-10 18:06:00 +03:00
MrMasrozYTLIVE
d993090f8b I actually didnt fix the issue with array of arrays. Now it should be fine 2024-06-10 18:03:15 +03:00
MrMasrozYTLIVE
ecfc62ff2c Forgot to check if my temp array is > 0 😭 2024-06-10 18:00:51 +03:00
MrMasrozYTLIVE
7ed5681639 Huh publicKey is undefined lol 2024-06-10 17:59:54 +03:00
MrMasrozYTLIVE
5e52298196 Ehh its not remotePubKey but just pubKey 2024-06-10 17:58:37 +03:00
MrMasrozYTLIVE
5d6728f39f Filtering all the peers except myself now 2024-06-10 17:57:52 +03:00
MrMasrozYTLIVE
051aa09c2d Opps i had array of arrays of peers in message json 2024-06-10 17:55:23 +03:00
MrMasrozYTLIVE
2ed13e50f7 Ok i will stop exiting to test it properly 2024-06-10 17:53:36 +03:00
MrMasrozYTLIVE
aa53cb487b I tried to iterate over not iterable object again 😭 2024-06-10 17:50:20 +03:00
MrMasrozYTLIVE
d1ee697c84 There's something even more interesting called 'peerInfo.topics' lol. So bad it has no good docs and i have to do this stuff to learn more 2024-06-10 17:48:24 +03:00
MrMasrozYTLIVE
7751d03b57 Found something interesting called 'swarm.peers' 2024-06-10 17:44:32 +03:00
MrMasrozYTLIVE
6980520a85 Lol i tried to iterate over not-iterable object 2024-06-10 17:40:57 +03:00
MrMasrozYTLIVE
7399585d9e Trying to find a way to check which topic each pear is from 2024-06-10 17:38:50 +03:00
MrMasrozYTLIVE
fda25abe8c Oops debugging didnt go as planned lol 2024-06-10 17:34:57 +03:00
MrMasrozYTLIVE
4cfae430b2 Started working on ChatRoom class 2024-06-10 17:34:21 +03:00
MrMasrozYTLIVE
8788adbc2b Fixed sending ON_READY_MESSAGE 2024-06-10 17:28:18 +03:00
MrMasrozYTLIVE
d9dbdf4401 Oh i actually broke it because push returns length and not array itself 💀 2024-06-10 17:22:06 +03:00
MrMasrozYTLIVE
961599f366 I might've fix sending all 'peers' lol 2024-06-10 17:19:36 +03:00
MrMasrozYTLIVE
704f6ca0dc Hmm how can i get publickey of the user sending info and not just peers who connected? 2024-06-10 17:17:34 +03:00
MrMasrozYTLIVE
805983e3f5 Oops forgot about bot startup message. It doesnt work because there's no known peers yet 2024-06-10 17:14:26 +03:00
MrMasrozYTLIVE
165d2f0faa Trying to fix a bug with message peers 2024-06-10 17:07:54 +03:00
MrMasrozYTLIVE
24101e5611 Trying to make multiple rooms support. This is gonna be a bit of a hell lol. 2024-06-09 22:55:32 +03:00
MrMasrozYTLIVE
9f5d5b7dba Merge branch 'main' of https://git.ssh.surf/snxraven/LinkUp-P2P-Chat 2024-06-09 21:01:00 +03:00
MrMasrozYTLIVE
9587ae4818 I guess its time to work on multiple rooms now 2024-06-09 11:19:57 +03:00
7 changed files with 31 additions and 8 deletions

7
app.js
View File

@ -296,13 +296,18 @@ function sendMessage(e) {
onMessageAdded(config.userName, message, config.userAvatar); onMessageAdded(config.userName, message, config.userAvatar);
let peersPublicKeys = [];
peersPublicKeys.push([...swarm.connections].map(peer => peer.remotePublicKey.toString('hex')));
peersPublicKeys = peersPublicKeys.flat(1);
peersPublicKeys.push(swarm.keyPair.publicKey.toString('hex'));
const messageObj = JSON.stringify({ const messageObj = JSON.stringify({
type: 'message', type: 'message',
name: config.userName, name: config.userName,
message, message,
avatar: config.userAvatar, avatar: config.userAvatar,
topic: b4a.toString(currentRoom.topic, 'hex'), topic: b4a.toString(currentRoom.topic, 'hex'),
peers: [...swarm.connections].map(peer => peer.remotePublicKey.toString('hex')), peers: peersPublicKeys,
timestamp: Date.now(), timestamp: Date.now(),
readableTimestamp: new Date().toLocaleString(), // Added human-readable timestamp readableTimestamp: new Date().toLocaleString(), // Added human-readable timestamp
}); });

View File

@ -42,7 +42,7 @@ loadCommands().then(commands => {
if (message.type == "icon") return; if (message.type == "icon") return;
console.log(message); console.log(message);
console.log(`Message received from ${message.name}@${peer} at ${new Date(message.timestamp).toLocaleTimeString()}: ${message.message}`); console.log(`Message received from ${message.name}@${message.topic} at ${new Date(message.timestamp).toLocaleTimeString()}: ${message.message}`);
// Check if the message starts with a command prefix // Check if the message starts with a command prefix
if (message.message.startsWith('!')) { if (message.message.startsWith('!')) {
@ -61,7 +61,7 @@ loadCommands().then(commands => {
bot.on('onBotJoinRoom', () => { bot.on('onBotJoinRoom', () => {
console.log("Bot is ready!"); console.log("Bot is ready!");
bot.sendMessage(process.env.ON_READY_MESSAGE); bot.sendMessageToAll(process.env.ON_READY_MESSAGE);
}); });
bot.joinChatRoom(process.env.LINKUP_ROOM_ID); bot.joinChatRoom(process.env.LINKUP_ROOM_ID);

View File

@ -4,6 +4,6 @@ export default {
handler: function(bot, args, message) { handler: function(bot, args, message) {
const responses = ['It is certain.', 'It is decidedly so.', 'Without a doubt.', 'Yes - definitely.', 'You may rely on it.', 'As I see it, yes.', 'Most likely.', 'Outlook good.', 'Yes.', 'Signs point to yes.', 'Reply hazy, try again.', 'Ask again later.', 'Better not tell you now.', 'Cannot predict now.', 'Concentrate and ask again.', 'Don\'t count on it.', 'My reply is no.', 'My sources say no.', 'Outlook not so good.', 'Very doubtful.']; const responses = ['It is certain.', 'It is decidedly so.', 'Without a doubt.', 'Yes - definitely.', 'You may rely on it.', 'As I see it, yes.', 'Most likely.', 'Outlook good.', 'Yes.', 'Signs point to yes.', 'Reply hazy, try again.', 'Ask again later.', 'Better not tell you now.', 'Cannot predict now.', 'Concentrate and ask again.', 'Don\'t count on it.', 'My reply is no.', 'My sources say no.', 'Outlook not so good.', 'Very doubtful.'];
const randomIndex = Math.floor(Math.random() * responses.length); const randomIndex = Math.floor(Math.random() * responses.length);
bot.sendMessage(responses[randomIndex]); bot.sendMessage(message.peers, responses[randomIndex]);
} }
}; };

View File

@ -3,6 +3,6 @@ export default {
description: 'Greet the user', description: 'Greet the user',
handler: function(bot, args, message) { handler: function(bot, args, message) {
const userName = message.name; const userName = message.name;
bot.sendMessage(`Hello, ${userName}! How can I assist you today?`); bot.sendMessage(message.peers, `Hello, ${userName}! How can I assist you today?`);
} }
}; };

View File

@ -2,6 +2,6 @@
export default { export default {
handler: function(bot, args, message) { handler: function(bot, args, message) {
bot.sendMessage('Pong!'); bot.sendMessage(message.peers, 'Pong!');
} }
}; };

View File

@ -0,0 +1,10 @@
class ChatRoom {
public ChatRoom(topic, peers) {
this.topic = topic;
this.peers = peers;
}
}
export default ChatRoom;

View File

@ -32,10 +32,18 @@ class Client extends EventEmitter {
}); });
} }
sendMessage(message) { sendMessage(roomPeers, message) {
console.log('Bot name:', this.botName); console.log('Bot name:', this.botName);
const timestamp = Date.now(); // Generate timestamp const timestamp = Date.now(); // Generate timestamp
const peers = [...this.swarm.connections]; const peers = [...this.swarm.connections].filter(peer => roomPeers.includes(peer.remotePublicKey.toString('hex'))); // We remove all the peers that arent included in a room
const data = JSON.stringify({name: this.botName, message, timestamp}); // Include timestamp
for (const peer of peers) peer.write(data);
}
sendMessageToAll(message) {
console.log('Bot name:', this.botName);
const timestamp = Date.now(); // Generate timestamp
const peers = [...this.swarm.connections]
const data = JSON.stringify({name: this.botName, message, timestamp}); // Include timestamp const data = JSON.stringify({name: this.botName, message, timestamp}); // Include timestamp
for (const peer of peers) peer.write(data); for (const peer of peers) peer.write(data);
} }