def help_message(client: BaseClient): """「hato help」を見つけたら、使い方を表示する""" logger.debug("%s called 'hato help'", client.get_send_user()) logger.debug("%s app called 'hato help'", client.get_type()) str_help = [ '', '使い方', '```', 'amesh ... 東京のameshを表示する。', 'amesh [text] ... 指定した地名・住所[text]のameshを表示する。', 'amesh [緯度 (float)] [経度 (float)] ... 指定した座標([緯度 (float)], [経度 (float)])のameshを表示する。', '標高 ... 東京の標高を表示する。', '標高 [text] ... 指定した地名・住所[text]の標高を表示する。', '標高 [緯度 (float)] [経度 (float)] ... 指定した座標([緯度 (float)], [経度 (float)])の標高を表示する。', 'eq ... 最新の地震情報を3件表示する。', 'text list ... パワーワード一覧を表示する。 ', 'text random ... パワーワードをひとつ、ランダムで表示する。 ', 'text show [int] ... 指定した番号[int]のパワーワードを表示する。 ', 'text add [text] ... パワーワードに[text]を登録する。 ', 'text delete [int] ... 指定した番号[int]のパワーワードを削除する。 ', '>< [text] ... 文字列[text]を吹き出しで表示する。', 'にゃーん ... 「よしよし」と返す。', 'version ... バージョン情報を表示する。', '', '詳細はドキュメント(https://github.com/dev-hato/hato-bot/wiki)も見てくれっぽ!', '```' ] client.post(os.linesep.join(str_help))
def get_text_list(client: BaseClient): """パワーワードのリストを表示""" user = client.get_send_user_name() logger.debug("%s called 'text list'", user) msg = get_vocabularys() client.post(msg)
def ret(client: BaseClient): user = client.get_send_user_name() logger.debug("%s called 'hato 天気'", user) city_id = get_city_id_from_city_name(place) if city_id is None: client.post('該当する情報が見つからなかったっぽ!') else: weather_info = get_weather(city_id) client.post('```' + weather_info + '```')
def version(client: BaseClient): """versionを表示する""" user = client.get_send_user_name() logger.debug("%s called 'hato version'", user) str_ver = "バージョン情報\n```"\ "Version {}\n"\ "Copyright (C) 2020 hato-bot Development team\n"\ "https://github.com/nakkaa/hato-bot ```".format(VERSION) client.post(str_ver)
def earth_quake(client: BaseClient): """地震 地震情報を取得する""" msg = "地震情報を取得できなかったっぽ!" data = get_quake_list() if data is not None: msg = "地震情報を取得したっぽ!\n" msg = msg + generate_quake_info_for_slack(data, 3) client.post(msg)
def labotter_in(client: BaseClient): """らぼいん!""" msg = "らぼいんに失敗したっぽ!(既に入っているかもしれないっぽ)" user_id = client.get_send_user() flag, start_time = labo_in(user_id) if flag: msg = "らぼいんしたっぽ! \nいん時刻: {}".format(start_time) client.post(msg)
def labotter_rida(client: BaseClient): """らぼりだ!""" msg = "らぼりだに失敗したっぽ!" user_id = client.get_send_user() flag, end_time, datetime_second, sum_second = labo_rida(user_id) diff_time = datetime.timedelta(seconds=datetime_second) sum_time = datetime.timedelta(seconds=sum_second) if flag: msg = "らぼりだしたっぽ! お疲れ様っぽ!\nりだ時刻: {} \n拘束時間: {}\n累計時間: {}".format( end_time, diff_time, sum_time) client.post(msg)
def ret(client: BaseClient): user = client.get_send_user_name() logger.debug("%s called 'hato amesh '", user) client.post('雨雲状況をお知らせするっぽ!') lat, lon = split_command(place, 2) url = weather_map_url(conf.YAHOO_API_TOKEN, lat, lon) req = requests.get(url, stream=True) f_name = "amesh.jpg" if req.status_code == 200: with open(f_name, 'wb') as weather_map_file: weather_map_file.write(req.content) client.upload(file=f_name, filename="amesh.png") os.remove(f_name)
def amesh(client: BaseClient): """東京の天気を表示する""" user = client.get_send_user_name() logger.debug("%s called 'hato amesh'", user) client.post('東京の雨雲状況をお知らせするっぽ!') url = weather_map_url(conf.YAHOO_API_TOKEN, '35.698856', '139.73091159273') req = requests.get(url, stream=True) f_name = "amesh.jpg" if req.status_code == 200: with open(f_name, 'wb') as weather_map_file: weather_map_file.write(req.content) client.upload(file=f_name, filename="amesh.png") if os.path.exists(f_name): os.remove(f_name)
def help_message(client: BaseClient): """「hato help」を見つけたら、使い方を表示する""" logger.debug("%s called 'hato help'", client.get_send_user()) logger.debug("%s app called 'hato help'", client.get_type()) str_help = '\n使い方\n'\ '```'\ '天気 [text] ... 地名の天気予報を表示する。\n'\ 'amesh ... ameshを表示する。\n'\ 'eq ... 最新の地震情報を3件表示する。\n'\ 'text list ... パワーワード一覧を表示する。 \n'\ 'text random ... パワーワードをひとつ、ランダムで表示する。 \n'\ 'text show [int] ... 指定した番号[int]のパワーワードを表示する。 \n'\ 'text add [text] ... パワーワードに[text]を登録する。 \n'\ 'text delete [int] ... 指定した番号[int]のパワーワードを削除する。 \n'\ 'in ... らぼいんする\n'\ 'rida ... らぼいんからの経過時間を表示する\n'\ '>< [text] ... 文字列[text]を吹き出しで表示する。\n'\ 'version ... バージョン情報を表示する。\n'\ '\n詳細はドキュメント(https://github.com/nakkaa/hato-bot/wiki)も見てくれっぽ!```\n' client.post(str_help)
def version(client: BaseClient): """versionを表示する""" user = client.get_send_user_name() logger.debug("%s called 'hato version'", user) str_ver = "バージョン情報\n```" \ f"Version {VERSION}" if conf.GIT_COMMIT_HASH: str_ver += f" (Commit {conf.GIT_COMMIT_HASH[:7]})" else: try: repo = Repo() str_ver += f" (Commit {repo.head.commit.hexsha[:7]})" except (InvalidGitRepositoryError, GitCommandNotFound): pass str_ver += "\n" \ "Copyright (C) 2020 hato-bot Development team\n" \ "https://github.com/dev-hato/hato-bot ```" client.post(str_ver)
def ret(client: BaseClient): user = client.get_send_user_name() logger.debug("%s called 'hato amesh '", user) msg: str = '雨雲状況をお知らせするっぽ!' lat = None lon = None place_list = split_command(place, 2) if len(place_list) == 2: lat, lon = place_list else: geo_data = get_geo_data(place_list[0] or '東京') if geo_data is not None: msg = geo_data['place'] + 'の' + msg lat = geo_data['lat'] lon = geo_data['lon'] if lat is None or lon is None: client.post('雨雲状況を取得できなかったっぽ......') return None amesh_img = jma_amesh(lat=float(lat), lng=float(lon), zoom=10, around_tiles=2) if amesh_img is None: client.post('雨雲状況を取得できなかったっぽ......') return None client.post(msg) with NamedTemporaryFile() as weather_map_file: amesh_img.save(weather_map_file, format='PNG') filename = ['amesh'] ext = imghdr.what(weather_map_file.name) if ext: filename.append(ext) client.upload(file=weather_map_file.name, filename=os.path.extsep.join(filename)) return True return None
def ret(client: BaseClient): user = client.get_send_user_name() logger.debug("%s called 'hato altitude '", user) coordinates = None place_name = None place_list = split_command(place, 2) if len(place_list) == 2: try: coordinates = [str(float(p)) for p in reversed(place_list)] except ValueError: client.post('引数が正しくないっぽ......') return None place_name = ', '.join(reversed(coordinates)) else: geo_data = get_geo_data(place_list[0] or '東京') if geo_data is not None: coordinates = [geo_data['lon'], geo_data['lat']] place_name = geo_data['place'] if coordinates is not None: res = requests.get('https://map.yahooapis.jp/alt/V1/getAltitude', { 'appid': conf.YAHOO_API_TOKEN, 'coordinates': ','.join(coordinates), 'output': 'json' }, stream=True) if res.status_code == 200: data_list = json.loads(res.content) if 'Feature' in data_list: for data in data_list['Feature']: if 'Property' in data and 'Altitude' in data['Property']: altitude_ = data['Property']['Altitude'] altitude_str = '{:,}'.format(altitude_) client.post(f'{place_name}の標高は{altitude_str}mっぽ!') return res client.post('標高を取得できなかったっぽ......') return None
def ret(client: BaseClient): user = client.get_send_user_name() word = hato_ha_karaage(message) logger.debug("%s called 'hato >< %s'", user, word) msg = generator(word) client.post(msg)
def yoshiyoshi(client: BaseClient): """「にゃーん」を見つけたら、「よしよし」と返す""" logger.debug("%s called 'hato yoshiyoshi'", client.get_send_user()) logger.debug("%s app called 'hato yoshiyoshi'", client.get_type()) client.post('よしよし')
def ret(client: BaseClient): add_vocabulary(word) user = client.get_send_user_name() logger.debug("%s called 'text add'", user) client.post('覚えたっぽ!')
def show_random_text(client: BaseClient): """パワーワードの一覧からランダムで1つを表示する""" user = client.get_send_user_name() logger.debug("%s called 'text random'", user) msg = show_random_vocabulary() client.post(msg)
def default_action(client: BaseClient): """どのコマンドにもマッチしなかった""" client.post(conf.DEFAULT_REPLY)
def ret(client: BaseClient): user = client.get_send_user_name() logger.debug("%s called 'text delete'", user) msg = delete_vocabulary(int(power_word_id)) client.post(msg)