Skip to content

Commit

Permalink
リファクタリング・misskey複インスタンス対応・./post.js
Browse files Browse the repository at this point in the history
  • Loading branch information
tamaina committed Mar 27, 2018
1 parent e93e359 commit 90a8cca
Show file tree
Hide file tree
Showing 23 changed files with 333 additions and 232 deletions.
44 changes: 29 additions & 15 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,43 +2,57 @@

Misskey、TwitterおよびMastodonの、コマンドラインで動く簡単なクライアントです。

## Tips

- ファイルからの投稿を除き、本文で"\n"を挿入すると改行になります。

## Commands

### Twitter
### Root

- `node twitter/<command>`
* `init` ・・・・・・ いちばんはじめに実行するコマンドです。
- `node post`
複数のサービスにわたって同時に投稿できます。
* (options)
* `-t <本文>`
* `-h <タグ(,区切り)>`

### Misskey

- `node misskey/<command>`
* `instance` ・・・・・・ インスタンスを登録します。いちばんはじめに実行してください。
* `account` ・・・・・・ 操作したいアカウントを追加するときに実行するコマンドです。
* `list` ・・・・・・ 操作可能なアカウントIDを表示します。
* `tweet-simply (options)`
・・・・・・ 単純にツイートできます
* `post-simply (options)`
・・・・・・ 単純に投稿できます
* (options)
* `--id=, --screen_name=, -n <screen_name>`
スクリーンネームを事前に設定できます
* `--id=, --username=, -n <username>`
ユーザーネーム(ID)を事前に設定できます
カンマ,区切りで複数アカウントを指定できます。
* `--file=, --path=, -f <filename>`
ファイル名を指定し、その内容を投稿できます。
* `--text=, --body=, -s <text>`
* `--text=, --body=, -t <text>`
本文を直接指定します。

* `help` ・・・・・・ この内容を表示します。


### Misskey
### Twitter

- `node misskey/<command>`
**複数のアカウントで同時に呟くことはできません。**

- `node twitter/<command>`
* `init` ・・・・・・ いちばんはじめに実行するコマンドです。
* `account` ・・・・・・ 操作したいアカウントを追加するときに実行するコマンドです。
* `list` ・・・・・・ 操作可能なアカウントIDを表示します。
* `post-simply (options)`
・・・・・・ 単純に投稿できます
* `tweet-simply (options)`
・・・・・・ 単純にツイートできます
* (options)
* `--id=, --username=, -n <username>`
ユーザーネーム(ID)を事前に設定できます
* `--id=, --screen_name=, -n <screen_name>`
スクリーンネームを事前に設定できます
カンマ,区切りで複数アカウントを指定できます。
* `--file=, --path=, -f <filename>`
ファイル名を指定し、その内容を投稿できます。
* `--text=, --body=, -t <text>`
* `--text=, --body=, -s <text>`
本文を直接指定します。

* `help` ・・・・・・ この内容を表示します。
Expand Down
43 changes: 29 additions & 14 deletions misskey/account.js
Original file line number Diff line number Diff line change
@@ -1,18 +1,30 @@
const util = require('util')
const promisify = util.promisify
const fs = require('fs')
const request = require('request')
const qs = require('querystring')
const inquirer = require('inquirer')
const crypto = require('crypto')

const taqz = require('./taqz.json') || null

if(!taqz) throw Error('初期化されていません。 node misskey/init を実行し、初期化してください。')
let taqz
try{
taqz = require('./taqz.json')
} catch(e) {
throw Error('初期化されていません。 node twitter/init を実行し、初期化してください。')
}

let session = {}

request.post('https://api.misskey.xyz/auth/session/generate', { json: { 'app_secret': taqz.app_secret } },

let form = [
{
type: 'list',
name: 'domain',
message: 'Instance Domain :',
choices: Object.keys(taqz.instances)
}
]
console.log('インスタンスのドメインを入力します。')
inquirer.prompt(form)
.then(as => {
request.post(`https://api.${as.domain}/auth/session/generate`, { json: { 'app_secret': taqz.instances[as.domain] } },
function(e, r, generate){
if(e) throw e
console.log('以下のURLにアクセスしてください。\n')
Expand All @@ -26,24 +38,27 @@ request.post('https://api.misskey.xyz/auth/session/generate', { json: { 'app_sec
}
]
inquirer.prompt(form)
.then(as => {
if(as.yn == 'n') { console.log('操作を中止します'); return void(0) }
request.post('https://api.misskey.xyz/auth/session/userkey', { json: {'app_secret': taqz.app_secret, 'token': generate.token} }, function (e, r, userkey) {
.then(as2 => {
if(as2.yn == 'n') { console.log('操作を中止します'); return void(0) }
request.post(`https://api.${as.domain}/auth/session/userkey`, { json: {'app_secret': taqz.instances[as.domain], 'token': generate.token} }, function (e, r, userkey) {
if(e) throw e
console.log(r)
const hashit = crypto.createHash('sha256')
hashit.update(`${userkey.access_token}${taqz.app_secret}`)
hashit.update(`${userkey.access_token}${taqz.instances[as.domain]}`)
const i = hashit.digest('hex')

let rtaqz = require('./taqz.json')
rtaqz.accounts.push({
i: i,
username: userkey.user.username,
name_domain: `${userkey.user.username}@${as.domain}`,
domain: as.domain,
id: userkey.user.id
})
fs.writeFile('misskey/taqz.json', JSON.stringify(rtaqz), 'utf8', (err) => { if(err) throw err })
console.log(`アカウント情報を登録しました。投稿などを行う際は、現在のユーザーネーム${userkey.user.username}を指定してください。`)
console.log(`アカウント情報を登録しました。投稿などを行う際は、${userkey.user.username}@${as.domain} と指定してください。`)
})
})
.catch(err => { throw err })
})
})

})
2 changes: 1 addition & 1 deletion misskey/help.js
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
console.log(`
node twitter/<command>
init ・・・・・・ いちばんはじめに実行するコマンドです
instance ・・・・・・ インスタンスを登録します。いちばんはじめに実行してください
account ・・・・・・ 操作したいアカウントを追加するときに実行するコマンドです。
list ・・・・・・ 操作可能なアカウントIDを表示します。
tweet-simply (options)
Expand Down
26 changes: 0 additions & 26 deletions misskey/init.js

This file was deleted.

42 changes: 42 additions & 0 deletions misskey/instance.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
const util = require('util')
const promisify = util.promisify
const fs = require('fs')
const inquirer = require('inquirer')
const writeFile = promisify(fs.writeFile)

let domain

let form = [
{
type: 'input',
name: 'domain',
message: 'Instance Domain :',
default: 'misskey.xyz'
}
]
console.log('インスタンスのドメインを入力します。')
inquirer.prompt(form)
.then(as => {
domain = as.domain
let form = [
{
type: 'input',
name: 'app_secret',
message: 'App Secret:'
}
]
console.log(`\nhttps://dev.${domain}/apps にアクセスし、アプリを作成してください。\nそして、以下の情報を貼り付けてください。`) // MISSKEY_AOI
return inquirer.prompt(form)
})
.then(as => {
let data = {
instances: {},
accounts: []
}
data.instances[domain] = as.app_secret
return writeFile('misskey/taqz.json', JSON.stringify(data), 'utf8', () => {
console.log('taqz.jsonが作成されました。このファイルは絶対に誰にも見せないでください。')
console.log('node misskey/account を実行し、アカウントを追加してください。\n')
})
})
.catch(err => { throw err })
2 changes: 1 addition & 1 deletion misskey/list.js
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ const taqz = require('./taqz.json')
console.log('利用可能なアカウント:')

for(let i = 0; i < taqz.accounts.length; i++){
console.log(` ${taqz.accounts[i].username}`)
console.log(` ${taqz.accounts[i].name_domain}`)
}

console.log('node misskey/account でアカウントを追加できます。')
32 changes: 1 addition & 31 deletions misskey/post-simply.js
Original file line number Diff line number Diff line change
@@ -1,31 +1 @@
const util = require('util')
const promisify = util.promisify
const fs = require('fs')
const minimist = require('minimist')
const request = require('request')

const readFile = promisify(fs.readFile)

const taqz = require('./taqz.json')

if(!taqz) throw Error('初期化されていません。 node twitter/init を実行し、初期化してください。')
else if(taqz.accounts.length == 0) throw Error('アカウントがありません。node twitter/account を実行し、アカウントを登録してください。')

const argv = minimist(process.argv.slice(1))

require('../scripts/get_accounts')(argv, taqz, 'username')
.then(async accounts => {
const text = await require('../scripts/get_text')(argv, taqz)
for(n = 0; n < accounts.length; n++){
const account = accounts[n]
request.post('https://api.misskey.xyz/posts/create', {json: {i: account.i, text: text}}, (err) => {
if(err) throw err
else{
console.log(`\n✔ 投稿しました。 @${account.username}`)
console.log(text)
}
})
}
})
.catch(err => { throw err })

require('./post')(require('minimist')(process.argv.slice(1)))
35 changes: 0 additions & 35 deletions misskey/post-withtag.js

This file was deleted.

36 changes: 36 additions & 0 deletions misskey/post.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
const request = require('request')

let taqz
try{
taqz = require('./taqz.json')
} catch(e) {
throw Error('初期化されていません。 node twitter/init を実行し、初期化してください。')
}
if(taqz.accounts.length == 0) throw Error('アカウントがありません。node twitter/account を実行し、アカウントを登録してください。')

function post(argv){
require('../scripts/get_accounts')(argv, taqz, 'name_domain')
.then(async accounts => {
const text = await require('../scripts/get_text')(argv, taqz)
const tags = await require('../scripts/get_tags')(argv, taqz)
let arg = []
for(n = 0; n < accounts.length; n++){
const account = accounts[n]
let json = {i: account.i, text: text}
if(tags != null) json.tags = tags
arg.push(new Promise(function(resolve, reject){
request.post('https://api.misskey.xyz/posts/create', {json: json}, (err) => {
if(err) reject(err)
else{
console.log(`\n✔ [Misskey] 投稿しました。 @${account.name_domain}`)
console.log(text)
resolve(text)
}
})
}))
}
return Promise.all(arg)
})
.catch(err => { throw err })
}
module.exports = post
Loading

0 comments on commit 90a8cca

Please sign in to comment.