Vice City: Multiplayer

Server Development => Community Plugins => Topic started by: habi on Sep 13, 2023, 04:44 PM

Title: Discord Sync - A very simple plugin
Post by: habi on Sep 13, 2023, 04:44 PM
Introduction
This is a plugin used to get discord text messages. It can also send texts-
SendMessage("VCMP Server is online");

Configuration
In server.cfg, you add token and channel :
(https://i.imgur.com/QB8MXin.png)

Creating a bot and getting token

1. Head to https://discord.com/developers/applications.
(https://i.imgur.com/lJfep45.png)

2. Click on New Application
(https://i.imgur.com/HODgPiR.png)

3. Select Bot on left panel.
(https://i.imgur.com/149Ww3v.png)

4. Scroll down to MESSAGE CONTENT INTENT
(https://i.imgur.com/pL8RiA6.png)

5. Click on Save Changes
(https://i.imgur.com/nmIbnF6.png)

6. After Saving changes, scroll down and select permissions:
(https://i.imgur.com/mJoGMtw.png)

7. Now at last, scroll up and Click on RESET TOKEN
(https://i.imgur.com/kRCUrZJ.png)
Click on Yes, do it
(https://i.imgur.com/kftNGFQ.png)
Atlast, copy the token
(https://i.imgur.com/NDT7Wca.png)
This is the token you should provide in server.cfg mentioned on top

channel
Below you can see what is your channel id. We do not need Server ID.
(https://i.imgur.com/cIrrL6x.png)
This is the channel you should provide in server.cfg mentioned on top

Adding bot as a member to your Discord Server

1. Go to General Information and copy the Application ID:
(https://i.imgur.com/o4E68Ik.png)
2. Open a new tab and go to https://discordapp.com/api/oauth2/authorize?client_id=<YOUR_APPLICATION_ID>&permissions=0&scope=bot
(https://i.imgur.com/PK7Ir2W.png)
3. Select your Server from dropdown list and click on Authorize on bottom.
4. Now, you can see the bot in your channel as offline.

Functions of DiscordSync

Events/Callbacks

Example
#file: scripts/main.nut
//Part 1 - In Game Events
function onScriptLoad()
{
    print("VCMP 0.4 Server (rel006) Loaded");
}
function onPlayerJoin(player)
{
    //This will send message to discord - 'SendMessage'
    SendMessage("```\\n"+player.Name+" has joined the server\\n```");
}
function onPlayerPart(player, reason)
{
    SendMessage("```\\n"+player.Name+" has left the server ("+GetReason(reason)+")\\n```");
}
function onPlayerChat(player, text)
{
    SendMessage(player.Name+": "+text);
        return 1;
}
function onPlayerDeath(player,reason)
{
    local reasontxt=GetDeathReason(player, reason);
    SendMessage(format("```\\n%s\\n```",reasontxt));
}
function onPlayerKill( killer, player, reason, bodypart )
{
    SendMessage( killer.Name + " killed " + player.Name + " `" + GetWeaponName( reason ) + "` " + GetBodyPart(bodypart) + "" );   
}
function onPlayerTeamKill( killer, player, reason, bodypart )
{
    SendMessage( killer.Name + " team killed " + player.Name + " `" + GetWeaponName( reason ) + "` " + GetBodyPart(bodypart) + "" );   
}
function onPlayerSpawn( player )
{
    SendMessage(player.Name+" has spawned.");
}
function onPlayerCrashDump( player, CrashReport )
{
    SendMessage(player.Name+" crash dumped.");
}

//Part 2 - Discord Events
function onDiscordCommand(username, cmd, text ) //Called when using / or !. text="" if empty
{
    switch(cmd)
    {
        case "echo":SendMessage(text);break;
        case "hostname": SendMessage(GetServerName());break;
        case "gamemode": SendMessage(GetGameModeName());break;
        case "say": if(text!=""){
                    local msg=format("[#ffffff]%s (web): [#ffff00]%s", username, text);
                    ClientMessageToAll(msg,255,255,255);
                    print(format("\x1b[1K\r\x1b[1;33m%s (web): \x1b[37m%s\x1b[0m",username,text));
                    }else SendMessage("Usage: !say text");
                    break;
        case "players":  local plr, names="",count=0;
            for(local i=0;i<GetMaxPlayers();i++)
            {
                plr=FindPlayer(i);
                if(plr)
                {
                    names+=format("%s[%d] %s",count?"\\n":"",i,plr.Name);
                    count++;
                }
            }
            if(!count)
                SendMessage("No players in server");
            else
            {
                //See new line added
                SendMessage(format("Total players: %d.\\n%s",count, names));
            }
            break;
        case "gravity": SendMessage("```fix\\nGravity: "+GetGravity()+"\\n```");break;
        case "time": SendMessage("The current game time is "+format("%02d:%02d",GetHour(),GetMinute()));break;
        case "weather":
            local weather = GetWeather();

            switch (weather) {
                case 0:
                    weather = "Mostly clear skies";
                    break;
                case 1:
                    weather = "Overcast";
                    break;
                case 2:
                    weather = "Rainy-lightning";
                    break;
                case 3:
                    weather = "Foggy";
                    break;
                case 4:
                    weather = "Clear skies";
                    break;
                case 5:
                    weather = "Rainy";
                    break;
                case 6:
                    weather = "Dark sky partly cloudy";
                    break;
                case 7:
                    weather = "Light sky partly cloudy";
                    break;
                case 8:
                    weather = "Overcast partly cloudy";
                    break;
                case 9:
                    weather = "Grey sky black clouds";
                    break;
                default:
                    weather = "Unknown";
                    break;
            }

            SendMessage("Current weather: " + weather);
        break;
        case "cmds":
        case "help":
        case "cmd":
        SendMessage("Available cmds:\\n"+
"`echo say hostname gamemode players gravity time weather cmds`\\n"+
"Use / or ! as prefix.");break;
    }
}

//Chat messages in channel
function onDiscordMessage(username, text)
{
    print("\x1b[1K\r\x1b[1;33m"+username+":\x1b[1;37m "+text+"\x1b[0m");
}
//useful functions

//Credits: SLC https://forum.vc-mp.org/index.php?topic=400.msg2563
function GetBodyPart(bpid)
{
 switch(bpid)
 {
        case BODYPART_BODY:    return "Body";
        case BODYPART_TORSO:    return "Torso";
        case BODYPART_LEFTARM:  return "Left Arm";
        case BODYPART_RIGHTARM: return "Right Arm";
        case BODYPART_LEFTLEG:  return "Left Leg";
        case BODYPART_RIGHTLEG: return "Right Leg";
        case BODYPART_HEAD:    return "Head";
        default:                return "Unknown";
  }
}
function GetReason(reason)
{
    switch(reason)
    {
        case 1: return "quit";
        case 2: return "kicked";
        case 3: return "crashed";
        case 4: return "anticheat";
        case 0:
        default: return "timeout";
    }
}
function GetDeathReason(player,reason)
{
    switch(reason)
    {
        case WEP_FALL: return player.Name+" fell to death.";
        case WEP_DROWNED: return player.Name+" drowned.";
        case WEP_VEHICLE: return player.Name+" died in car.";
        case WEP_SUICIDE: return player.Name+" suicided.";
        case 41: return player.Name+" exploded.";
        default: return player.Name+" died.";
    }
}

Screenshots
(https://i.imgur.com/QWvegXr.png)
(https://i.imgur.com/GhXgo4R.png)


The result of !say command from discord:
!say can you see me?
(https://i.imgur.com/Na5hODw.jpg)

The messages send in discord are received by vcmp server:
(https://i.imgur.com/Lm97emO.png)


Downloads
Click any of the below buttons to download:
(https://i.imgur.com/lW4dGHT.png) (https://sourceforge.net/projects/discordsync/files/discordsync_win.7z/download)  (https://i.imgur.com/89t3Ux5.png) (https://sourceforge.net/projects/discordsync/files/discordsync-linux-64-v1.1.tar/download)(updated)    (https://i.imgur.com/5VimQ56.png) (https://sourceforge.net/projects/discordsync/files/DiscordSync-lin86.tar/download) (https://dabuttonfactory.com/button.png?t=Windows+XP+&f=Open+Sans-Bold&ts=18&tc=fff&hp=30&vp=8&c=11&bgt=unicolored&bgc=15d798) (https://sourceforge.net/projects/discordsync/files/discordsync_winxp.zip/download)
The last item Windows XP build uses builtin-openssl(statically linked) instead of native schannel of windows.

License
This plugin is open-sourced. See LICENSE file in downloads.

Source code
The source-code can be downloaded:
(https://i.imgur.com/WXmUkq2.png) (https://sourceforge.net/projects/discordsync/files/discordsync-source.tar.gz/download)
(Size 6 MB approx, because of static libraries inside).




Squirrel ServerC++ Server
(https://i.imgur.com/KK8VT2x.png)    (https://i.imgur.com/QaO6HgQ.png)
The plugin does not depend on squirrel. A Cpp server(script coded in cplus plus and compiled to dll, which is put in 'plugins' directory) is using discord above

More Info on C++ Server
In order to show that this discord plugin can also be used in non-squirrel servers, i made an example of c++ server using it. In the screenshot you can see it as Loaded plugin: hello32 apart from discordsync04rel32.
It's source and compile instructions can be downloaded below:
(https://i.imgur.com/nv5VzKq.png) (https://sourceforge.net/projects/discordsync/files/vcmp-cpp-server.7z/download)
(https://i.imgur.com/lUZjMDw.png)
It shows !say command in game( the green one in above picture). It also send ingame /say command to discord (pink one).

(https://i.imgur.com/vPtcjXg.png)

Plugin Commands (Reference)
The plugin both give and respond to certain plugin commands:

Sl NoNameIdentifier          Identifier(In decimal)MessageIn/OutDetails
1CMD_DISCONNECT0x3B456AB3994405043InDisconnects the bot from discord gateway.
2CMD_RECONNECT0x3B456AB4994405044"" OR "RESUME"InDisconnects and reconnect. If message="RESUME", then it will Resume instead of restarting new session.
3CMD_LOGMSGEX0x3B456AB5994405045""InLogs message into the server_log.txt without printing to screen. It uses VT sequences to disable console printing.
4CMD_SHOWUPTIME0x3B456AB6994405046""InPrints how much time the bot's current session is up.
5CMD_RESUME0x3B456AB7994405047""InIf the bot is connected, it will disconnect and resume the session again.
6CMD_STATUS0x3B456AB8994405048""InPrints to console "Connected" or "Not Connected" which is the status of bot
7CMD_CHANNEL0x3B456AB9994405049ChannelIDInChange channel
8CMD_TOKEN0x3B456ABA994405050tokenInChange bot token
9CMD_ONMESSAGE0x3B456ABB994405051nick:cmd txtOutWhen users send messages starting with '/' or '!'. Not sent by default unless CMD_SUBSCRIBE is received.
10CMD_SUBSCRIBE0x3B456ABC994405052""InTo activate CMD_ONMESSAGE and CMD_ONMESSAGE2.
11CMD_UNSUBSCRIBE0x3B456ABD994405053""InTo deactivate effects of CMD_SUBSCRIBE
12CMD_SENDMSG0x3B456ABE994405054msgInSends a message to the channel as chat
13CMD_ONCONNECT0x3B456ABF994405055""OutSends when connected and "READY" signal received from discord gateway
14CMD_ON_DISCONNECT0x3B456AC0994405056""OutWhen connection is closed permanently
15CMD_VERBOSE0x3B456AC1994405057"" or "off"InTo show some reconnection messages if any on screen. By default, they are hidden.
16CMD_ONMESSAGE20x3B456AC2994405058nick:txtOutWhen the user chats normally without '/' or '!'

(https://i.imgur.com/2MaYKFe.png)
Interacting RCON tool (which has function to send plgncmd) with VCMP Server. You can download the tool and its plugin here (https://forum.vc-mp.org/index.php?topic=9199.0)
Title: Re: Discord Sync - A very simple plugin
Post by: H.a.S.a.N on Sep 23, 2023, 05:30 PM
Wow bro Great plugin at VC:MP
Amazing and better
Not like others plugin for discord out date

Bro keep going your works done!!
Good luck!
Title: Re: Discord Sync - A very simple plugin
Post by: habi on Sep 24, 2023, 12:24 PM
Thank you for your kind words. I'm glad to see you're enjoying the plugin. Happy Gaming.
Title: Re: Discord Sync - A very simple plugin
Post by: Xann^ on Sep 28, 2023, 08:15 AM
Hey there habi! great job out there!
Suggestion: You should try putting the source code and stuff on github aswell.
Title: Re: Discord Sync - A very simple plugin
Post by: habi on Sep 28, 2023, 11:58 AM
It is already there: GitHub (https://github.com/habi498/DiscordSync)

Anybody having discord connection problem check you have given Message Content Intent permission. This is shown on step 4 of  first post of this topic(Creating a bot and getting token).
Title: Re: Discord Sync - A very simple plugin
Post by: habi on Sep 29, 2023, 06:01 AM
1.0 (a)
Fixed one bug of bot not connecting even if with proper token, channel and permissions.
Thanks to Xann
download links in first post updated
Title: Re: Discord Sync - A very simple plugin
Post by: Roystang on Nov 11, 2023, 06:10 PM
any idea why this happens?
(https://cdn.discordapp.com/attachments/662253048885936128/1172956233771261982/image.png?ex=6562339e&is=654fbe9e&hm=8084fb7cfb8268f79f0e7aa05e4d9211cb32621cdddc8f5a95dc1dcf081822c4&)
linux x64 plugin
Title: Re: Discord Sync - A very simple plugin
Post by: habi on Nov 12, 2023, 06:56 AM
No, it means discord has send a CLOSE event.

The server_log.txt must contain more information.

Please open server_log.txt and post the relevant messages.

In that file,
[DiscordSync] Resume URL:
[DiscordSync] Session id:
means it first connected and then disconnected.

Did you give MESSAGE CONTENT INTENT explained in step 4 of first post in this topic.?
Title: Re: Discord Sync - A very simple plugin
Post by: Roystang on Nov 12, 2023, 09:23 AM
Quote from: habi on Nov 12, 2023, 06:56 AM-

i forgot to mention windows plugin works fine with the same script.

for some reasons server_log.txt is not logging the console content, however i took a screenshot that might help,
(https://cdn.discordapp.com/attachments/801465673468739586/1173189193267171338/image.png?ex=65630c94&is=65509794&hm=811344dedc6ec5007afc776800b5127956ca4f7008f61c21631e74bea3ce6231&)

(https://cdn.discordapp.com/attachments/801465673468739586/1173188058879905792/image.png?ex=65630b86&is=65509686&hm=321a64ade9892764acb516da6bef07ca05497c63cb6cbc15bb6652b924e99af6&)
(these are emotes present in the discord server btw)

and yes i did the step 4 as mentioned and it works fine with windows server
Title: Re: Discord Sync - A very simple plugin
Post by: habi on Nov 13, 2023, 03:34 PM
Quote from: Roystang on Nov 12, 2023, 09:23 AM..
I understand the windows plugin works fine.  I see you are also getting a 'Session ID'. 

To debug the issue, i have finished a program to get more information about the bug.

Download this linux console program (it is discordsync scratch) and run it. console (https://www.mediafire.com/file/d35tqa3p3pga94l/console/file)
chmod 777 console
./console your_bot_token

what do you see. Can you see "My ID is 98776082681339..", "READY", "GUILD_CREATE" events? Do your console get terminated automatically? It should stay for success.

To compare with, windows version: console.exe (https://www.mediafire.com/file/zg1wdl72al52u3k/console.exe/file) (might need vcruntime140.dll, msvcp140.dll, vcruntime140_1.dll)
Title: Re: Discord Sync - A very simple plugin
Post by: Pun1sh3r on Nov 16, 2023, 11:30 AM
Quote from: Roystang on Nov 11, 2023, 06:10 PMany idea why this happens?
(https://cdn.discordapp.com/attachments/662253048885936128/1172956233771261982/image.png?ex=6562339e&is=654fbe9e&hm=8084fb7cfb8268f79f0e7aa05e4d9211cb32621cdddc8f5a95dc1dcf081822c4&)
linux x64 plugin

Got the same Error, Windows works fine but Linux not, I get also no Information in Server Log about the Plugin
Title: Re: Discord Sync - A very simple plugin
Post by: habi on Nov 18, 2023, 03:29 AM
Quote from: Pun1sh3r on Nov 16, 2023, 11:30 AMGot the same Error, Windows works fine but Linux not, I get also no Information in Server Log about the Plugin

Could you try this console program which connect to discord and post the results
download (https://www.mediafire.com/file/d35tqa3p3pga94l/console/file)
Title: Re: Discord Sync - A very simple plugin
Post by: Pun1sh3r on Nov 18, 2023, 11:43 AM
Quote from: habi on Nov 18, 2023, 03:29 AM
Quote from: Pun1sh3r on Nov 16, 2023, 11:30 AMGot the same Error, Windows works fine but Linux not, I get also no Information in Server Log about the Plugin

Could you try this console program which connect to discord and post the results
download (https://www.mediafire.com/file/d35tqa3p3pga94l/console/file)


"t": "READY"
}
My ID is 47821648158326XXXX doesnt terminate and runs
Title: Re: Discord Sync - A very simple plugin
Post by: habi on Nov 18, 2023, 02:31 PM
Thanks for testing it out. Now, it will be easier for me to find out the bug. I will post the solution once it is found.
Title: Re: Discord Sync - A very simple plugin
Post by: habi on Dec 04, 2023, 04:00 PM
@Pun1sh3r, i made a debug version of plugin( discordsync04rel64so ). It will print all messages send and received. Could you try this and post me the results.
If there is secret token in output, you may remove cut/hide that part.

debug version - here (https://www.mediafire.com/file/yxlp2smxkmn8l07/discordsync04rel64.so/file)

(i was bit lazy last week, also my computer got some problems)
Title: Re: Discord Sync - A very simple plugin
Post by: Pun1sh3r on Dec 06, 2023, 05:54 PM
I get now this Error:
"Plugin error >> dlopen() 'plugins/discordsync04rel64.so' failed: /lib/x86_64-lin                                                             ux-gnu/libstdc++.so.6: version `GLIBCXX_3.4.29' not found (required by plugins/d                                                             iscordsync04rel64.so)"

Cant really test it now, did you changed something? Cause it was working with the old one
Title: Re: Discord Sync - A very simple plugin
Post by: habi on Dec 07, 2023, 01:14 PM
Thank you for testing it out.
GLIBCXX_3.4.29 is now fixed ( downgraded compiler, Virtual Machine from Ubuntu 22 to 18.04 and recompiled ).

Here is the new file:
discordsync04rel64so (https://www.mediafire.com/file/q19l5hc5gmtuknw/discordsync04rel64.so/file)

Please do test and tell me if it is fixed.

Title: Re: Discord Sync - A very simple plugin
Post by: Roystang on Dec 09, 2023, 06:23 AM
Quote from: habi on Dec 07, 2023, 01:14 PMThank you for testing it out.
GLIBCXX_3.4.29 is now fixed ( downgraded compiler, Virtual Machine from Ubuntu 22 to 18.04 and recompiled ).

Here is the new file:
discordsync04rel64so (https://www.mediafire.com/file/q19l5hc5gmtuknw/discordsync04rel64.so/file)

Please do test and tell me if it is fixed.


[MODULE]  Loaded DiscordSync v1.0 [a] by habi
6:22:44 {"t":null,"s":null,"op":10,"d":{"heartbeat_interval":41250,"_trace":["[\"gateway-prd-us-east1-b-cjn8\",{\"micros\":0.0}]"]}}
6:22:44 {"op":1, "d":null}
6:22:44 {"op":1, "d":null}
6:22:44             {           "op":2, "d":         {              "token":"MTE3NTE3MTczNDgxNTY1ODEwNw.Ga_j37.SdJOINQcHOJ12MLWA0qQsHNjkswHP87if_pBTg",             "intents":37377,                "properties":                   {                   "os": "linux",                  "browser": "my_library",                        "device": "my_library"              }           }           }      
6:22:44 {"op":1, "d":null}
6:22:44 {"op":1, "d":null}
6:22:44 {"op":1, "d":null}
6:22:44 {"op":1, "d":null}
6:22:44 {"op":1, "d":null}
6:22:44 {"op":1, "d":null}
6:22:44 {"op":1, "d":null}
6:22:44 {"op":1, "d":null}
6:22:44 {"op":1, "d":null}
6:22:44 {"op":1, "d":null}
6:22:44 {"op":1, "d":null}
6:22:44 {"op":1, "d":null}
6:22:44 {"op":1, "d":null}
6:22:44 {"op":1, "d":null}
6:22:44 {"op":1, "d":null}
6:22:44 {"op":1, "d":null}
6:22:44 {"op":1, "d":null}
6:22:44 {"op":1, "d":null}
6:22:44 {"t":null,"s":null,"op":11,"d":null}
6:22:44 {"op":1, "d":null}
6:22:44 {"t":null,"s":null,"op":11,"d":null}
6:22:44 {"op":1, "d":null}
6:22:44 {"t":null,"s":null,"op":11,"d":null}
6:22:44 {"op":1, "d":null}
6:22:44 {"t":null,"s":null,"op":11,"d":null}
6:22:44 {"op":1, "d":null}
6:22:44 {"t":null,"s":null,"op":11,"d":null}
6:22:44 {"op":1, "d":null}
6:22:44 {"t":null,"s":null,"op":11,"d":null}
6:22:44 {"op":1, "d":null}
6:22:44 {"t":null,"s":null,"op":11,"d":null}
6:22:44 {"op":1, "d":null}
6:22:44 {"t":null,"s":null,"op":11,"d":null}
6:22:44 {"op":1, "d":null}
6:22:44 {"t":null,"s":null,"op":11,"d":null}
6:22:44 {"op":1, "d":null}
6:22:44 {"t":null,"s":null,"op":11,"d":null}
6:22:44 {"op":1, "d":null}
6:22:44 {"t":null,"s":null,"op":11,"d":null}
6:22:44 {"op":1, "d":null}
6:22:44 {"op":1, "d":null}
6:22:44 {"t":null,"s":null,"op":11,"d":null}
6:22:44 {"op":1, "d":null}
6:22:44 {"t":null,"s":null,"op":11,"d":null}
6:22:44 {"op":1, "d":null}
6:22:44 {"t":null,"s":null,"op":11,"d":null}
6:22:44 {"op":1, "d":null}
6:22:44 {"t":null,"s":null,"op":11,"d":null}
6:22:44 {"op":1, "d":null}
6:22:44 {"t":null,"s":null,"op":11,"d":null}
6:22:44 {"op":1, "d":null}
6:22:44 {"t":null,"s":null,"op":11,"d":null}
6:22:44 {"op":1, "d":null}
6:22:44 {"t":null,"s":null,"op":11,"d":null}
6:22:44 {"op":1, "d":null}
6:22:44 {"t":null,"s":null,"op":11,"d":null}
6:22:44 {"op":1, "d":null}
6:22:44 {"t":null,"s":null,"op":11,"d":null}
6:22:44 {"op":1, "d":null}
6:22:44 {"t":null,"s":null,"op":11,"d":null}
6:22:44 {"op":1, "d":null}
6:22:44 {"t":null,"s":null,"op":11,"d":null}
6:22:44 {"op":1, "d":null}
6:22:44 {"t":null,"s":null,"op":11,"d":null}
6:22:44 {"op":1, "d":null}
6:22:44 {"t":null,"s":null,"op":11,"d":null}
6:22:44 {"op":1, "d":null}
6:22:44 {"t":null,"s":null,"op":11,"d":null}
6:22:44 {"op":1, "d":null}
6:22:44 {"t":null,"s":null,"op":11,"d":null}
6:22:44 {"op":1, "d":null}
6:22:44 {"t":null,"s":null,"op":11,"d":null}
6:22:44 {"op":1, "d":null}
6:22:44 {"t":null,"s":null,"op":11,"d":null}
6:22:44 {"op":1, "d":null}
6:22:44 {"t":null,"s":null,"op":11,"d":null}
6:22:44 {"op":1, "d":null}
6:22:44 {"t":"READY","s":1,"op":0,"d":{"v":10,"user_settings":{},"user":{"verified":true,"username":"VCDM 1.0","mfa_enabled":true,"id":"1175171734815658107","global_name":null,"flags":0,"email":null,"discriminator":"0136","bot":true,"avatar":null},"session_type":"normal","session_id":"d3c0b089ee5dc5ece07684a0cbdbada0","resume_gateway_url":"wss://gateway-us-east1-b.discord.gg","relationships":[],"private_channels":[],"presences":[],"guilds":[{"unavailable":true,"id":"767652109817479189"}],"guild_join_reques
6:22:44 [DiscordSync]: Connected to Discord
6:22:44 [DiscordSync] Resume URL: wss://gateway-us-east1-b.discord.gg/?v=10&encoding=json
6:22:44 [DiscordSync] Session id: d3c0b089ee5dc5ece07684a0cbdbada0
6:22:44 {"op":1, "d":1}
6:22:44 {"t":"GUILD_CREATE","s":2,"op":0,"d":{"default_message_notifications":0,"splash":null,"unavailable":false,"afk_channel_id":null,"large":false,"application_id":null,"banner":null,"afk_timeout":300,"latest_onboarding_question_id":null,"region":"deprecated","id":"767652109817479189","discovery_splash":null,"application_command_counts":{"3":2,"2":1,"1":203},"name":"Vice City Deathmatch","nsfw_level":0,"embedded_activities":[],"max_members":500000,"owner_id":"494913733114462228","emojis":[{"version":0,"
6:22:44 {"op":1, "d":2}
6:22:44 {"t":null,"s":null,"op":11,"d":null}
6:22:44 {"op":1, "d":2}
6:22:44 {"t":null,"s":null,"op":11,"d":null}
6:22:44 {"op":1, "d":2}
6:22:44 {"t":null,"s":null,"op":11,"d":null}
6:22:44 {"op":1, "d":2}
6:22:44 {"t":null,"s":null,"op":11,"d":null}
6:22:44 {"op":1, "d":2}
6:22:44 {"t":null,"s":null,"op":11,"d":null}
6:22:44 {"op":1, "d":2}
6:22:44 {"t":null,"s":null,"op":11,"d":null}
6:22:44 {"op":1, "d":2}
6:22:44 {"t":null,"s":null,"op":11,"d":null}
6:22:44 {"op":1, "d":2}
6:22:44 {"t":null,"s":null,"op":11,"d":null}
6:22:44 {"op":1, "d":2}
6:22:44 {"t":null,"s":null,"op":11,"d":null}
6:22:44 {"op":1, "d":2}
6:22:44 {"t":null,"s":null,"op":11,"d":null}
6:22:44 {"op":1, "d":2}
6:22:44 {"t":null,"s":null,"op":11,"d":null}
6:22:44 {"op":1, "d":2}
6:22:44 {"t":null,"s":null,"op":11,"d":null}
6:22:44 {"op":1, "d":2}
6:22:44 {"t":null,"s":null,"op":11,"d":null}
6:22:44 {"op":1, "d":2}
6:22:44 {"t":null,"s":null,"op":11,"d":null}
6:22:44 {"op":1, "d":2}
6:22:44 {"t":null,"s":null,"op":11,"d":null}
6:22:44 {"op":1, "d":2}
6:22:44 {"t":null,"s":null,"op":11,"d":null}
6:22:44 {"op":1, "d":2}
6:22:44 {"t":null,"s":null,"op":11,"d":null}
6:22:44 {"op":1, "d":2}
6:22:44 {"t":null,"s":null,"op":11,"d":null}
6:22:44 {"op":1, "d":2}
6:22:44 {"t":null,"s":null,"op":11,"d":null}
6:22:44 {"op":1, "d":2}
6:22:44 {"t":null,"s":null,"op":11,"d":null}
6:22:44 {"op":1, "d":2}
6:22:44 {"t":null,"s":null,"op":11,"d":null}
6:22:44 {"op":1, "d":2}
6:22:44 {"t":null,"s":null,"op":11,"d":null}
6:22:44 {"op":1, "d":2}
6:22:44 {"t":null,"s":null,"op":11,"d":null}
6:22:44 {"op":1, "d":2}
6:22:44 {"t":null,"s":null,"op":11,"d":null}
6:22:44 {"op":1, "d":2}
6:22:44 {"t":null,"s":null,"op":11,"d":null}
6:22:44 {"op":1, "d":2}
6:22:44 {"t":null,"s":null,"op":11,"d":null}
6:22:44 {"op":1, "d":2}
6:22:44 {"t":null,"s":null,"op":11,"d":null}
6:22:44 {"op":1, "d":2}
6:22:44 {"t":null,"s":null,"op":11,"d":null}
6:22:44 {"op":1, "d":2}
6:22:44 {"t":null,"s":null,"op":11,"d":null}
6:22:44 {"op":1, "d":2}
6:22:44 {"t":null,"s":null,"op":11,"d":null}
6:22:44 {"op":1, "d":2}
6:22:44 {"t":null,"s":null,"op":11,"d":null}
6:22:44 {"op":1, "d":2}
6:22:44 {"t":null,"s":null,"op":11,"d":null}
6:22:44 {"op":1, "d":2}
6:22:44 {"t":null,"s":null,"op":11,"d":null}
6:22:44 {"op":1, "d":2}
6:22:44 {"t":null,"s":null,"op":11,"d":null}
6:22:44 {"op":1, "d":2}
6:22:44 {"t":null,"s":null,"op":11,"d":null}
6:22:44 {"op":1, "d":2}
6:22:44 {"t":null,"s":null,"op":11,"d":null}
6:22:44 {"op":1, "d":2}
6:22:44 {"t":null,"s":null,"op":11,"d":null}
6:22:44 {"op":1, "d":2}
6:22:44 {"t":null,"s":null,"op":11,"d":null}
6:22:44 {"op":1, "d":2}
6:22:44 {"t":null,"s":null,"op":11,"d":null}
6:22:44 {"op":1, "d":2}
6:22:44 {"t":null,"s":null,"op":11,"d":null}
6:22:44 {"op":1, "d":2}
6:22:44 {"t":null,"s":null,"op":11,"d":null}
6:22:44 {"op":1, "d":2}
6:22:44 {"t":null,"s":null,"op":11,"d":null}
6:22:44 {"op":1, "d":2}
6:22:44 {"t":null,"s":null,"op":11,"d":null}
6:22:44 {"op":1, "d":2}
6:22:44 {"t":null,"s":null,"op":11,"d":null}
6:22:44 {"op":1, "d":2}
6:22:44 {"t":null,"s":null,"op":11,"d":null}
6:22:44 {"op":1, "d":2}
6:22:44 {"t":null,"s":null,"op":11,"d":null}
6:22:44 {"op":1, "d":2}
6:22:44 {"t":null,"s":null,"op":11,"d":null}
6:22:44 {"op":1, "d":2}
6:22:44 {"t":null,"s":null,"op":11,"d":null}
6:22:44 {"op":1, "d":2}
6:22:44 {"t":null,"s":null,"op":11,"d":null}
6:22:44 {"op":1, "d":2}
6:22:44 {"t":null,"s":null,"op":11,"d":null}
6:22:44 {"op":1, "d":2}
6:22:44 {"t":null,"s":null,"op":11,"d":null}
6:22:44 {"op":1, "d":2}
6:22:44 {"t":null,"s":null,"op":11,"d":null}
6:22:44 {"op":1, "d":2}
6:22:44 {"t":null,"s":null,"op":11,"d":null}
6:22:44 {"op":1, "d":2}
6:22:44 {"t":null,"s":null,"op":11,"d":null}
6:22:44 {"op":1, "d":2}
6:22:44 {"t":null,"s":null,"op":11,"d":null}
6:22:44 {"op":1, "d":2}
6:22:44 {"t":null,"s":null,"op":11,"d":null}
6:22:44 {"op":1, "d":2}
6:22:44 {"t":null,"s":null,"op":11,"d":null}
6:22:44 {"op":1, "d":2}
6:22:44 {"t":null,"s":null,"op":11,"d":null}
6:22:44 {"op":1, "d":2}
6:22:44 {"t":null,"s":null,"op":11,"d":null}
6:22:44 {"op":1, "d":2}
6:22:44 {"t":null,"s":null,"op":11,"d":null}
6:22:44 {"op":1, "d":2}
6:22:44 {"t":null,"s":null,"op":11,"d":null}
6:22:44 {"op":1, "d":2}
6:22:44 {"t":null,"s":null,"op":11,"d":null}
6:22:44 {"op":1, "d":2}
6:22:44 {"t":null,"s":null,"op":11,"d":null}
6:22:44 {"op":1, "d":2}
6:22:44 {"t":null,"s":null,"op":11,"d":null}
6:22:44 {"op":1, "d":2}
6:22:45 {"t":null,"s":null,"op":11,"d":null}
6:22:45 {"op":1, "d":2}
6:22:45 {"t":null,"s":null,"op":11,"d":null}
6:22:45 {"op":1, "d":2}
6:22:45 {"t":null,"s":null,"op":11,"d":null}
6:22:45 {"op":1, "d":2}
6:22:45 {"t":null,"s":null,"op":11,"d":null}
6:22:45 {"op":1, "d":2}
6:22:45 {"t":null,"s":null,"op":11,"d":null}
6:22:45 {"op":1, "d":2}
6:22:45 {"t":null,"s":null,"op":11,"d":null}
6:22:45 {"op":1, "d":2}
6:22:45 {"t":null,"s":null,"op":11,"d":null}
6:22:45 {"op":1, "d":2}
6:22:45 {"t":null,"s":null,"op":11,"d":null}
6:22:45 {"op":1, "d":2}
6:22:45 {"t":null,"s":null,"op":11,"d":null}
6:22:45 {"op":1, "d":2}
6:22:45 {"t":null,"s":null,"op":11,"d":null}
6:22:45 {"op":1, "d":2}
6:22:45 {"t":null,"s":null,"op":11,"d":null}
6:22:45 {"op":1, "d":2}
6:22:45 {"t":null,"s":null,"op":11,"d":null}
6:22:45 {"op":1, "d":2}
6:22:45 {"t":null,"s":null,"op":11,"d":null}
6:22:45 {"op":1, "d":2}
6:22:45 {"t":null,"s":null,"op":11,"d":null}
6:22:45 {"op":1, "d":2}
6:22:45 {"t":null,"s":null,"op":11,"d":null}
6:22:45 {"op":1, "d":2}
6:22:45 {"t":null,"s":null,"op":11,"d":null}
6:22:45 {"op":1, "d":2}
6:22:45 {"t":null,"s":null,"op":11,"d":null}
6:22:45 {"op":1, "d":2}
6:22:45 {"t":null,"s":null,"op":11,"d":null}
6:22:45 {"op":1, "d":2}
6:22:45 {"t":null,"s":null,"op":11,"d":null}
6:22:45 {"op":1, "d":2}
6:22:45 {"t":null,"s":null,"op":11,"d":null}
6:22:45 {"op":1, "d":2}
6:22:45 {"t":null,"s":null,"op":11,"d":null}
6:22:45 {"op":1, "d":2}
6:22:45 {"t":null,"s":null,"op":11,"d":null}
6:22:45 {"op":1, "d":2}
6:22:45 {"t":null,"s":null,"op":11,"d":null}
6:22:45 {"op":1, "d":2}
6:22:45 {"t":null,"s":null,"op":11,"d":null}
6:22:45 {"op":1, "d":2}
6:22:45 {"t":null,"s":null,"op":11,"d":null}
6:22:45 {"op":1, "d":2}
6:22:45 {"t":null,"s":null,"op":11,"d":null}
6:22:45 {"op":1, "d":2}
6:22:45 meta->flags: 8
[MODULE]  Gateway connection closed. Disconnected.
6:22:45 [DiscordSync] Gateway connection closed.
6:22:45 DiscordSync_CloseConnection was called
Title: Re: Discord Sync - A very simple plugin
Post by: habi on Dec 09, 2023, 07:00 AM
Ah, i see the problem. It is sending same message too many times.
Let me reach home and i will fix it.
Thanks for testing,  Roystang.
Title: Re: Discord Sync - A very simple plugin
Post by: habi on Dec 09, 2023, 09:25 AM
Can anyone confirm this solves the problem.
discordsync04rel64so (http://www.mediafire.com/file/2uyfjvk6ym81qy5/discordsync04rel64.so)    v1.1
Title: Re: Discord Sync - A very simple plugin
Post by: Roystang on Dec 10, 2023, 01:31 PM
Quote from: habi on Dec 09, 2023, 09:25 AMCan anyone confirm this solves the problem.
discordsync04rel64so (http://www.mediafire.com/file/2uyfjvk6ym81qy5/discordsync04rel64.so)    v1.1

It works fine now, thank you.
Title: Re: Discord Sync - A very simple plugin
Post by: habi on Dec 10, 2023, 03:30 PM
Great. Thank you for verifying.
The main download links updated.
Title: Re: Discord Sync - A very simple plugin
Post by: Pun1sh3r on Dec 13, 2023, 10:33 PM
Thanks, works fine now!
Title: Re: Discord Sync - A very simple plugin
Post by: gamingpro on Jan 31, 2024, 07:48 PM
Man so thank you but i need add messages in more than x1 channel how ? and i need know if player role ID  ?