# A hopefully simple question

**URL:** <https://www.ruby-forum.com/t/a-hopefully-simple-question/165106>\
**Category:** Ruby\
**Created:** [April 9, 2009, 6:04am UTC](https://www.ruby-forum.com/t/a-hopefully-simple-question/165106 "2009-04-09T06:04:54Z")\
**Posts on this page:** 6\
**Page:** 1

<div class="post-metadata">

**Author:** ![chuft](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/c/8baadc/32.png) [@chuft](https://www.ruby-forum.com/u/chuft)\
**Post date:** [April 9, 2009, 6:04am UTC](https://www.ruby-forum.com/t/a-hopefully-simple-question/165106/1 "2009-04-09T06:04:54Z")

</div>

Hello,

I downloaded an irc bot written in Ruby. I haven’t programmed in many  
years but couldn’t resist the urge to tinker with the code so I peeked  
inside.

Basically I am trying to add additional string recognition statements to  
this bot, so it says things in response to things people say in the  
channel.

For example the code contains this statement:

```
  elsif msg.text == "lol"
    reply(msg, " LOLOLOLOL")

```

This works fine. However I would like to have it respond if the  
statement being evaluated has “lol” anywhere in it, not just if it is  
exactly “lol”. In other words, I want to search their string, which  
appears to be in the variable msg.text, to see if it contains “lol”. In  
the past, I have found this to be a simple matter in other languages.

I have been unable to find out how to do this in Ruby. If I try this:

```
  elsif msg.text.include? "lol"
    reply(msg, " LOLOLOLOL")

```

the bot either does not run at all, or else quits immediately. Similar  
instant failure occurs when I try

```
  elsif msg.text.include?("lol")
    reply(msg, " LOLOLOLOL")

```

or

```
 elsif msg.text =~ "lol"
    reply(msg, " LOLOLOLOL")

```

Is there a simple way to accomplish this task by replacing the ==  
comparison operator with something else that searches a string variable  
for a substring?

Thanks

---

<div class="post-metadata">

**Author:** ![chuft](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/c/8baadc/32.png) [@chuft](https://www.ruby-forum.com/u/chuft)\
**Post date:** [April 9, 2009, 6:13am UTC](https://www.ruby-forum.com/t/a-hopefully-simple-question/165106/2 "2009-04-09T06:13:46Z")

</div>

Chuft Captain wrote:

> Is there a simple way to accomplish this task by replacing the ==  
> comparison operator with something else that searches a string variable  
> for a substring?
> 
> Thanks

/Everybody stand back/  
I know regular expressions

if msg.text =~ %r{lol}i  
reply(msg, " LOLOLOLOL")

# ======================================================================= This email, including any attachments, is only for the intended addressee. It is subject to copyright, is confidential and may be the subject of legal or other privilege, none of which is waived or lost by reason of this transmission. If the receiver is not the intended addressee, please accept our apologies, notify us by return, delete all copies and perform no other act on the email. Unfortunately, we cannot warrant that the email has not been altered or corrupted during transmission.

---

<div class="post-metadata">

**Author:** ![chuft](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/c/8baadc/32.png) [@chuft](https://www.ruby-forum.com/u/chuft)\
**Post date:** [April 9, 2009, 6:40am UTC](https://www.ruby-forum.com/t/a-hopefully-simple-question/165106/3 "2009-04-09T06:40:41Z")

</div>

Michael M. wrote:

> /Everybody stand back/  
> I know regular expressions

Our hero!

> if msg.text =~ %r{lol}i  
> reply(msg, " LOLOLOLOL")

bla\> echololia is a serious aphasia

bot\> LOLOLOLOL

bla\> uh… k

---

<div class="post-metadata">

**Author:** ![chuft](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/c/8baadc/32.png) [@chuft](https://www.ruby-forum.com/u/chuft)\
**Post date:** [April 9, 2009, 6:44am UTC](https://www.ruby-forum.com/t/a-hopefully-simple-question/165106/4 "2009-04-09T06:44:47Z")

</div>

Phlip wrote:

> Michael M. wrote:
> 
> > /Everybody stand back/  
> > I know regular expressions
> 
> Our hero!
> 
> > if msg.text =~ %r{lol}i  
> > reply(msg, " LOLOLOLOL")
> 
> bla\> echololia is a serious aphasia
> 
> bot\> LOLOLOLOL
> 
> bla\> uh… k

It seems that if msg.text was a String object, then the include? method  
should work.  
The first thing I would do would be to try…

puts msg.text.class

…to know exactly what I am dealing with.

John S.

---

<div class="post-metadata">

**Author:** ![chuft](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/c/8baadc/32.png) [@chuft](https://www.ruby-forum.com/u/chuft)\
**Post date:** [April 9, 2009, 6:47am UTC](https://www.ruby-forum.com/t/a-hopefully-simple-question/165106/5 "2009-04-09T06:47:03Z")

</div>

Michael M. wrote:

> Chuft Captain wrote:
> 
> > Is there a simple way to accomplish this task by replacing the ==  
> > comparison operator with something else that searches a string variable  
> > for a substring?
> > 
> > Thanks
> 
> /Everybody stand back/  
> I know regular expressions
> 
> if msg.text =~ %r{lol}i  
> reply(msg, " LOLOLOLOL")

You are a god among men. You have my thanks!

---

<div class="post-metadata">

**Author:** ![chuft](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/c/8baadc/32.png) [@chuft](https://www.ruby-forum.com/u/chuft)\
**Post date:** [April 9, 2009, 6:46am UTC](https://www.ruby-forum.com/t/a-hopefully-simple-question/165106/6 "2009-04-09T06:46:33Z")

</div>

Phlip wrote:

> bla\> echololia is a serious aphasia
> 
> bot\> LOLOLOLOL
> 
> bla\> uh… k

%r{\Wlol\W}i

da di duh da…  
_indiana jones theme music_

# ======================================================================= This email, including any attachments, is only for the intended addressee. It is subject to copyright, is confidential and may be the subject of legal or other privilege, none of which is waived or lost by reason of this transmission. If the receiver is not the intended addressee, please accept our apologies, notify us by return, delete all copies and perform no other act on the email. Unfortunately, we cannot warrant that the email has not been altered or corrupted during transmission.
