public override async Task <bool> OnTimelineAsync(IPost n, IShell shell, Server core) { var s = core.GetMyStorage(); var list = s.Get(CitrineIntegrationInteractedNoteIds, new List <string>()); var post = n.Repost is not null ? n.Repost : n; // 既に反応していれば関わらない if (list.Contains(post.Id)) { return(false); } // テキスト一致判定 var isMatch = Keywords.Contains(post.Text?.Trim()); // うちの子ファミリーのbotであるかどうかの雑判定 // 名前一致と同一ホストかどうかの判定 var isFamily = post.User.Name.ToLowerInvariant() == "kaho" && string.IsNullOrEmpty(post.User.Host); if (isMatch && isFamily) { // 既に反応したノートとしてリストアップする list.Add(post.Id); s.Set(CitrineIntegrationInteractedNoteIds, list); await Task.Delay(1200); await shell.RepostAsync(post); await Task.Delay(800); await shell.FollowAsync(post.User); } return(false); }
public override async Task <bool> ActivateAsync(IPost n, IShell shell, Server core) { if (n.Text == null) { return(false); } if (n.Text.IsMatch("フォロ[ーバ](バック)?し")) { if (core.GetRatingOf(n.User) == Rating.Hate) { return(true); } core.LikeWithLimited(n.User); await shell.FollowAsync(n.User); await shell.ReactAsync(n, "✌️"); return(true); } if (n.Text.IsMatch("フォロ[ーバ](バック)?(解除|外し|[や辞]め)")) { core.LikeWithLimited(n.User); await shell.UnfollowAsync(n.User); await shell.ReactAsync(n, "👋"); return(true); } return(false); }
public override async Task <bool> OnFollowedAsync(IUser user, IShell shell, Server core) { if (core.GetRatingOf(user) == Rating.Hate) { return(true); } core.LikeWithLimited(user); await shell.FollowAsync(user); return(false); }
public override async Task <bool> OnFollowedAsync(IUser user, IShell shell, Server core) { await shell.FollowAsync(user); return(false); }