Not logged in.  Login/Logout/Register | List snippets | | Create snippet | Upload image | Upload data

94
LINES

< > BotCompany Repo | #1024519 // DynTalkBot - DynDiscordHopper + input simplification, onUserJoin, name, authorizedUsers

JavaX fragment (include) [tags: use-pretranspiled]

Uses 4998K of libraries. Click here for Pure Java version (12711L/91K).

abstract sclass DynTalkBot > DynDiscordHopper {
  switchable S myName = "Anonymous bot";
  transient bool useAGIBlueForDropPunctuation = true;
  transient bool preprocessAtSelfToMyName = true;
  transient bool dropPunctuation = true;
  L<Long> authorizedUsers = ll(547706854680297473); // stefan
  
  start {
    dm_vmBus_onMessage_q('discordGuildJoin, voidfunc(Map map) {
      ret unless map.get('module) == module();
      print("Got join");
      onUserJoin(getLong userID(map), map);
    });
  }
  
  // overridable
  void onUserJoin(long userID, O... _) {}
  
  @Override S answer(S input, Map map) {
    try answer super.answer(input, map); // discord hopping
    
    ret mapEachLine_tlft_nempties(input, s -> {
      ret processLine(s, map);
    });
  }
  
  S processLine(S s, O... _) {
    s = preprocess(s, _);
    ret processSimplifiedLine(s, _);
  }
  
  S preprocess(S s, O... _) {
    if (preprocessAtSelfToMyName && discordBotID != 0)
      s = replace(s, atSelf(), " " + myName + " ");
    if (dropPunctuation)
      s = dropPunctuation3_withAGIBlue(useAGIBlueForDropPunctuation, s);
    s = trim(simpleSpaces_noTok(s));
    print("simplified >> " + quote(s));
    ret s;
  }
  
  S myPrefix() {
    ret preprocessAtSelfToMyName ? myName + " " :
      (dropPunctuation ? replace(atSelf(), "@", "") /* @ is killed by preprocessing */ : atSelf()) + " ";
  }
  
  // extend me
  S processSimplifiedLine(S input, O... _) {
    new Matches m;
    
    input = dropPrefixOrNull(myPrefix(), input);
    if (input == null) null;
    
    if (eqicOneOf(input, "support channel", "support server", "support"))
      ret "Get support for me here: " + nextGenBotsDiscordInvite();
      
    if (eqicOneOf(input, "source", "sources", "source code"))
      ret snippetLink(programID());

    if (swic_trim(input, "add master ", m)) {
      try answer checkAuth(_);

      add(authorizedUsers, parseFirstLong(m.rest()));
      change();
      
      ret "Okidoki. Have " + n2(l(authorizedUsers), "master");
    }
    
    if (eqic(input, "masters"))
      ret empty(authorizedUsers) ? "I have no masters." : "My masters are: " + joinWithComma(map discordAtPlusID(authorizedUsers));
    
    if (swic_trim(input, "delete master ", m)) {
      try answer checkAuth(_);

      remove(authorizedUsers, parseFirstLong(m.rest()));
      change();
      
      ret "Okidoki. Have " + n2(l(authorizedUsers), "master");
    }
    null;
  }
  
  bool authed(O... _) {
    ret contains(authorizedUsers, optPar userID(_));
  }

  S checkAuth(O... _) {  
    long userID = longPar userID(_);
    bool result = authed(_);
    print("Auth-checking user ID: " + userID + " => " + result);
    if (!result) ret "You are not authorized";
    null;
  }
}

download  show line numbers  debug dex  old transpilations   

Travelled to 6 computer(s): bhatertpkbcr, mqqgnosmbjvj, pyentgdyhuwx, pzhvpgtvlbxg, tvejysmllsmz, vouqrxazstgt

No comments. add comment

Snippet ID: #1024519
Snippet name: DynTalkBot - DynDiscordHopper + input simplification, onUserJoin, name, authorizedUsers
Eternal ID of this version: #1024519/36
Text MD5: 1ec2536c44313dd2576cd6ee835261fd
Transpilation MD5: 7bb458347e7b4b574bc510b40067edb5
Author: stefan
Category: javax / agi.blue
Type: JavaX fragment (include)
Public (visible to everyone): Yes
Archived (hidden from active list): No
Created/modified: 2019-09-08 15:11:48
Source code size: 2831 bytes / 94 lines
Pitched / IR pitched: No / No
Views / Downloads: 357 / 867
Version history: 35 change(s)
Referenced in: [show references]