]> ruin.nu Git - NDIRC.git/commitdiff
Add setdiscordid
authorMichael Andreen <harv@ruin.nu>
Sun, 24 Feb 2019 19:20:39 +0000 (20:20 +0100)
committerMichael Andreen <harv@ruin.nu>
Thu, 21 Mar 2019 15:47:50 +0000 (16:47 +0100)
Commands/Usermgm.pm
database/roles.sql

index 2b6176041287019a27c1c5af76e5a191612ba0bf..8dda53aaac5b3ac29c475a967a32b7ec397bf2f9 100644 (file)
@@ -417,6 +417,42 @@ SELECT username,hostmask,pnick FROM users WHERE hostmask = $1 OR pnick = $2
        }
 };
 
+command setdiscordid => {
+       help => q(Usage: .setdiscordid username discordid | Changes a user's discord id/tag Nick#id),
+       acl => q(bot_setdiscordid)
+}, class extends NDIRC::Command {
+       method execute ($c,$msg) {
+               my ($nick,$discordid) = $msg =~ /^(\S+) (\S+)$/ or die 'ARGS';
+               my $dbh = $c->model;
+
+               my $f = $dbh->prepare(q{SELECT uid,username FROM users WHERE username ILIKE ?});
+               $f->execute($nick);
+               my $user = $f->fetchrow_hashref;
+               if ($f->rows == 1){
+                       eval{
+                               $dbh->do(q{UPDATE users SET discord_id = NULLIF($1, 'NULL') WHERE uid = $2}
+                                       ,undef,$discordid,$user->{uid});
+                               $c->reply("Updated <b>$user->{username}</b>'s discord id to: <b>$discordid</b>");
+                       };
+                       if($@){
+                               if ($@ =~ /duplicate key value violates unique constraint/){
+                                       my ($username, $discordid) = $dbh->selectrow_array(q{
+SELECT username,discord_id FROM users WHERE discord_id = $1
+                                               },undef,$discordid);
+                                       $c->reply("<c04>Problem</c>, <b>$username</b> already uses discord id <b>$discordid</b>.");
+                               }else{
+                                       die $@;
+                               }
+                       }
+               }elsif ($f->rows == 0){
+                       $c->reply("No hit, maybe spelling mistake, or add % as wildcard");
+               }else{
+                       $c->reply("More than 1 user matched, please refine the search");
+               }
+               $f->finish;
+       }
+};
+
 my $points = class extends NDIRC::Command {
        has point => (
                is => 'ro',
index 657c9696515c1091fbe3ca5ce31bd41106784fed..0e5e6ded3f8ab1ed85d4ec2b30c21693942868a0 100644 (file)
@@ -44,6 +44,7 @@ INSERT INTO roles VALUES('irc_allycoords');
 INSERT INTO roles VALUES('irc_allygals');
 INSERT INTO roles VALUES('irc_g_intel');
 INSERT INTO roles VALUES('irc_anon');
+INSERT INTO roles VALUES('bot_setdiscordid');
 
 INSERT INTO group_roles (gid,role) VALUES('T','irc_p_nick');
 INSERT INTO group_roles (gid,role) VALUES('T','irc_p_intel');
@@ -86,6 +87,7 @@ INSERT INTO group_roles (gid,role) VALUES('T','irc_cmd');
 INSERT INTO group_roles (gid,role) VALUES('T','irc_allycoords');
 INSERT INTO group_roles (gid,role) VALUES('T','irc_allygals');
 INSERT INTO group_roles (gid,role) VALUES('T','irc_g_intel');
+INSERT INTO group_roles (gid,role) VALUES('T','bot_setdiscordid');
 
 INSERT INTO group_roles (gid,role) VALUES('M','irc_gs');
 INSERT INTO group_roles (gid,role) VALUES('M','irc_scan');
@@ -131,6 +133,7 @@ INSERT INTO group_roles (gid,role) VALUES('H','irc_forum_others');
 INSERT INTO group_roles (gid,role) VALUES('H','irc_allycoords');
 INSERT INTO group_roles (gid,role) VALUES('H','irc_allygals');
 INSERT INTO group_roles (gid,role) VALUES('H','irc_g_intel');
+INSERT INTO group_roles (gid,role) VALUES('H','bot_setdiscordid');
 
 INSERT INTO group_roles (gid,role) VALUES('B','irc_points_others');
 INSERT INTO group_roles (gid,role) VALUES('B','irc_a');