Beispiel #1
0
def unalias_name(message, user_name, alias_name=None):
    """ユーザーに紐づくエイリアス名を削除する

    :param message: slackbotの各種パラメータを保持したclass
    :param str user_name: 削除するエイリアス名を持つSlackユーザー
    :param str alias_name: 削除するエイリアス名
       alias_nameがNoneの場合、user_nameをalias_nameとして扱う
       上記の場合user_nameは投稿者となる
    """
    if alias_name:
        # ユーザー名とエイリアス名が指定されているパターン
        slack_id = get_slack_id_by_name(user_name)
    else:
        # 投稿者のエイリアス名を更新するパターン
        alias_name = user_name
        slack_id = message.body['user']
        user_name = get_user_name(slack_id)

    if not slack_id:
        botsend(message, '{}に紐づくSlackのuser_idは存在しません'.format(user_name))
        return

    s = Session()
    alias_user_name = (s.query(UserAliasName).filter(
        UserAliasName.slack_id == slack_id).filter(
            UserAliasName.alias_name == alias_name).one_or_none())

    if alias_user_name:
        s.delete(alias_user_name)
        s.commit()
        botsend(message,
                '{}のエイリアス名から `{}` を削除しました'.format(user_name, alias_name))
    else:
        botsend(message,
                '{}のエイリアス名 `{}` は登録されていません'.format(user_name, alias_name))
Beispiel #2
0
def show_user_alias_name(message, user_name=None):
    """ユーザーのエイリアス名一覧を表示する

    :param message: slackbotの各種パラメータを保持したclass
    :param str user: Slackのユーザー名
    """
    if user_name:
        slack_id = get_slack_id_by_name(user_name)
    else:
        slack_id = message.body['user']
        user_name = get_user_name(slack_id)

    if not slack_id:
        botsend(message, '{}に紐づくSlackのuser_idは存在しません'.format(user_name))
        return

    s = Session()
    alias_names = [
        user.alias_name for user in s.query(UserAliasName).filter(
            UserAliasName.slack_id == slack_id)
    ]

    pt = PrettyTable(['ユーザー名', 'Slack ID', 'エイリアス名'])
    alias_name = ','.join(alias_names)
    pt.add_row([user_name, slack_id, alias_name])
    botsend(message, '```{}```'.format(pt))
Beispiel #3
0
def alias_name(message, user_name, alias_name=None):
    """指定したユーザにエイリアス名を紐付ける

    :param message: slackbotの各種パラメータを保持したclass
    :param str user_name: エイリアス名を紐付けるSlackユーザー
    :param str alias_name: Slackユーザーに紐付けるエイリアス名
       alias_nameがNoneの場合、user_nameをalias_nameとして扱う
       上記の場合user_nameは投稿者となる
    """
    if alias_name:
        # ユーザー名とエイリアス名が指定されているパターン
        slack_id = get_slack_id_by_name(user_name)
    else:
        # 投稿者のエイリアス名を更新するパターン
        alias_name = user_name
        slack_id = message.body['user']
        user_name = get_user_name(slack_id)

    user = get_slack_id_by_name(alias_name)
    if user:
        botsend(message, '`{}` はユーザーが存在しているので使用できません'.format(alias_name))
        return

    if not slack_id:
        botsend(message, '{}に紐づくSlackのuser_idは存在しません'.format(user_name))
        return

    s = Session()
    alias_user_name = (s.query(UserAliasName).filter(
        UserAliasName.alias_name == alias_name))
    if s.query(alias_user_name.exists()).scalar():
        botsend(message, 'エイリアス名 `{}` は既に登録されています'.format(alias_name))
        return

    s.add(UserAliasName(slack_id=slack_id, alias_name=alias_name))
    s.commit()
    botsend(message, '{}のエイリアス名に `{}` を追加しました'.format(user_name, alias_name))
Beispiel #4
0
def get_slack_id(session, user_name):
    """指定したユーザー名のSlackのuser_idを返す

    Slackのユーザー名として存在すればAPIからuser_idを取得
    取得できない場合、user_alias_nameにエイリアス名として登録されたユーザー名であれば、
    それに紐づくSlackのuser_idを返す

    :params session: sqlalchemy.orm.Session
    :params str name: ユーザーのエイリアス名
    """
    slack_id = get_slack_id_by_name(user_name)
    if not slack_id:
        slack_id = (session.query(UserAliasName.slack_id).filter(
            UserAliasName.alias_name == user_name).scalar())
    return slack_id