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

142
LINES

< > BotCompany Repo | #1025129 // Samantha v2 [server-aware, LIVE]

JavaX source code (Dynamic Module) [tags: use-pretranspiled] - run with: Stefan's OS

Uses 9908K of libraries. Click here for Pure Java version (15879L/116K).

!7

!include once #1026298 // DynTalkBot2 for JDA 4.0

module GreeterBot extends DynTalkBot2<GreeterBot.ByServer> {
  long greetingsPerformed;
  
  void init {
    super.init();
    makeByServer = () -> new ByServer;
    useAGIBlueForDropPunctuation = false;
    preprocessAtSelfToMyName = true;
    dropPunctuation = false;
    
    dm_vmBus_onMessage_q discordGuildLeave(voidfunc(Map map) {
      ret unless map.get('module) == module();
      O event = map.get('event);
      O user = rcall getUser(event);
      S name = cast rcall getName(user);
      long guildID = discord_guildIDFromEvent_gen(event);
      if (guildID == 0) fail("Guild zero: " + map);
      getByServer(guildID, true).onUserLeave(name, map);
    });
  }
 
  class ByServer extends DynTalkBot2.ByServer {
    bool enabled = true;
    S msg = "Welcome <user>!";
    S goodbyeMsg = "<user> just left us";
    long channelToGreetIn;
    int delay = 2; // seconds before posting greeting

    void onUserJoin(long userID, O... _) {
      S msg = replace(this.msg, "<user>", discordAt(userID));
      if (channelToGreetIn == 0) setField(channelToGreetIn := preferredChannelID);
      if (channelToGreetIn == 0) fail("Have no greeting channel"); 
      if (!boolPar noDelay(_)) sleepSeconds(delay);
      postInChannel(channelToGreetIn, msg);
    }
    
    void onUserLeave(S userName, O... _) {
      postInChannel(channelToGreetIn, replace(goodbyeMsg, "<user>", or2(userName, "an unknown user"));
    }
    
    S processSimplifiedLine(S s, O... _) {
      try answer super.processSimplifiedLine(s, _); // adding authorized users etc.
      
      new Matches m;
      
      S sOld = s;
      s = dropPrefixOrNull(myPrefix(), s);
      if (s == null) {
        print("no got prefix: " + quote(myPrefix()) + " / " + quote(sOld));
        null;
      }
      
      if (eqic(s, "prefer this channel")) {
        try answer checkAuth(_);
        long channelID = longPar channelID(_);
        if (channelID == 0) ret "No channel";
        setField(channelToGreetIn := channelID);
        ret "OK, will greet here from now on.";
      }
      
      if (eqic(s, "simulate greeting")) {
        print("userID=" + longPar userID(_));
        onUserJoin(longPar userID(_), paramsPlus(_, noDelay := true));
        ret "Greeting simulated";
      }
      
      if (eqic(s, "simulate goodbye")) {
        O user = rcall getAuthor(optPar event(_));
        S name = cast rcall getName(user);
        onUserLeave(name, _);
        ret "Goodbye simulated";
      }
      
      if (eqic(s, "get message")) ret msg;
      if (eqic(s, "get goodbye message")) ret goodbyeMsg;
      
      if (eqic(s, "get delay")) ret "Current greeting delay is: " + nSeconds(delay);
      if (swic(s, "set delay ", m)) {
        int i = parseFirstInt(m.rest());
        setField(delay := clamp(i, 0, 60));
        ret "Greeting delay set to " + nSeconds(delay);
      }
      
      if (swic_trim(s, "set message:", m)) {
        try answer checkAuth(_);
        setField(msg := dropPrefixTrim("Message changed to:", m.rest()));
        ret "Message changed to: " + msg;
      }
      
      if (swic_trim(s, "set goodbye message:", m)) {
        try answer checkAuth(_);
        setField(goodbyeMsg := m.rest();
        ret "Goodbye message changed to: " + msg;
      }
      
      if (eqic(s, "enable")) {
        try answer checkAuth(_);
        setField(enabled := true);
        ret "Enabled. Will greet every new arrival!";
      }
      
      if (eqic(s, "disable")) {
        try answer checkAuth(_);
        setField(enabled := true);
        ret "Disabled. Will not greet anyone.";
      }
      
      if (eqic(s, "advanced help"))
        ret trim([[
Advanced commands:
        
@me **get delay** -- get delay before posting greeting
@me **set delay to 5 seconds** -- change greeting delay
]]).replace("@me", atSelf());
      
      if (eqic(s, "help"))
        ret trim([[
I am a simple greeter (and farewell) bot. Status: ]] + enabledDisabled(enabled) + [[. Commands:

@me **simulate greeting** -- I greet you so you can test me
@me **get message** -- show current greeting message
@me **set message: Hello <user>! Bla bla...** -- change greeting. <user> is replaced with user name
@me **simulate goodbye** -- I pretend you walked away (although I know you didn't)
@me **get goodbye message** -- show current goodbye message (what I post when people leave)
@me **set goodbye message: <user> just left us** -- change farewell message
@me **prefer this channel** -- posts greetings in the channel you write this in
@me **enable/disable** -- enable/disable the auto-greeting
@me **masters**/**add master**/**delete master** -- change bot ownership
@me **source**/**support channel** -- see sources or join the support discord
@me **advanced help** -- see advanced help
  
[Bot made by https://BotCompany.de]
  ]]).replace("@me", atSelf());
  
      null;
    }
  }
}

Author comment

Began life as a copy of #1025122

download  show line numbers  debug dex  old transpilations   

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

No comments. add comment

Snippet ID: #1025129
Snippet name: Samantha v2 [server-aware, LIVE]
Eternal ID of this version: #1025129/38
Text MD5: 84df5ecce2bd7e21d08468d9d595daf2
Transpilation MD5: 9023249bd2efad168b43f41757bba9ef
Author: stefan
Category: javax / bots
Type: JavaX source code (Dynamic Module)
Public (visible to everyone): Yes
Archived (hidden from active list): No
Created/modified: 2020-05-26 21:18:20
Source code size: 5064 bytes / 142 lines
Pitched / IR pitched: No / No
Views / Downloads: 424 / 93281
Version history: 37 change(s)
Referenced in: #1025635 - The Owl [old]
#1025821 - Samantha v3 [per-guild auth, dev.]