Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
V4NSH4J
GitHub Repository: V4NSH4J/discord-mass-DM-GO
Path: blob/main/discord/button_click.go
310 views
1
// Copyright (C) 2021 github.com/V4NSH4J
2
//
3
// This source code has been released under the GNU Affero General Public
4
// License v3.0. A copy of this license is available at
5
// https://www.gnu.org/licenses/agpl-3.0.en.html
6
package discord
7
8
import (
9
"encoding/json"
10
"fmt"
11
"os"
12
"time"
13
14
"github.com/V4NSH4J/discord-mass-dm-GO/instance"
15
"github.com/V4NSH4J/discord-mass-dm-GO/utilities"
16
"github.com/zenthangplus/goccm"
17
)
18
19
func LaunchButtonClicker() {
20
cfg, instances, err := instance.GetEverything()
21
if err != nil {
22
utilities.LogErr("Error while getting instances or config %s", err)
23
return
24
}
25
var tokenFile, successFile, failedFile string
26
if cfg.OtherSettings.Logs {
27
path := fmt.Sprintf(`logs/button_clicker/DMDGO-BC-%s-%s`, time.Now().Format(`2006-01-02 15-04-05`), utilities.RandStringBytes(5))
28
err := os.MkdirAll(path, 0755)
29
if err != nil && !os.IsExist(err) {
30
utilities.LogErr("Error creating logs directory: %s", err)
31
utilities.ExitSafely()
32
}
33
tokenFileX, err := os.Create(fmt.Sprintf(`%s/token.txt`, path))
34
if err != nil {
35
utilities.LogErr("Error creating token file: %s", err)
36
utilities.ExitSafely()
37
}
38
tokenFileX.Close()
39
successFileX, err := os.Create(fmt.Sprintf(`%s/success.txt`, path))
40
if err != nil {
41
utilities.LogErr("Error creating success file: %s", err)
42
utilities.ExitSafely()
43
}
44
successFileX.Close()
45
failedFileX, err := os.Create(fmt.Sprintf(`%s/failed.txt`, path))
46
if err != nil {
47
utilities.LogErr("Error creating failed file: %s", err)
48
utilities.ExitSafely()
49
}
50
failedFileX.Close()
51
tokenFile, successFile, failedFile = tokenFileX.Name(), successFileX.Name(), failedFileX.Name()
52
for i := 0; i < len(instances); i++ {
53
instances[i].WriteInstanceToFile(tokenFile)
54
}
55
}
56
token := utilities.UserInput("Enter a token which can see the message:")
57
id := utilities.UserInput("Enter the ID of the message:")
58
channel := utilities.UserInput("Enter the ID of the channel:")
59
server := utilities.UserInput("Enter the ID of the server:")
60
msg, err := instance.FindMessage(channel, id, token)
61
if err != nil {
62
utilities.LogErr("Error while finding message: %v", err)
63
return
64
}
65
utilities.LogInfo("Message found!\n %s", msg)
66
var Msg instance.Message
67
err = json.Unmarshal([]byte(msg), &Msg)
68
if err != nil {
69
utilities.LogErr("Error while unmarshalling message: %v", err)
70
return
71
}
72
if len(Msg.Components) == 0 {
73
utilities.LogErr("Message has no components (Buttons or similar)")
74
return
75
}
76
for i := 0; i < len(Msg.Components); i++ {
77
fmt.Printf("%v) Row %v", i, i)
78
}
79
row := utilities.UserInputInteger("Enter Row number:")
80
for i := 0; i < len(Msg.Components[row].Buttons); i++ {
81
if Msg.Components[row].Buttons[i].Label != "" {
82
fmt.Printf("%v) Button %v [%v]", i, i, Msg.Components[row].Buttons[i].Label)
83
} else if Msg.Components[row].Buttons[i].Emoji.Name != "" {
84
fmt.Printf("%v) Button %v [%v]", i, i, Msg.Components[row].Buttons[i].Emoji)
85
} else {
86
fmt.Printf("%v) Button %v [Name or Emoji not found]", i, i)
87
}
88
}
89
column := utilities.UserInputInteger("Select Button:")
90
threads := utilities.UserInputInteger("Enter number of threads:")
91
if threads > len(instances) || threads == 0 {
92
threads = len(instances)
93
}
94
c := goccm.New(threads)
95
for i := 0; i < len(instances); i++ {
96
c.Wait()
97
go func(i int) {
98
defer c.Done()
99
err := instances[i].StartWS()
100
if err != nil {
101
utilities.LogFailed("Error while starting websocket: %v", err)
102
} else {
103
utilities.LogSuccess("Websocket opened %s", instances[i].CensorToken())
104
}
105
respCode, err := instances[i].PressButton(row, column, server, Msg)
106
if err != nil {
107
utilities.LogFailed("Error while pressing button: %v", err)
108
if cfg.OtherSettings.Logs {
109
instances[i].WriteInstanceToFile(failedFile)
110
}
111
return
112
}
113
if respCode != 204 && respCode != 200 {
114
utilities.LogFailed("Error while pressing button: %v", respCode)
115
if cfg.OtherSettings.Logs {
116
instances[i].WriteInstanceToFile(failedFile)
117
}
118
119
return
120
}
121
utilities.LogSuccess("Button pressed on instance %v", instances[i].CensorToken())
122
if cfg.OtherSettings.Logs {
123
instances[i].WriteInstanceToFile(successFile)
124
}
125
if instances[i].Ws != nil {
126
if instances[i].Ws.Conn != nil {
127
err = instances[i].Ws.Close()
128
if err != nil {
129
utilities.LogFailed("Error while closing websocket: %v", err)
130
} else {
131
utilities.LogSuccess("Websocket closed %v", instances[i].CensorToken())
132
}
133
}
134
}
135
}(i)
136
}
137
c.WaitAllDone()
138
139
}
140
141