From 99a065b81b6b07884aab7e6c1dff7f90893bcf76 Mon Sep 17 00:00:00 2001 From: Alexander Popov Date: Fri, 16 Jul 2021 06:31:18 +0300 Subject: [PATCH] 2.0.0 --- asset/.preview.png => .preview.png | Bin README.md | 2 +- shard.yml | 2 +- src/vk0nline.cr | 62 +++++++++++++++++--------- vk0nline.py | 69 ----------------------------- 5 files changed, 43 insertions(+), 92 deletions(-) rename asset/.preview.png => .preview.png (100%) delete mode 100644 vk0nline.py diff --git a/asset/.preview.png b/.preview.png similarity index 100% rename from asset/.preview.png rename to .preview.png diff --git a/README.md b/README.md index 4e556b7..dfc5a7a 100644 --- a/README.md +++ b/README.md @@ -3,7 +3,7 @@ Включает в себя `systemd` юнит. -![preview](https://raw.githubusercontent.com/iiiypuk/vk0nline/master/asset/.preview.png) +![preview](https://raw.githubusercontent.com/iiiypuk/vk0nline/master/.preview.png) ## Установка Активировать автоматический запуск сессии пользователя diff --git a/shard.yml b/shard.yml index 9956ec3..53494bc 100644 --- a/shard.yml +++ b/shard.yml @@ -1,5 +1,5 @@ name: vk0nline -version: 0.1.0 +version: 2.0.0 authors: - Alexander Popov diff --git a/src/vk0nline.cr b/src/vk0nline.cr index 1e38f65..6e6b1e7 100644 --- a/src/vk0nline.cr +++ b/src/vk0nline.cr @@ -1,36 +1,56 @@ require "json" require "crest" -# TODO: Write documentation for `Src` -module Src - VERSION = "0.1.0" - +begin # JSON::ParseException json = File.open("config.json") do |file| JSON.parse(file) end +rescue + puts "Parse config.json error" - # TODO: Get accessToken - if json["accessToken"] == nil - puts "Get accessToken" + exit +end - token_url = "https://oauth.vk.com/authorize?client_id=#{json["appID"].as_i}&redirect_uri=vk.com&response_type=token&display=mobile&v=5.131&revoke=1&state=01010&scope=offline" +def get_access_token(appId : Int32) + puts "Open this page, and save token to config.json\n\n" - puts token_url + token_url = "https://oauth.vk.com/authorize?client_id="\ + "#{appId}&redirect_uri=vk.com&response_type=token"\ + "&display=mobile&v=5.131&revoke=1&state=01010&scope=offline" - puts "Open this page, and save token to config.json" - else - # TODO: If return 1 == COMPLETE - response = Crest.get( - "https://api.vk.com/method/account.setOnline", - params: { :voip => "0", :v => "5.131", - :access_token => json["accessToken"].as_s, - :user_ids => json["userIds"].as_i } - ) + puts token_url +end - status = JSON.parse(response.body) +if json["accessToken"] == nil + get_access_token(json["appID"].as_i) +else + response = Crest.get( + "https://api.vk.com/method/account.setOnline", + params: { :voip => "0", :v => "5.131", + :access_token => json["accessToken"].as_s, + :user_ids => json["userIds"].as_i } + ) - if status["response"] == 1 + status = JSON.parse(response.body) + + begin # Missing hash key + if status["error"] + puts status["error"]["error_msg"] + puts "Error code #{status["error"]["error_code"]}" + + puts "---" + + get_access_token(json["appID"].as_i) + end + rescue + # execute if an exception is raised + end + + begin # Missing hash key + if status["response"] == 1 puts "Complete!" - end + end + rescue + # execute if an exception is raised end end diff --git a/vk0nline.py b/vk0nline.py deleted file mode 100644 index c0a872c..0000000 --- a/vk0nline.py +++ /dev/null @@ -1,69 +0,0 @@ -#!/usr/bin/env python3 - -import json -import requests -from datetime import datetime -import getpass -import sys - -__author__ = 'Alexander Popov' -__copyright__ = '2019 by iiiypuk' -__credits__ = ['Alexander Popov'] -__license__ = 'Unlicense' -__version__ = '1.0.3' -__maintainer__ = 'Alexander Popov' -__email__ = 'iiiypuk@fastmail.fm' -__status__ = 'Production' - -username = getpass.getuser() -with open('/home/{user}/.config/emilecok/vk0nline/config.json' - .format(user=getpass.getuser()), 'r', encoding='utf-8') as f: - _C = json.load(f) - - -def getStatus(): - response = requests.get('https://api.vk.com/method/users.get?' - 'fields=online,last_seen&v=5.95' - '&access_token={key}&user_ids={user}' - .format(key=_C['serviceKey'], user=_C['clientId'])) - userLoginTime = json.loads(response.content.decode('utf-8')) - userLoginTime = userLoginTime['response'][0]['last_seen']['time'] - userOnline = json.loads(response.content.decode('utf-8')) - userOnline = userOnline['response'][0]['online'] - - return([userOnline, userLoginTime]) - - -def setOnline(): - response = requests.get('https://api.vk.com/method/account.setOnline?' - 'voip=0&v=5.95&access_token={key}&user_ids={user}' - .format(user=_C['clientId'], - key=_C['accessToken'])) - content = json.loads(response.content.decode('utf-8')) - - if 'error' in content: - # User authorization failed - if 5 == content['error']['error_code']: - print('User authorization failed.\n', - 'Open this link in browser, and copy access token.') - print('https://oauth.vk.com/authorize?client_id={appid}' - '&redirect_uri=vk.com&display=mobile&response_type=token' - '&v=5.95&revoke=1&state=01010&scope=offline' - .format(appid=_C['clientId'])) - else: - print('Error: {}.'.format(content['error']['error_code'])) - elif 'response' in content: - if 1 == content['response']: - onlineStatus, lastSeen = getStatus() - lastSeen = datetime.fromtimestamp(lastSeen) \ - .strftime('%Y-%m-%d %H:%M:%S') - - if 0 == onlineStatus: - print('Not successful.') - sys.exit(1) - - print('Last online', lastSeen) - - -if __name__ == "__main__": - setOnline()