2 # Copyright (C) 2019 Ian Kelling
3 # SPDX-License-Identifier: AGPL-3.0-or-later
7 PATH
="$HOME/.local/bin:$PATH"
9 # usage: rbow [-PROFILE_NAME] [COMMAND]
11 # Wrapper for rainbowstream to use multiple logins and tweet directly
12 # from the command line. PROFILE_NAME can be anything you want.
15 oath
=$HOME/.rainbow_oauth
16 if [[ $1 == -* ]]; then
21 source ~
/src
/rainbowstream
/venv
/bin
/activate
25 # adds a short delay after each send for more reliable operation
26 set force_conservative 0
29 expect -nocase timeout {exit 1} "@*]: "
30 set cmd [lindex $argv 0];
34 expect
$f "$*" ||
{ deactivate
; rm -f $f; return 1; }
43 source ~
/src
/diaspy
/venv
/bin
/activate
44 python3 ~
/src
/jan-pona-mute
/jan-pona-mute.py
"$@" ||
{ deactivate
; return 1; }
48 # usage: toot [-PROFILE_NAME] [TOOT_ARGS]
50 source ~
/src
/toot
/venv
/bin
/activate
51 if [[ $1 == -* ]]; then
54 command toot activate
--quiet $account ||
{ deactivate
; return 1; }
56 command toot
"$@" ||
{ deactivate
; return 1; }
61 # post to mastodon + twitter + gnu social post + diaspora
63 # usage: pdt [--dbd] [-m MEDIA_FILE] [POST]
65 if [[ $pdttest ]]; then
68 mastodon_account
=iank@hostux.social
72 mastodon_account
=fsf@hostux.social
75 while [[ $1 == -* ]]; do
80 if [[ ! -e $media ]]; then
81 echo "error: file not found $media"
84 if [[ $media == *\
* ]]; then
85 echo "error: file path contains a space. move it to non-space path"
88 rbow_arg
=" --i $media"
89 toot_arg
="--media $media"
91 gs_arg
="-F media=@$media"
97 mastodon_account
=endDRM@hostux.social
102 # if we have no argument
104 read -r -p "input PDT text: " input
107 if [[ $
- == *i
* ]]; then
108 echo "About to PDT the following line. Press enter to confirm or ctrl-c to quit:"
113 if ! rbow
-$rbow_account t
"$*" $rbow_arg; then
116 if ! toot
-$mastodon_account post
"$*" $toot_arg; then
120 if ! printf "post %s\n" "${dia_arg}$*" | diaspora
; then
124 # https://gnusocial.net/doc/twitterapi
125 if ! curl
-o /dev
/null
-sS -u "$gs_account:$(cat ~/.gnusocial_login-$gs_account)" \
126 $gs_arg -F "status=$*" https
://status.fsf.org
/api
/statuses
/update.xml
; then
129 if (( ${#fails[@]} )); then
130 printf "$(tput setaf 5)█$(tput sgr0)%.0s" $
(eval echo "{1..${COLUMNS:-60}}"); echo
131 echo "FSF ERROR: ${fails[*]} might not have posted" >&2
137 if [[ $pdttest ]]; then
138 mastodon_accounts
=(iank
)
140 mastodon_accounts
=(fsf endDRM
)
145 for repo
in errhandle rainbowstream diaspy jan-pona-mute
; do
146 if [[ -e $repo ]]; then
149 git
reset --hard origin
/master
153 git clone https
://vcs.fsf.org
/git
/$repo.git
156 source ~
/src
/errhandle
/err
157 cp ~
/src
/rainbowstream
/rainbowstream
/colorset
/config ~
/.rainbow_config.json
159 if [[ ! -e ~
/.local
/bin
/pip
]]; then
161 wget
-O$tmp https
://bootstrap.pypa.io
/get-pip.py
167 if [[ ! -e ~
/.local
/bin
/virtualenv
]]; then
168 python3
-m pip
install --user virtualenv
171 cd ~
/src
/rainbowstream
172 python3
-m virtualenv
-p python3 venv
173 source venv
/bin
/activate
174 python3
-m pip
install -r requirements.txt
175 python3
-m pip
install -e .
179 # This repo's upstream is https://alexschroeder.ch/cgit/diaspy which is
180 # recommended in the install instructions here:
181 # https://alexschroeder.ch/cgit/jan-pona-mute/about/
183 python3
-m virtualenv
-p python3 venv
184 source venv
/bin
/activate
185 python3
-m pip
install -r requirements.txt
186 python3
-m pip
install -e .
192 python3
-m virtualenv
-p python3 venv
193 source venv
/bin
/activate
194 # pip freeze after a pip install.
195 cat >requirements.txt
<<'EOF'
196 beautifulsoup4==4.8.2
207 python3
-m pip
install -r requirements.txt
211 if [[ ! -s ~
/.config
/jan-pona-mute
/login
]]; then
212 mkdir ~
/.config
/jan-pona-mute
213 account
=fsf@framasphere.org
214 read -r -p "enter the password for $account > " pass
215 # background: format for this found using the save command
216 cat >~
/.config
/jan-pona-mute
/login
<<EOF
223 for account
in dbd fsf
; do
224 if [[ ! -s ~
/.rainbow_oauth-
$account ]]; then
225 printf "$(tput setaf 5)█$(tput sgr0)%.0s" $
(eval echo "{1..${COLUMNS:-60}}");
226 echo "Please login to $account on twitter in your main browser then press enter. After rainbowstream prompt loads, quit with command q"
230 if [[ ! -s ~
/.gnusocial_login-
$account ]]; then
231 printf "$(tput setaf 5)█$(tput sgr0)%.0s" $
(eval echo "{1..${COLUMNS:-60}}");
232 read -r -p "please enter the password for $account@status.fsf.org > " pass
233 touch ~
/.gnusocial_login-
$account
234 chmod 600 ~
/.gnusocial_login-
$account
235 printf "%s\n" "$pass" > ~
/.gnusocial_login-
$account
239 for account
in ${mastodon_accounts[@]}; do
240 if ! toot activate
$account@hostux.social
&>/dev
/null
; then
241 printf "$(tput setaf 5)█$(tput sgr0)%.0s" $
(eval echo "{1..${COLUMNS:-60}}");
242 echo "Please login to $account on https://hostux.social in your main browser then press enter."
244 toot login
-i hostux.social