nostr_console/lib/settings.dart
Vishal cb24f7e2bf added since in request to relays, for 120 days before now.
comments created in last 120 days are requested only.
2022-08-28 06:38:38 +05:30

212 lines
9.5 KiB
Dart

const int gEventsSinceDays = 120;
// for debugging
String gCheckEventId = "a4479de655094679cdfb10f347521aa58f24717cdc5ddba89fb346453a8a99ed";
String gRemoteAdminPubkey = "";
const int numWaitSeconds = 3000;
// global counters of total events read or processed
int numFileEvents = 0, numUserEvents = 0, numFeedEvents = 0, numOtherEvents = 0;
//String defaultServerUrl = 'wss://relay.damus.io';
const String nostrRelayUnther = 'wss://nostr-relay.untethr.me';
const String relayNostrInfo = 'wss://relay.nostr.info';
String defaultServerUrl = relayNostrInfo;
List<String> gListRelayUrls = [defaultServerUrl,
"wss://nostr-verified.wellorder.net",
"wss://nostr-relay.wlvs.space",
"wss://nostr-pub.wellorder.net",
"wss://relay.damus.io"];
// name of executable
const String exename = "nostr_console";
const String version = "0.0.7";
// well known disposable test private key
const String gDefaultPrivateKey = "9d00d99c8dfad84534d3b395280ca3b3e81be5361d69dc0abf8e0fdf5a9d52f9";
const String gDefaultPublicKey = "e8caa2028a7090ffa85f1afee67451b309ba2f9dee655ec8f7e0a02c29388180";
String userPrivateKey = gDefaultPrivateKey;
String userPublicKey = gDefaultPublicKey;
const int gMinValidTextWidth = 60; // minimum text width acceptable
const int gDefaultTextWidth = 120; // default text width
int gTextWidth = gDefaultTextWidth; // is changed by --width option
const int gSpacesPerDepth = 8; // constant
int gNumLeftMarginSpaces = 0;// this number is modified in main
String gAlignment = "center"; // is modified in main if --align argument is given
const int gapBetweenTopTrees = 1;
// after depth of maxDepthAllowed the thread is re-aligned to left by leftShiftThreadBy
const int gMinimumDepthAllowed = 2;
const int gMaximumDepthAllowed = 12;
const int gDefaultMaxDepth = 4;
int maxDepthAllowed = gDefaultMaxDepth;
const int leftShiftThreadsBy = 2;
// text color
const String defaultTextColor = "green";
const String greenColor = "\x1B[32m"; // green
const String cyanColor = "\x1b[36m"; // cyan
const String whiteColor = "\x1b[97m"; // white
const String blackColor = "\x1b[30m"; // black
const String redColor = "\x1B[31m"; // red
const String blueColor = "\x1b[34m"; // blue
Map<String, String> gColorMap = { "green": greenColor,
"cyan" : cyanColor,
"white": whiteColor,
"black": blackColor,
"red" : redColor,
"blue" : blueColor};
// 33 yellow, 31 red, 34 blue, 35 magenta. Add 60 for bright versions.
String gCommentColor = greenColor;
String gNotificationColor = cyanColor; // cyan
String gWarningColor = redColor; // red
const String colorEndMarker = "\x1B[0m";
// dummy account pubkey
const String gDummyAccountPubkey = "Non";
// By default the threads that were started in last one day are shown
// this can be changed with 'days' command line argument
const int gDefaultNumLastDays = 1;
int gNumLastDays = gDefaultNumLastDays;
class UserNameInfo {
int createdAt;
String name, about, picture;
UserNameInfo(this.createdAt, this.name, this.about, this.picture);
}
/*
* global user names from kind 0 events, mapped from public key to a 3 element array of [name, about, picture]
* JSON object {name: <username>, about: <string>, picture: <url, string>}
*/
Map<String, UserNameInfo> gKindONames = {};
// global reactions entry. Map of form <if of event reacted to, List of Reactors>
// reach Reactor is a list of 2-elements ( first is public id of reactor, second is comment)
Map< String, List<List<String>> > gReactions = {};
// bots ignored to reduce spam
List<String> gBots = [ "3b57518d02e6acfd5eb7198530b2e351e5a52278fb2499d14b66db2b5791c512", // robosats orderbook
"887645fef0ce0c3c1218d2f5d8e6132a19304cdc57cd20281d082f38cfea0072", // bestofhn
"f4161c88558700d23af18d8a6386eb7d7fed769048e1297811dcc34e86858fb2", // bitcoin_bot
"105dfb7467b6286f573cae17146c55133d0dcc8d65e5239844214412218a6c36", // zerohedge
"e89538241bf737327f80a9e31bb5771ccbe8a4508c04f1d1c0ce7336706f1bee", // Bitcoin news
"6a9eb714c2889aa32e449cfbb7854bc9780feed4ff3d887e03910dcb22aa560a" // "bible bot"
];
const String gDefaultEventsFilename = "all_nostr_events.txt";
String gEventsFilename = ""; // is set in arguments, and if set, then file is read from and written to
bool gDontWriteOldEvents = true;
const int gPurgeBeforeDays = 100;
const String gUsage = """$exename version $version
The nostr console client built using dart.
usage: $exename [OPTIONS]
OPTIONS
-p, --pubkey <public key> The hex public key of user whose events and feed are shown. Default is a hard-coded
well known private key. When given, posts/replies can't be sent.
-k, --prikey <private key> The hex private key of user whose events and feed are shown. Also used to sign events
sent. Default is a hard-coded well known private key.
-r, --relay <relay wss url> The relay url that is used as main relay. Default is $nostrRelayUnther.
-d, --days <N as num> The latest number of days for which events are shown. Default is $gDefaultNumLastDays.
-q, --request <REQ string> This request is sent verbatim to the default relay. It can be used to recieve all events
from a relay. If not provided, then events for default or given user are shown.
-f, --file <filename> Read from given file, if it is present, and at the end of the program execution, write
to it all the events (including the ones read, and any new received). Even if not given,
the default is to read from and write to $gDefaultEventsFilename . Can be turned off by
the --disable-file flag
-s, --disable-file When turned on, even the default filename is not read from.
-t, --translate Translate some of the recent posts using Google translate site ( and not api). Google
is accessed for any translation request only if this flag is present, and not otherwise.
UI Options
-a, --align <left> When "left" is given as option to this argument, then the text is aligned to left. By default
the posts or text is aligned to the center of the terminal.
-w, --width <width as num> This specifies how wide you want the text to be, in number of columns. Default is $gDefaultTextWidth.
Cant be less than $gMinValidTextWidth.
-m, --maxdepth <depth as num> The maximum depth to which the threads can be displayed. Minimum is $gMinimumDepthAllowed and
maximum allowed is $gMaximumDepthAllowed.
-c, --color <color> Color option can be green, cyan, white, black, red and blue.
-h, --help Print this usage message and exit.
""";
const String helpAndAbout =
'''
HOW TO USE
----------
* When entering a event you want to reply to, you need to enter only the first few letters of the event-id. Lets say the event is
+-------+
|Author : vishalxl id: 6c1 Time: 07:48 PM Aug 24, 2022
|Message: example comment or post or reply
The event id of this event is 6c1.
When the UI asks for an event id, you can just enter 6c1, and press enter. Then the program will find the most recent event in its memory
with this prefix as its id, and send a reply/like to it. It is possible that some other event has the same 3 letter prefix, and is printed
later than your own event, in which case a different event will get a reply/like. But the odds of that happening are very low if the event
you are replying to is not too old.
To ensure that you reply to the exact right event id, invoke the program with --prefix N, where N is a large number. Then the program will
display the first N letters of each event, and you can reply to a longer ID. N can be as large as 64.
*
EXAMPLES
--------
To get ALL the latest messages for last 3 days (on linux bash which allows backtick execution):
\$ nostr_console.exe --request=`echo "[\\"REQ\\",\\"l\\",{\\"since\\":\$(date -d \\'-3 day\\' +%s)}]"`
To get the latest messages for user with private key K ( that is also used to sign posted/sent messages):
\$ nostr_console.exe --prikey=K
To get the latest messages for user with private key K for last 4 days ( default is 1) from relay R:
\$ nostr_console.exe --prikey=K --relay=R --days=4
To write events to a file ( and later read from it too), for any given private key K:
\$ nostr_console.exe --file=eventsFile.txt --prikey=K
PROGRAM ARGUMENTS
-----------------
Also seen by giving --help option when invoking the application.
$gUsage
KNOWN ISSUES
------------
* Does not get all the events, or in other words, does not properly get all the events from their own relays, and thus misses some events.
* Does not work on Tor network
ABOUT
-----
Nostr console/terminal client. Built using Dart.
Source Code and Binaries: https://github.com/vishalxl/nostr_console
''';