class Twitter::SendOnTwitterService < Base::SendOnChannelService pattr_initialize [:message!] private delegate :additional_attributes, to: :contact def channel_class Channel::TwitterProfile end def perform_reply conversation_type == 'tweet' ? send_tweet_reply : send_direct_message end def twitter_client Twitty::Facade.new do |config| config.consumer_key = ENV.fetch('TWITTER_CONSUMER_KEY', nil) config.consumer_secret = ENV.fetch('TWITTER_CONSUMER_SECRET', nil) config.access_token = channel.twitter_access_token config.access_token_secret = channel.twitter_access_token_secret config.base_url = 'https://api.twitter.com' config.environment = ENV.fetch('TWITTER_ENVIRONMENT', '') end end def conversation_type conversation.additional_attributes['type'] end def screen_name "@#{additional_attributes ? additional_attributes['screen_name'] : ''} " end def send_direct_message twitter_client.send_direct_message( recipient_id: contact_inbox.source_id, message: message.content ) end def send_tweet_reply response = twitter_client.send_tweet_reply( reply_to_tweet_id: conversation.additional_attributes['tweet_id'], tweet: screen_name + message.content ) if response.status == '200' tweet_data = response.body message.update!(source_id: tweet_data['id_str']) else Rails.logger.info 'TWITTER_TWEET_REPLY_ERROR' + response.body end end end