You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
97 lines
2.5 KiB
97 lines
2.5 KiB
package message |
|
|
|
import ( |
|
"context" |
|
|
|
"github.com/go-faster/errors" |
|
|
|
"github.com/gotd/td/tg" |
|
) |
|
|
|
// ReportBuilder is a reporting messages helper. |
|
type ReportBuilder struct { |
|
sender *Sender |
|
peer peerPromise |
|
ids []int |
|
message string |
|
} |
|
|
|
// Message sets additional comment for report. |
|
func (b *ReportBuilder) Message(msg string) *ReportBuilder { |
|
b.message = msg |
|
return b |
|
} |
|
|
|
func (b *ReportBuilder) send(ctx context.Context, reason tg.ReportReasonClass) (bool, error) { |
|
p, err := b.peer(ctx) |
|
if err != nil { |
|
return false, errors.Wrap(err, "peer") |
|
} |
|
|
|
return b.sender.report(ctx, &tg.MessagesReportRequest{ |
|
Peer: p, |
|
ID: b.ids, |
|
Reason: reason, |
|
Message: b.message, |
|
}) |
|
} |
|
|
|
// Spam sends report for spam. |
|
func (b *ReportBuilder) Spam(ctx context.Context) (bool, error) { |
|
return b.send(ctx, &tg.InputReportReasonSpam{}) |
|
} |
|
|
|
// Violence sends report for violence. |
|
func (b *ReportBuilder) Violence(ctx context.Context) (bool, error) { |
|
return b.send(ctx, &tg.InputReportReasonViolence{}) |
|
} |
|
|
|
// Pornography sends report for pornography. |
|
func (b *ReportBuilder) Pornography(ctx context.Context) (bool, error) { |
|
return b.send(ctx, &tg.InputReportReasonPornography{}) |
|
} |
|
|
|
// ChildAbuse sends report for child abuse. |
|
func (b *ReportBuilder) ChildAbuse(ctx context.Context) (bool, error) { |
|
return b.send(ctx, &tg.InputReportReasonChildAbuse{}) |
|
} |
|
|
|
// Other sends report for other. |
|
func (b *ReportBuilder) Other(ctx context.Context) (bool, error) { |
|
return b.send(ctx, &tg.InputReportReasonOther{}) |
|
} |
|
|
|
// Copyright sends report for copyrighted content. |
|
func (b *ReportBuilder) Copyright(ctx context.Context) (bool, error) { |
|
return b.send(ctx, &tg.InputReportReasonCopyright{}) |
|
} |
|
|
|
// GeoIrrelevant sends report for irrelevant geogroup. |
|
func (b *ReportBuilder) GeoIrrelevant(ctx context.Context) (bool, error) { |
|
return b.send(ctx, &tg.InputReportReasonGeoIrrelevant{}) |
|
} |
|
|
|
// Fake sends report for fake. |
|
func (b *ReportBuilder) Fake(ctx context.Context) (bool, error) { |
|
return b.send(ctx, &tg.InputReportReasonFake{}) |
|
} |
|
|
|
// Report reports messages in a chat for violation of Telegram's Terms of Service. |
|
func (b *RequestBuilder) Report(id int, ids ...int) *ReportBuilder { |
|
return &ReportBuilder{ |
|
sender: b.sender, |
|
peer: b.peer, |
|
ids: append([]int{id}, ids...), |
|
} |
|
} |
|
|
|
// ReportSpam reports peer for spam. |
|
// NB: You should check that the peer settings of the chat allow us to do that. |
|
func (b *RequestBuilder) ReportSpam(ctx context.Context) (bool, error) { |
|
p, err := b.peer(ctx) |
|
if err != nil { |
|
return false, errors.Wrap(err, "peer") |
|
} |
|
|
|
return b.sender.reportSpam(ctx, p) |
|
}
|
|
|