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
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
d233f9e5aa I sometimes really hate nodej 2024-06-10 18:07:59 +03:00
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
d993090f8b I actually didnt fix the issue with array of arrays. Now it should be fine 2024-06-10 18:03:15 +03:00
ecfc62ff2c Forgot to check if my temp array is > 0 😭 2024-06-10 18:00:51 +03:00
7ed5681639 Huh publicKey is undefined lol 2024-06-10 17:59:54 +03:00
5e52298196 Ehh its not remotePubKey but just pubKey 2024-06-10 17:58:37 +03:00
5d6728f39f Filtering all the peers except myself now 2024-06-10 17:57:52 +03:00
051aa09c2d Opps i had array of arrays of peers in message json 2024-06-10 17:55:23 +03:00
2ed13e50f7 Ok i will stop exiting to test it properly 2024-06-10 17:53:36 +03:00
aa53cb487b I tried to iterate over not iterable object again 😭 2024-06-10 17:50:20 +03:00
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
7751d03b57 Found something interesting called 'swarm.peers' 2024-06-10 17:44:32 +03:00
6980520a85 Lol i tried to iterate over not-iterable object 2024-06-10 17:40:57 +03:00
7399585d9e Trying to find a way to check which topic each pear is from 2024-06-10 17:38:50 +03:00
fda25abe8c Oops debugging didnt go as planned lol 2024-06-10 17:34:57 +03:00
4cfae430b2 Started working on ChatRoom class 2024-06-10 17:34:21 +03:00
8788adbc2b Fixed sending ON_READY_MESSAGE 2024-06-10 17:28:18 +03:00
d9dbdf4401 Oh i actually broke it because push returns length and not array itself 💀 2024-06-10 17:22:06 +03:00
961599f366 I might've fix sending all 'peers' lol 2024-06-10 17:19:36 +03:00
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
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
165d2f0faa Trying to fix a bug with message peers 2024-06-10 17:07:54 +03:00
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
9f5d5b7dba Merge branch 'main' of https://git.ssh.surf/snxraven/LinkUp-P2P-Chat 2024-06-09 21:01:00 +03:00
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);
} }