Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
V4NSH4J
GitHub Repository: V4NSH4J/discord-mass-DM-GO
Path: blob/main/utilities/files.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
7
package utilities
8
9
import (
10
"bufio"
11
"fmt"
12
"io"
13
"log"
14
"net/http"
15
"os"
16
"path"
17
"path/filepath"
18
"strings"
19
)
20
21
func ReadLines(filename string) ([]string, error) {
22
ex, err := os.Executable()
23
if err != nil {
24
return nil, err
25
}
26
ex = filepath.ToSlash(ex)
27
file, err := os.OpenFile(path.Join(path.Dir(ex)+"/input/"+filename), os.O_RDWR, 0660)
28
if err != nil {
29
return nil, err
30
}
31
defer file.Close()
32
33
var lines []string
34
scanner := bufio.NewScanner(file)
35
for scanner.Scan() {
36
lines = append(lines, scanner.Text())
37
}
38
return lines, scanner.Err()
39
}
40
41
func WriteLines(filename string, line string) error {
42
ex, err := os.Executable()
43
if err != nil {
44
return err
45
}
46
ex = filepath.ToSlash(ex)
47
f, err := os.OpenFile(path.Join(path.Dir(ex)+"/input/"+filename), os.O_RDWR|os.O_APPEND, 0660)
48
49
if err != nil {
50
log.Fatal(err)
51
}
52
53
defer f.Close()
54
_, err2 := f.WriteString(line + "\n")
55
if err2 != nil {
56
log.Fatal(err2)
57
}
58
return nil
59
60
}
61
62
func WriteLinesPath(pathx string, line string) error {
63
ex, err := os.Executable()
64
if err != nil {
65
return err
66
}
67
ex = filepath.ToSlash(ex)
68
f, err := os.OpenFile(path.Join(path.Dir(ex)+"/"+pathx), os.O_RDWR|os.O_APPEND, 0660)
69
70
if err != nil {
71
log.Fatal(err)
72
}
73
74
defer f.Close()
75
_, err2 := f.WriteString(line + "\n")
76
if err2 != nil {
77
log.Fatal(err2)
78
}
79
return nil
80
81
}
82
func WriteLinesWholePath(pathx string, line string) error {
83
ex, err := os.Executable()
84
if err != nil {
85
return err
86
}
87
ex = filepath.ToSlash(ex)
88
f, err := os.OpenFile(path.Join(pathx), os.O_RDWR|os.O_APPEND, 0660)
89
90
if err != nil {
91
log.Fatal(err)
92
}
93
94
defer f.Close()
95
_, err2 := f.WriteString(line + "\n")
96
if err2 != nil {
97
log.Fatal(err2)
98
}
99
return nil
100
101
}
102
103
func TruncateLines(filename string, line []string) error {
104
ex, err := os.Executable()
105
if err != nil {
106
return err
107
}
108
ex = filepath.ToSlash(ex)
109
f, err := os.OpenFile(path.Join(path.Dir(ex)+"/input/"+filename), os.O_RDWR|os.O_CREATE|os.O_TRUNC, 0755)
110
111
if err != nil {
112
log.Fatal(err)
113
}
114
115
defer f.Close()
116
for i := 0; i < len(line); i++ {
117
_, err2 := f.WriteString(line[i] + "\n")
118
if err2 != nil {
119
log.Fatal(err2)
120
}
121
}
122
return nil
123
124
}
125
126
func ProcessAvatar(av string, memberid string) error {
127
if strings.Contains(av, "a_") {
128
// Nitro Avatar
129
return nil
130
}
131
link := "https://cdn.discordapp.com/avatars/" + memberid + "/" + av + ".png"
132
nameFile := "input/pfps/" + av + ".png"
133
134
err := processFiles(link, nameFile)
135
if err != nil {
136
return err
137
}
138
139
return nil
140
}
141
142
func processFiles(url string, nameFile string) error {
143
resp, err := http.Get(url)
144
if err != nil {
145
return err
146
}
147
defer resp.Body.Close()
148
if resp.StatusCode != 200 {
149
return fmt.Errorf("unexpected http status code while downloading avatar%d", resp.StatusCode)
150
}
151
file, err := os.Create(nameFile)
152
if err != nil {
153
return err
154
}
155
defer file.Close()
156
_, err = io.Copy(file, resp.Body)
157
if err != nil {
158
return err
159
}
160
return nil
161
}
162
163
// Append items from slice to file
164
func Append(filename string, items []string) error {
165
file, err := os.OpenFile(filename, os.O_APPEND|os.O_WRONLY, 0644)
166
if err != nil {
167
return err
168
}
169
defer file.Close()
170
171
for _, item := range items {
172
if _, err = file.WriteString(item + "\n"); err != nil {
173
return err
174
}
175
}
176
177
return nil
178
}
179
180
// Truncate items from slice to file
181
func Truncate(filename string, items []string) error {
182
file, err := os.OpenFile(filename, os.O_TRUNC|os.O_WRONLY, 0644)
183
if err != nil {
184
return err
185
}
186
defer file.Close()
187
188
for _, item := range items {
189
if _, err = file.WriteString(item + "\n"); err != nil {
190
return err
191
}
192
}
193
194
return nil
195
}
196
197
// Write line to file
198
func WriteLine(filename string, line string) error {
199
file, err := os.OpenFile(filename, os.O_APPEND|os.O_WRONLY, 0644)
200
if err != nil {
201
return err
202
}
203
defer file.Close()
204
205
if _, err = file.WriteString(line + "\n"); err != nil {
206
return err
207
}
208
209
return nil
210
}
211
212
// Create a New file and add items from a slice or append to it if it already exists
213
func WriteFile(filename string, items []string) error {
214
file, err := os.Create(filename)
215
if err != nil {
216
return err
217
}
218
defer file.Close()
219
220
for _, item := range items {
221
if _, err = file.WriteString(item + "\n"); err != nil {
222
return err
223
}
224
}
225
226
return nil
227
}
228
229
func GetEmbed() ([]byte, string) {
230
ex, err := os.Executable()
231
var errbytes []byte
232
if err != nil {
233
return errbytes, "Error while finding executable"
234
}
235
ex = filepath.ToSlash(ex)
236
var file *os.File
237
file, err = os.Open(path.Join(path.Dir(ex) + "/" + "embed.json"))
238
if err != nil {
239
return errbytes, "Error while Opening embed.json"
240
} else {
241
defer file.Close()
242
bytes, _ := io.ReadAll(file)
243
return bytes, ""
244
}
245
}
246
247
func WriteRoleFile(memberid, path, role string) error {
248
// Checking wether the role file exits
249
roleFile := fmt.Sprintf(`%v/%v.txt`, path, role)
250
_, err := os.Stat(roleFile)
251
if err == nil {
252
err = WriteLinesPath(roleFile, memberid)
253
if err != nil {
254
return err
255
}
256
} else if os.IsNotExist(err) {
257
roleFileX, err := os.Create(roleFile)
258
if err != nil {
259
return err
260
}
261
defer roleFileX.Close()
262
err = WriteLinesPath(roleFile, memberid)
263
if err != nil {
264
return err
265
}
266
} else {
267
// Some other error
268
return err
269
}
270
return nil
271
}
272
273