parent
c67df95407
commit
53dd9f6367
@ -0,0 +1,18 @@ |
||||
-----BEGIN CERTIFICATE----- |
||||
MIIC0zCCAbugAwIBAgIJAPYfllX657axMA0GCSqGSIb3DQEBCwUAMAAwHhcNMTUx |
||||
MTIxMTExMDQxWhcNMjUwODIwMTExMDQxWjAAMIIBIjANBgkqhkiG9w0BAQEFAAOC |
||||
AQ8AMIIBCgKCAQEAoMMSIIgYx8pT8Kz1O8Ukd/JVyqBQYRSo0enqEzo7295VROXq |
||||
TUthbEbdi0OczUfl4IsAWppOSRrDwEguJZ0cJ/r6IxGsbrCdQr2MjgiomYtAXKKQ |
||||
GAGL5Wls+AzcRNV0OszVJzkDNFYZzgNejyitGJSNEQMyU8r2gyPyIWP9MQKQst8y |
||||
Mg91R/7l9jwf6AWwNxykZlYZurtsQ6XsBPZpF9YOFL7vZYPhKUFiNEm+74RpojC7 |
||||
Gt6nztYAUI2V/F+1uoXAr8nLpbj9SD0VSwyZLRG1uIVLBzhb0lfOIzAvJ45EKki9 |
||||
nejyoXfH1U5+iMzdSAdcy3MCBhpEZwJPqhDqeQIDAQABo1AwTjAdBgNVHQ4EFgQU |
||||
JE0RLM+ohLnlDz0Qk0McCxtDK2MwHwYDVR0jBBgwFoAUJE0RLM+ohLnlDz0Qk0Mc |
||||
CxtDK2MwDAYDVR0TBAUwAwEB/zANBgkqhkiG9w0BAQsFAAOCAQEAEmgME00JYuYZ |
||||
4wNaGrJskZ05ZnP+TXJusmBui9ToQ4UoykuyY5rsdGQ3SdzXPLdmd2nfMsw63iK2 |
||||
D7rjcH/rmn6fRccZqN0o0SXd/EuHeIoeW1Xnnivbt71b6mcOAeNg1UsMYxnMAVl0 |
||||
ywdkta8gURltagSfXoUbqlnSxn/zCwqaxxcQXA/CnunvRsFtQrwWjDBPg/BPULHX |
||||
DEh2AactGtnGqEZ5iap/VCOVnmL6iPdJ1x5UIF/gS6U96wL+GHfcs1jCvPg+GEwR |
||||
3inh9oTXG9L21ge4lbGiPUIMBjtVcB3bXuQbOfec9Cr3ZhcQeZj680BIRxD/pNpA |
||||
O/XeCfjfkw== |
||||
-----END CERTIFICATE----- |
@ -0,0 +1,28 @@ |
||||
-----BEGIN PRIVATE KEY----- |
||||
MIIEwAIBADANBgkqhkiG9w0BAQEFAASCBKowggSmAgEAAoIBAQCgwxIgiBjHylPw |
||||
rPU7xSR38lXKoFBhFKjR6eoTOjvb3lVE5epNS2FsRt2LQ5zNR+XgiwBamk5JGsPA |
||||
SC4lnRwn+vojEaxusJ1CvYyOCKiZi0BcopAYAYvlaWz4DNxE1XQ6zNUnOQM0VhnO |
||||
A16PKK0YlI0RAzJTyvaDI/IhY/0xApCy3zIyD3VH/uX2PB/oBbA3HKRmVhm6u2xD |
||||
pewE9mkX1g4Uvu9lg+EpQWI0Sb7vhGmiMLsa3qfO1gBQjZX8X7W6hcCvyculuP1I |
||||
PRVLDJktEbW4hUsHOFvSV84jMC8njkQqSL2d6PKhd8fVTn6IzN1IB1zLcwIGGkRn |
||||
Ak+qEOp5AgMBAAECggEBAJ/dPCJzlEjhL5XPONLmGXzZ1Gx5/VR86eBMv0O9jhb3 |
||||
wk2QYO3aPxggZGD/rGcKz1L6hzCR77WM0wpb/N/Um1I6pxHGmnU8VjYvLh10CM0f |
||||
h7JWyfnFV+ubagxFJamhpkJuvKyTaldaI7EU8qxj47Xky18Wka53z6nbTgXcW8Sm |
||||
V4CJy9OHNgKJQnylX6zOAaxVngSGde3xLslLjsYK4w9b2+OkCSUST2XXdo+ZLXxl |
||||
cs0lEPFRM1Xh9/E6UrDrJMHHzio53L/W/+a8sIar1upgSY52pyD/tA7VSrAJ9nYC |
||||
RezOU81VTLfMO+TYmgZzSUQJYh0cR4yqJe+wgl4U550CgYEA1EcS6Z+PO5Pr3u2+ |
||||
XevawSAal6y9ONkkdOoASC977W37nn0E1wlQo41dR6DESCJfiSMeN0KbmXj5Wnc/ |
||||
ADu+73iGwC90G9Qs9sjD7KAFBJvuj0V8hxvpWRdIBBbf7rlOj3CV0iXRYjkJbyJa |
||||
cxuR0kiv4gTWmm5Cq+5ir8t1Oc8CgYEAwd+xOaDerNR481R+QmENFw+oR2EVMq3Q |
||||
B/vinLK0PemQWrh32iBcd+vhSilOSQtUm1nko1jLK8C4s8X2vZYua4m5tcK9VqCt |
||||
maCCq/ffxzsoW/GN8japnduz+qA+hKWJzW/aYR8tsOeqzjVqj4iIqPI4HuokrDi/ |
||||
UD/QLgq5UTcCgYEAk2ZC0Kx15dXB7AtDq63xOTcUoAtXXRkSgohV58npEKXVGWkQ |
||||
Kk0SjG7Fvc35XWlY0z3qZk6/AuOIqfOxcHUMEPatAtgwlH5RNo+T1EQNF/U6wotq |
||||
e9q6vp026XgEyJwt29Y+giy2ZrDaRywgiFs1d0H3t0bKyXMUopQmPJFXdesCgYEA |
||||
psCxXcDpZjxGX/zPsGZrbOdxtRtisTlg0k0rp93pO8tV90HtDHeDMT54g2ItzJPr |
||||
TMev6XOpJNPZyf6+8GhpOuO2EQkT85u2VYoCeslz95gBabvFfIzZrUZYcnw76bm8 |
||||
YjAP5DN+CEfq2PyG0Df+W1ojPSvlKSCSJQMOG1vr81cCgYEAkjPY5WR99uJxYBNI |
||||
OTFMSkETgDUbPXBu/E/h5Dtn79v8Moj9FvC7+q6sg9qXhrGhfK2xDev3/sTrbS/E |
||||
Gcf8UNIne3AXsoAS8MtkOwJXHkYaTIboIYgDX4LlDmbGQlIRaWgyh2POI6VtjLBT |
||||
ms6AdsdpIB6As9xNUBUwj/RnTZQ= |
||||
-----END PRIVATE KEY----- |
@ -1,92 +0,0 @@ |
||||
// Package tgutils provides extra functions to make certain tasks easier.
|
||||
package tgutils |
||||
|
||||
import ( |
||||
"github.com/syfaro/telegram-bot-api" |
||||
"os" |
||||
"os/exec" |
||||
"path/filepath" |
||||
"strconv" |
||||
"sync" |
||||
"time" |
||||
) |
||||
|
||||
var rand uint32 |
||||
var randmu sync.Mutex |
||||
|
||||
func reseed() uint32 { |
||||
return uint32(time.Now().UnixNano() + int64(os.Getpid())) |
||||
} |
||||
|
||||
func nextSuffix() string { |
||||
randmu.Lock() |
||||
r := rand |
||||
if r == 0 { |
||||
r = reseed() |
||||
} |
||||
r = r*1664525 + 1013904223 // constants from Numerical Recipes
|
||||
rand = r |
||||
randmu.Unlock() |
||||
return strconv.Itoa(int(1e9 + r%1e9))[1:] |
||||
} |
||||
|
||||
// this function ripped from ioutils.TempFile, except with a suffix, instead of prefix.
|
||||
func tempFileWithSuffix(dir, suffix string) (f *os.File, err error) { |
||||
if dir == "" { |
||||
dir = os.TempDir() |
||||
} |
||||
|
||||
nconflict := 0 |
||||
for i := 0; i < 10000; i++ { |
||||
name := filepath.Join(dir, nextSuffix()+suffix) |
||||
f, err = os.OpenFile(name, os.O_RDWR|os.O_CREATE|os.O_EXCL, 0600) |
||||
if os.IsExist(err) { |
||||
if nconflict++; nconflict > 10 { |
||||
randmu.Lock() |
||||
rand = reseed() |
||||
randmu.Unlock() |
||||
} |
||||
continue |
||||
} |
||||
break |
||||
} |
||||
return |
||||
} |
||||
|
||||
// EncodeAudio takes a file and attempts to convert it to a .ogg for Telegram.
|
||||
// It then updates the path to the audio file in the AudioConfig.
|
||||
//
|
||||
// This function requires ffmpeg and opusenc to be installed on the system!
|
||||
func EncodeAudio(audio *tgbotapi.AudioConfig) error { |
||||
f, err := tempFileWithSuffix(os.TempDir(), "_tgutils.ogg") |
||||
if err != nil { |
||||
return err |
||||
} |
||||
defer f.Close() |
||||
|
||||
ffmpegArgs := []string{ |
||||
"-i", |
||||
audio.FilePath, |
||||
"-f", |
||||
"wav", |
||||
"-", |
||||
} |
||||
|
||||
opusArgs := []string{ |
||||
"--bitrate", |
||||
"256", |
||||
"-", |
||||
f.Name(), |
||||
} |
||||
|
||||
c1 := exec.Command("ffmpeg", ffmpegArgs...) |
||||
c2 := exec.Command("opusenc", opusArgs...) |
||||
|
||||
c2.Stdin, _ = c1.StdoutPipe() |
||||
c2.Stdout = os.Stdout |
||||
c2.Start() |
||||
c1.Run() |
||||
c2.Wait() |
||||
|
||||
return nil |
||||
} |
Reference in new issue