mirror of
https://github.com/vishalxl/nostr_console.git
synced 2025-04-27 11:08:13 +02:00
improved notification logic, added some pow code but unused now, added large intro print
This commit is contained in:
parent
e3aae09f9d
commit
1e493147e8
@ -30,7 +30,7 @@ void printUsage() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
Future<void> main(List<String> arguments) async {
|
Future<void> main(List<String> arguments) async {
|
||||||
|
printIntro("Nostr");
|
||||||
Logger.root.level = Level.ALL; // defaults to Level.INFO
|
Logger.root.level = Level.ALL; // defaults to Level.INFO
|
||||||
Logger.root.onRecord.listen((record) {
|
Logger.root.onRecord.listen((record) {
|
||||||
print('${record.level.name}: ${record.time}: ${record.message}');
|
print('${record.level.name}: ${record.time}: ${record.message}');
|
||||||
|
@ -31,7 +31,7 @@ Future<void> processNotifications(Tree node) async {
|
|||||||
* If replyToId is blank, then it does not reference any e/p tags, and thus becomes a top post
|
* If replyToId is blank, then it does not reference any e/p tags, and thus becomes a top post
|
||||||
* otherwise e and p tags are found for the given event being replied to, if that event data is available
|
* otherwise e and p tags are found for the given event being replied to, if that event data is available
|
||||||
*/
|
*/
|
||||||
Future<void> sendReplyPostLike(Tree node, String replyToId, String replyKind, String content) async {
|
Future<void> sendReplyPostLike(Tree node, String replyToId, String replyKind, String content, [int powLeadingBits = 0]) async {
|
||||||
String strTags = node.getTagStr(replyToId, exename);
|
String strTags = node.getTagStr(replyToId, exename);
|
||||||
if( replyToId.isNotEmpty && strTags == "") { // this returns empty only when the given replyto ID is non-empty, but its not found ( nor is it 64 bytes)
|
if( replyToId.isNotEmpty && strTags == "") { // this returns empty only when the given replyto ID is non-empty, but its not found ( nor is it 64 bytes)
|
||||||
print("${gWarningColor}The given target id was not found and/or is not a valid id. Not sending the event.$colorEndMarker");
|
print("${gWarningColor}The given target id was not found and/or is not a valid id. Not sending the event.$colorEndMarker");
|
||||||
@ -40,12 +40,33 @@ Future<void> sendReplyPostLike(Tree node, String replyToId, String replyKind, St
|
|||||||
|
|
||||||
int createdAt = DateTime.now().millisecondsSinceEpoch ~/1000;
|
int createdAt = DateTime.now().millisecondsSinceEpoch ~/1000;
|
||||||
String id = getShaId(userPublicKey, createdAt, replyKind, strTags, content);
|
String id = getShaId(userPublicKey, createdAt, replyKind, strTags, content);
|
||||||
|
|
||||||
|
// generate POW if required
|
||||||
|
|
||||||
|
String vanityTag = strTags;
|
||||||
|
if (powLeadingBits> 0) {
|
||||||
|
log.info("Starting pow");
|
||||||
|
|
||||||
|
for( int i = 0; i < 1000000; i++) {
|
||||||
|
vanityTag = strTags + ',["nonce","$i"]';
|
||||||
|
id = getShaId(userPublicKey, createdAt, replyKind, vanityTag, content);
|
||||||
|
if( id.substring(0, 4) == "000") {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
log.info("Ending pow");
|
||||||
|
print("Found id: $id");
|
||||||
|
}
|
||||||
|
|
||||||
String sig = sign(userPrivateKey, id, "12345612345612345612345612345612");
|
String sig = sign(userPrivateKey, id, "12345612345612345612345612345612");
|
||||||
|
|
||||||
String toSendMessage = '["EVENT",{"id":"$id","pubkey":"$userPublicKey","created_at":$createdAt,"kind":$replyKind,"tags":[$strTags],"content":"$content","sig":"$sig"}]';
|
String toSendMessage = '["EVENT",{"id":"$id","pubkey":"$userPublicKey","created_at":$createdAt,"kind":$replyKind,"tags":[$vanityTag],"content":"$content","sig":"$sig"}]';
|
||||||
relays.sendRequest(defaultServerUrl, toSendMessage);
|
//relays.sendRequest(defaultServerUrl, toSendMessage);
|
||||||
|
sendRequest( gListRelayUrls, toSendMessage);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// is same as above. remove it TODO
|
||||||
Future<void> sendChatMessage(Tree node, String channelId, String messageToSend) async {
|
Future<void> sendChatMessage(Tree node, String channelId, String messageToSend) async {
|
||||||
String replyKind = "42";
|
String replyKind = "42";
|
||||||
|
|
||||||
@ -56,7 +77,9 @@ Future<void> sendChatMessage(Tree node, String channelId, String messageToSend)
|
|||||||
String sig = sign(userPrivateKey, id, "12345612345612345612345612345612");
|
String sig = sign(userPrivateKey, id, "12345612345612345612345612345612");
|
||||||
|
|
||||||
String toSendMessage = '["EVENT",{"id":"$id","pubkey":"$userPublicKey","created_at":$createdAt,"kind":$replyKind,"tags":[$strTags],"content":"$messageToSend","sig":"$sig"}]';
|
String toSendMessage = '["EVENT",{"id":"$id","pubkey":"$userPublicKey","created_at":$createdAt,"kind":$replyKind,"tags":[$strTags],"content":"$messageToSend","sig":"$sig"}]';
|
||||||
relays.sendRequest(defaultServerUrl, toSendMessage);
|
//relays.sendRequest(defaultServerUrl, toSendMessage);
|
||||||
|
|
||||||
|
sendRequest( gListRelayUrls, toSendMessage);
|
||||||
}
|
}
|
||||||
|
|
||||||
// send event e
|
// send event e
|
||||||
@ -473,7 +496,7 @@ Future<void> mainMenuUi(Tree node, var contactList) async {
|
|||||||
replyKind = "7";
|
replyKind = "7";
|
||||||
}
|
}
|
||||||
|
|
||||||
await sendReplyPostLike(node, replyToId, replyKind, content);
|
await sendReplyPostLike(node, replyToId, replyKind, content, 0);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 3:
|
case 3:
|
||||||
|
@ -201,3 +201,26 @@ Source Code and Binaries: https://github.com/vishalxl/nostr_console
|
|||||||
|
|
||||||
''';
|
''';
|
||||||
|
|
||||||
|
void printIntro(String msg) {
|
||||||
|
|
||||||
|
String toPrint =
|
||||||
|
"""
|
||||||
|
▀█▄ ▀█▀ ▄
|
||||||
|
█▀█ █ ▄▄▄ ▄▄▄▄ ▄██▄ ▄▄▄ ▄▄
|
||||||
|
█ ▀█▄ █ ▄█ ▀█▄ ██▄ ▀ ██ ██▀ ▀▀
|
||||||
|
█ ███ ██ ██ ▄ ▀█▄▄ ██ ██
|
||||||
|
▄█▄ ▀█ ▀█▄▄█▀ █▀▄▄█▀ ▀█▄▀ ▄██▄
|
||||||
|
|
||||||
|
██████╗ ██████╗ ███╗ ██╗███████╗ ██████╗ ██╗ ███████╗
|
||||||
|
██╔════╝██╔═══██╗████╗ ██║██╔════╝██╔═══██╗██║ ██╔════╝
|
||||||
|
██║ ██║ ██║██╔██╗ ██║███████╗██║ ██║██║ █████╗
|
||||||
|
██║ ██║ ██║██║╚██╗██║╚════██║██║ ██║██║ ██╔══╝
|
||||||
|
╚██████╗╚██████╔╝██║ ╚████║███████║╚██████╔╝███████╗███████╗
|
||||||
|
╚═════╝ ╚═════╝ ╚═╝ ╚═══╝╚══════╝ ╚═════╝ ╚══════╝╚══════╝
|
||||||
|
|
||||||
|
|
||||||
|
""";
|
||||||
|
|
||||||
|
print("\n$toPrint\n");
|
||||||
|
|
||||||
|
}
|
||||||
|
@ -699,7 +699,7 @@ class Tree {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// returns true if the treee or its children has a post or like by user; and notification flags are set for such events
|
// returns true if the treee or its children has a reply or like for the user with public key pk; and notification flags are set for such events
|
||||||
bool hasRepliesAndLikes(String pk) {
|
bool hasRepliesAndLikes(String pk) {
|
||||||
//print("----- pk = $pk");
|
//print("----- pk = $pk");
|
||||||
bool hasReaction = false;
|
bool hasReaction = false;
|
||||||
@ -710,16 +710,26 @@ class Tree {
|
|||||||
if( reactions != null) {
|
if( reactions != null) {
|
||||||
if( reactions.length > 0) {
|
if( reactions.length > 0) {
|
||||||
//print("has reactions");
|
//print("has reactions");
|
||||||
reactions.forEach((reaction) { e.eventData.newLikes.add(reaction[0]);});
|
reactions.forEach((reaction) {
|
||||||
|
// dont add notificatoin for self reaction
|
||||||
|
Event? reactorEvent = allChildEventsMap[reaction[0]]?.e;
|
||||||
|
if( reactorEvent != null) {
|
||||||
|
if( reactorEvent.eventData.pubkey != pk){ // ignore self likes
|
||||||
|
e.eventData.newLikes.add(reaction[0]);
|
||||||
hasReaction = true;
|
hasReaction = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if( e.eventData.pubkey == pk && children.length > 0) {
|
if( e.eventData.pubkey == pk && children.length > 0) {
|
||||||
for( int i = 0; i < children.length; i++ ) {
|
for( int i = 0; i < children.length; i++ ) {
|
||||||
// if child is someone else then set notifications and flag
|
children.forEach((child) {
|
||||||
children.forEach((c) { c.e.eventData.isNotification = ((c.e.eventData.pubkey != pk)? true: false) ; childMatches = true; });
|
// if child is someone else then set notifications and flag, means there are replies to this event
|
||||||
|
childMatches = child.e.eventData.isNotification = ((child.e.eventData.pubkey != pk)? true: false) ;
|
||||||
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -937,16 +947,20 @@ void addMessageToChannel(String channelId, String messageId, var tempChildEvents
|
|||||||
room.messageIds.add(messageId);
|
room.messageIds.add(messageId);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
//if(gDebug> 0) print("room has ${room.messageIds.length} messages already. adding new one to it. ");
|
|
||||||
|
if(gDebug> 0) print("room has ${room.messageIds.length} messages already. adding new one to it. ");
|
||||||
|
|
||||||
for(int i = 0; i < room.messageIds.length; i++) {
|
for(int i = 0; i < room.messageIds.length; i++) {
|
||||||
int eventTime = (tempChildEventsMap[room.messageIds[i]]?.e.eventData.createdAt??0);
|
int eventTime = (tempChildEventsMap[room.messageIds[i]]?.e.eventData.createdAt??0);
|
||||||
if( newEventTime < eventTime) {
|
if( newEventTime < eventTime) {
|
||||||
// shift current i and rest one to the right, and put event Time here
|
// shift current i and rest one to the right, and put event Time here
|
||||||
|
if(gDebug> 0) print("In addMessageToChannel: inserted in middle to channel ${room.chatRoomId} ");
|
||||||
room.messageIds.insert(i, messageId);
|
room.messageIds.insert(i, messageId);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if(gDebug> 0) print("In addMessageToChannel: added to channel ${room.chatRoomId} ");
|
||||||
|
|
||||||
// insert at end
|
// insert at end
|
||||||
room.messageIds.add(messageId);
|
room.messageIds.add(messageId);
|
||||||
return;
|
return;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user