This repository has been archived by the owner on Dec 31, 2022. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 0
/
tweet.go
129 lines (110 loc) · 2.75 KB
/
tweet.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
package cmd
import (
"io/ioutil"
"net/url"
"os"
"syscall"
"github.com/arrow2nd/ishell/v2"
"github.com/arrow2nd/twnyan/twitter"
"golang.org/x/term"
)
func (cmd *Cmd) newTweetCmd() *ishell.Cmd {
// tweet
tweetCmd := &ishell.Cmd{
Name: "tweet",
Aliases: []string{"tw"},
Func: cmd.execTweetCmd,
Help: "post a tweet",
LongHelp: createLongHelp(
`Post a tweet.
If there is no tweet text, 'にゃーん' will be posted.
If you are submitting an image, please add the file name separated by a space.`,
"tw",
"tweet [text] [image]...",
"tweet meow🐱 cat.png supercat.jpg",
),
}
// tweet multi
tweetCmd.AddCmd(&ishell.Cmd{
Name: "multi",
Aliases: []string{"ml"},
Func: cmd.execTweetMultiCmd,
Help: "post a multi-line tweet",
LongHelp: createLongHelp(
`Post a multi-line tweet.
Enter a semicolon to end the input.
And if you want to cancel, input ":exit".`,
"ml",
"tweet multi [image]...",
"",
),
})
// tweet remove
tweetCmd.AddCmd(&ishell.Cmd{
Name: "remove",
Aliases: []string{"rm"},
Func: cmd.execTweetRemoveCmd,
Help: "remove a tweet",
LongHelp: createLongHelp(
`Remove a tweet.
If there is more than one, please separate them with a space.`,
"rm",
"tweet remove <tweet-number>...",
"tweet remove 0 1",
),
})
return tweetCmd
}
func (cmd *Cmd) execTweetCmd(c *ishell.Context) {
// パイプからの入力を処理
if len(c.Args) == 0 && !term.IsTerminal(int(syscall.Stdin)) {
stdin, _ := ioutil.ReadAll(os.Stdin)
cmd.tweet(string(stdin), nil)
return
}
cmd.tweet(cmd.parseTweetCmdArgs(c.Args))
}
func (cmd *Cmd) execTweetMultiCmd(c *ishell.Context) {
// 添付画像を取得
_, images := cmd.parseTweetCmdArgs(c.Args)
text := cmd.inputMultiLine()
if text == "" {
return
}
cmd.tweet(text, images)
}
func (cmd *Cmd) execTweetRemoveCmd(c *ishell.Context) {
if len(c.Args) <= 0 {
cmd.showWrongArgMessage("tweet " + c.Cmd.Name)
return
}
// 引数の数だけ削除処理
for _, tweetNumStr := range c.Args {
tweetId, err := cmd.twitter.GetDataFromTweetNum(tweetNumStr, twitter.TweetId)
if err != nil {
cmd.showErrorMessage(err.Error())
return
}
tweetText, err := cmd.twitter.DeleteTweet(tweetId)
if err != nil {
cmd.showErrorMessage(err.Error())
return
}
cmd.showMessage("DELETED", tweetText, cmd.config.Color.Accent3)
}
}
func (cmd *Cmd) tweet(text string, images []string) {
query := url.Values{}
// 画像をアップロード
if err := cmd.upload(images, &query); err != nil {
cmd.showErrorMessage(err.Error())
return
}
// ツイートを投稿
tweetText, err := cmd.twitter.PostTweet(query, text)
if err != nil {
cmd.showErrorMessage(err.Error())
return
}
cmd.showMessage("TWEETED", tweetText, cmd.config.Color.Accent3)
}