github.com/line/line-bot-sdk-go/v7@v7.21.0/examples/richmenu_helper/main.go (about) 1 // Copyright 2016 LINE Corporation 2 // 3 // LINE Corporation licenses this file to you under the Apache License, 4 // version 2.0 (the "License"); you may not use this file except in compliance 5 // with the License. You may obtain a copy of the License at: 6 // 7 // http://www.apache.org/licenses/LICENSE-2.0 8 // 9 // Unless required by applicable law or agreed to in writing, software 10 // distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 11 // WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 12 // License for the specific language governing permissions and limitations 13 // under the License. 14 15 package main 16 17 import ( 18 "flag" 19 "io" 20 "log" 21 "os" 22 23 "github.com/line/line-bot-sdk-go/v7/linebot" 24 ) 25 26 func main() { 27 var ( 28 mode = flag.String("mode", "list", "mode of richmenu helper [list|create|link|unlink|bulklink|bulkunlink|get|delete|upload|download|alias_create|alias_get|alias_update|alias_delete|alias_list]") 29 aid = flag.String("aid", "", "alias id") 30 uid = flag.String("uid", "", "user id") 31 rid = flag.String("rid", "", "richmenu id") 32 filePath = flag.String("image.path", "", "path to image, used in upload/download mode") 33 ) 34 flag.Parse() 35 bot, err := linebot.New( 36 os.Getenv("CHANNEL_SECRET"), 37 os.Getenv("CHANNEL_TOKEN"), 38 ) 39 if err != nil { 40 log.Fatal(err) 41 } 42 43 switch *mode { 44 case "upload": 45 if _, err = bot.UploadRichMenuImage(*rid, *filePath).Do(); err != nil { 46 log.Fatal(err) 47 } 48 case "download": 49 res, err := bot.DownloadRichMenuImage(*rid).Do() 50 if err != nil { 51 log.Fatal(err) 52 } 53 defer res.Content.Close() 54 f, err := os.OpenFile(*filePath, os.O_CREATE|os.O_RDWR|os.O_TRUNC, 0644) 55 if err != nil { 56 log.Fatal(err) 57 } 58 _, err = io.Copy(f, res.Content) 59 if err != nil { 60 log.Fatal(err) 61 } 62 log.Printf("Image is written to %s", *filePath) 63 case "alias_create": 64 if _, err = bot.CreateRichMenuAlias(*aid, *rid).Do(); err != nil { 65 log.Fatal(err) 66 } 67 case "alias_get": 68 if res, err := bot.GetRichMenuAlias(*aid).Do(); err != nil { 69 log.Fatal(err) 70 } else { 71 log.Printf("%v\n", res) 72 } 73 case "alias_update": 74 if _, err = bot.UpdateRichMenuAlias(*aid, *rid).Do(); err != nil { 75 log.Fatal(err) 76 } 77 case "alias_delete": 78 if _, err = bot.DeleteRichMenuAlias(*aid).Do(); err != nil { 79 log.Fatal(err) 80 } 81 case "alias_list": 82 res, err := bot.GetRichMenuAliasList().Do() 83 if err != nil { 84 log.Fatal(err) 85 } 86 for _, alias := range res { 87 log.Printf("%v\n", alias) 88 } 89 case "link": 90 if _, err = bot.LinkUserRichMenu(*uid, *rid).Do(); err != nil { 91 log.Fatal(err) 92 } 93 case "unlink": 94 if _, err = bot.UnlinkUserRichMenu(*uid).Do(); err != nil { 95 log.Fatal(err) 96 } 97 case "bulklink": 98 if _, err = bot.BulkLinkRichMenu(*rid, *uid).Do(); err != nil { 99 log.Fatal(err) 100 } 101 case "bulkunlink": 102 if _, err = bot.BulkUnlinkRichMenu(*uid).Do(); err != nil { 103 log.Fatal(err) 104 } 105 case "list": 106 res, err := bot.GetRichMenuList().Do() 107 if err != nil { 108 log.Fatal(err) 109 } 110 for _, richmenu := range res { 111 log.Printf("%v\n", richmenu) 112 } 113 case "get_default": 114 res, err := bot.GetDefaultRichMenu().Do() 115 if err != nil { 116 log.Fatal(err) 117 } 118 log.Printf("%v\n", res) 119 case "set_default": 120 if _, err = bot.SetDefaultRichMenu(*rid).Do(); err != nil { 121 log.Fatal(err) 122 } 123 case "cancel_default": 124 if _, err = bot.CancelDefaultRichMenu().Do(); err != nil { 125 log.Fatal(err) 126 } 127 case "create": 128 richMenu := linebot.RichMenu{ 129 Size: linebot.RichMenuSize{Width: 2500, Height: 1686}, 130 Selected: false, 131 Name: "Menu1", 132 ChatBarText: "ChatText", 133 Areas: []linebot.AreaDetail{ 134 { 135 Bounds: linebot.RichMenuBounds{X: 0, Y: 0, Width: 1250, Height: 212}, 136 Action: linebot.RichMenuAction{ 137 Type: linebot.RichMenuActionTypeRichMenuSwitch, 138 RichMenuAliasID: "richmenu-alias-a", 139 Data: "action=richmenu-changed-to-a", 140 }, 141 }, 142 { 143 Bounds: linebot.RichMenuBounds{X: 1250, Y: 0, Width: 1250, Height: 212}, 144 Action: linebot.RichMenuAction{ 145 Type: linebot.RichMenuActionTypeRichMenuSwitch, 146 RichMenuAliasID: "richmenu-alias-b", 147 Data: "action=richmenu-changed-to-b", 148 }, 149 }, 150 { 151 Bounds: linebot.RichMenuBounds{X: 0, Y: 212, Width: 1250, Height: 737}, 152 Action: linebot.RichMenuAction{ 153 Type: linebot.RichMenuActionTypePostback, 154 Data: "action=buy&itemid=123", 155 }, 156 }, 157 { 158 Bounds: linebot.RichMenuBounds{X: 1250, Y: 212, Width: 1250, Height: 737}, 159 Action: linebot.RichMenuAction{ 160 Type: linebot.RichMenuActionTypeURI, 161 URI: "https://developers.line.me/", 162 Text: "click me", 163 }, 164 }, 165 { 166 Bounds: linebot.RichMenuBounds{X: 0, Y: 949, Width: 1250, Height: 737}, 167 Action: linebot.RichMenuAction{ 168 Type: linebot.RichMenuActionTypeMessage, 169 Text: "hello world!", 170 }, 171 }, 172 { 173 Bounds: linebot.RichMenuBounds{X: 1250, Y: 949, Width: 1250, Height: 737}, 174 Action: linebot.RichMenuAction{ 175 Type: linebot.RichMenuActionTypeDatetimePicker, 176 Data: "datetime picker!", 177 Mode: "datetime", 178 }, 179 }, 180 }, 181 } 182 res, err := bot.CreateRichMenu(richMenu).Do() 183 if err != nil { 184 log.Fatal(err) 185 } 186 log.Println(res.RichMenuID) 187 default: 188 log.Fatal("implement me") 189 } 190 }