예제 #1
0
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))
예제 #2
0
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)
예제 #3
0
 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 + '```')
예제 #4
0
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)
예제 #5
0
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)
예제 #6
0
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)
예제 #7
0
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)
예제 #8
0
    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)
예제 #9
0
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)
예제 #10
0
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)
예제 #11
0
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)
예제 #12
0
    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
예제 #13
0
    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
예제 #14
0
 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)
예제 #15
0
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('よしよし')
예제 #16
0
 def ret(client: BaseClient):
     add_vocabulary(word)
     user = client.get_send_user_name()
     logger.debug("%s called 'text add'", user)
     client.post('覚えたっぽ!')
예제 #17
0
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)
예제 #18
0
def default_action(client: BaseClient):
    """どのコマンドにもマッチしなかった"""
    client.post(conf.DEFAULT_REPLY)
예제 #19
0
 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)